ورود

View Full Version : Urgency



ms1024
یک شنبه 30 مرداد 1384, 16:39 عصر
با سلام چطور میتوان به محتویات یک سلول خاص DBgrid دسترسی داشت؟

حمیدرضاصادقیان
یک شنبه 30 مرداد 1384, 23:40 عصر
میتونی در رویداد onclick گرید بگی که مقدار اون سلول رو برات برگردونه

vcldeveloper
دوشنبه 31 مرداد 1384, 02:54 صبح
در DBGrid شما فقط به اطلاعات سطر جاری گرید دسترسی دارید. برای بدست آوردن مقادیر هر ستون، می تونید از خصویت Field اون ستون استفاده کنید. مثال:


S := DBGrid1.Columns[1].Field.Value;

برای بدست آوردن اطلاعات موجود در سطرهای دیگه یا باید اشاره گر جدول رو حرکت بدید، یا می تونید از ویژگی Clone در بعضی از DataSet ها(ADO) استفاده کنید:


function GetDBGridData(Grid : TDBGrid; Row, Col : integer): variant;
var
CloneDB : TADODataSet;
CurrRow : integer;
BookMark : TBookMarkStr;
begin
Result := null;
if (not Assigned(Grid)) or (Col = 0) then
Exit;
CloneDB := TADODataSet.Create(nil);
try
Grid.DataSource.DataSet.Open;
CurrRow := Grid.DataSource.DataSet.RecNo;
BookMark := Grid.DataSource.DataSet.Bookmark;
CloneDB.Clone(TCustomADODataSet(Grid.DataSource.Da taSet));
CloneDB.Bookmark := BookMark;
CloneDB.MoveBy(Row - CurrRow);
Result := CloneDB.Fields[Col-1].Value;
finally
CloneDB.Free;
end;
end;

مثال :


ShowMessage(GetDBGridData(DBGrid1,2,1));

مقدار ستون اول از سطر دوم DBGrid را نمایش میدهد.

دقت کنید که مقدار RecNo بستگی به سورت جدول شما، فیلتر بودن یا نبودن جدول و تعداد رکوردهای خوانده شده از جدول دارد و ممکن است مقدار آن با توجه به نوع استفادی که از DataSet در برنامه خود می کنید، نامعتبر باشد

ms1024
چهارشنبه 02 شهریور 1384, 23:48 عصر
با نهایت تشکر از پاسخ شما

rezamahdizadeh
دوشنبه 03 تیر 1387, 10:38 صبح
دقت کنید که مقدار RecNo بستگی به سورت جدول شما، فیلتر بودن یا نبودن جدول و تعداد رکوردهای خوانده شده از جدول دارد و ممکن است مقدار آن با توجه به نوع استفادی که از DataSet در برنامه خود می کنید، نامعتبر باشد
من يك DBGrid را با يك Dataset اوليه پر كرده ام اما كدي نوشته ام كه اگر كاربر روي عنوان ستون دوكليك كند بر اساس آن فيلد مرتب شود. قبل از sort و بعد از sort چگونه سطرها RecNo مي گيرند؟