ورود

View Full Version : انتخاب در dbgrid



davoodmz
سه شنبه 29 فروردین 1385, 12:21 عصر
با سلام
یک dbgrid در فرمی وجود دارد
می خواهیم با کلیک کردن روی سطر انتخابی ( یک یا دو انتخاب) فیلد خاصی از آن سطر به یک listbox اضافه شود.
من کدش را نوشتم ولی برای انتخاب یک سل جواب می‌دهد و من می‌خواهم مثلاً فیلد name وارد listbox شود نه هرجا که انتخاب شده.


var
s: string;
begin
s:=dbgrid1.SelectedField.Text;

Listbox1.Items.Add(s);

mzjahromi
سه شنبه 29 فروردین 1385, 15:35 عصر
میشه بمنظورتون رو دقیقتر بگید؟

vcldeveloper
چهارشنبه 30 فروردین 1385, 07:09 صبح
می تونید از خصوصیت SelectedRows استفاده بکنید. این خصوصیت لیستی از سطرهای انتخاب شده در DBGrid را بصورت Bookmark نگه داری میکنه. برای استفاده از این Bookmark ها هم میشه راههای مختلفی پیشنهاد داد، اما اگه از ADO استفاده میکنید، بهترین حالتش اینه که از Clone استفاده کنید و رکورد مربوطه را از طریق Bookmark در جدول Clone شده بدست بیارید و مقدارش را به ListBox اضافه کنید. برای این منظور می تونید کدی مثل کد زیر بنویسید (فرصت نشد که کد رو تست کنم!):


procedure TForm1.Button1Click(Sender: TObject);
var
ClonedTable,
YourAdoTable : TCustomADODataSet;
i : integer;
Bookmark : string;
begin
//Replace AdoTable1 with your Ado dataset
YourAdoTable := AdoTable1;
ClonedTable := TCustomADODataSet.Create(nil);
try
if not YourAdoTable.Active then
Exit;
//Clone your ADO dataset
ClonedTable.Clone(YourAdoTable);
//Get each of the selected records
for i := 0 to DBGrid1.SelectedRows.Count-1 do
begin
Bookmark := DBGrid1.SelectedRows.Items[i];
//Go to the selected record
ClonedTable.Bookmark := Bookmark;
//retrieve the selected field from the record. Here we get the second
//field.
ListBox1.Items.Add(ClonedTable.Fields[1].AsString);
end;
finally
ClonedTable.Free;
end;
end;

davoodmz
چهارشنبه 30 فروردین 1385, 12:39 عصر
با سلام
من هنوز کد آقای کشاورز را تست نکردم
ولی بیان دقیقتر اینکه من می‌خواهم با دبل کلیک در هر ردیف از dbgrid که انتخاب شد در آن ردیف سلی خاصی (مثلا نام - یا فامیلی موجود در آن ردیف) وارد لیست باکس شود.
باتشکر
داود

mzjahromi
چهارشنبه 30 فروردین 1385, 17:03 عصر
ListBox1.Items.Add(DBGrid1.DataSource.DataSet.Fiel dByName('FieldName').AsString);

vcldeveloper
چهارشنبه 30 فروردین 1385, 17:21 عصر
ولی بیان دقیقتر اینکه من می‌خواهم با دبل کلیک در هر ردیف از dbgrid که انتخاب شد در آن ردیف سلی خاصی (مثلا نام - یا فامیلی موجود در آن ردیف) وارد لیست باکس شود.

اینکه بخواید در زمان دابل کلیک اطلاعات فیلد مربوطه را به ListBox وارد کنید با "... با کلیک کردن روی سطر انتخابی ( یک یا دو انتخاب) فیلد خاصی از آن سطر به یک listbox اضافه شود" فرق میکنه. برای این منظور همون کدی که آقای ذولقدر نوشتند برای شما کفایت میکنه.