我想在 TEdit 控件中列出 TDBGrid 的选定行的某些值(在这种情况下,为ID)。
我已经尝试过 AfterScroll 事件,以便在选择(!)之后捕获该事件,但是如果使用鼠标,它将无法正常工作。
如果我用鼠标单击一行,它不会出现在 TDBGrid.SelectedRows 集合中,只有在下一次单击/选择之后。 如果我使用键盘进行选择,则一切正常。
您有什么想法,如何解决?
我的解决方案的简化代码:
procedure TForm1.Clientdataset1AfterScroll(DataSet: tdataset);
begin
edtIDs.Text := string.Join(',',GetSelectedIDs().ToArray) ;
end;
function TForm1.GetSelectedIDs() : TList<string>;
var
i: Integer;
ds: tdataset;
bmOrig: TBookmark;
begin
fselectedIDs.Clear();
ds := DBGrid1.DataSource.DataSet;
bmOrig := ds.GetBookmark();
ds.AfterScroll := nil; //switch off AfterScroll event
try
if DBGrid1.SelectedRows.Count > 0 then begin
for i := 0 to DBGrid1.SelectedRows.Count - 1 do begin
ds.GotoBookmark(DBGrid1.SelectedRows.Items[i]);
fselectedIDs.Add(ds.FindField('ID').AsString);
end;
ds.GotoBookmark(bmOrig);
end;
finally
ds.AfterScroll := Clientdataset1AfterScroll; //switch on AfterScroll event
ds.FreeBookmark(bmOrig);
end;
Result := fselectedIDs;
end;