TDBGrid.SelectedRows何时在Delphi中更新?

我想在 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;
djxzh0 回答:TDBGrid.SelectedRows何时在Delphi中更新?

用TDBGrid的OnAfterScroll事件替换数据源的OnColEnter事件。

TDBGrid.OnColEnter的帮助下:

在焦点移到网格中的新单元格时发生。

写一个OnColEnter事件处理程序,以便在刚刚被选中时执行特定的操作。

焦点移至单元格

  • 用户使用键盘导航到单元格。例如,当用户使用Tab键或Home键时。
  • 用户在单元格中向下单击鼠标按钮。
  • 已设置SelectedField或SelectedIndex属性。

读取SelectedField或SelectedIndex属性,以确定刚刚输入的单元格。

本文链接:https://www.f2er.com/2994785.html

大家都在问