gpt4 book ai didi

Delphi TDBGrid 选定行获取值

转载 作者:行者123 更新时间:2023-12-01 17:46:33 25 4
gpt4 key购买 nike

我想从 TDBGrid 中检索所选行的值,该怎么办?

procedure TForm7.Button2Click(Sender: TObject);
var
i, j: Integer;
s: string;
begin
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBookmark(DBGrid1.SelectedRows.Items[i]);
for j := 0 to FieldCount-1 do
begin
if (j>0) then s:=s+', ';
s := s + FindField(Fields.Fields[j].FieldName).AsString;
end;
Listbox1.Items.Add(s);
s:= '';
end;
end;

最佳答案

下面的代码修复了您的一些问题。

主要问题是您没有正确初始化s,并且获取所选行的字段的方式存在缺陷。

调用DataSet.Disable/EnableControlsListBox1.Items.BeginUpdate/EndUpdate是为了加快进程。

此外,像躲避瘟疫一样避免使用 with 结构。正如您所看到的,我使用本地 DataSet 变量只需要最少的额外输入,并避免了使用 with 时可能出现的各种意外问题。

procedure TForm1.GetSelected;
var
i,
J : Integer;
s : String;
DataSet : TDataSet;
begin
if DBGrid1.SelectedRows.Count>0 then begin
DataSet := DBGrid1.DataSource.DataSet;
// with DBGrid1.DataSource.DataSet do
try
ListBox1.Items.BeginUpdate;
DataSet.DisableControls;
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
DataSet.GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
s := '';
for j := 0 to DataSet.FieldCount - 1 do
begin
if (j>0) then s:=s+', ';
s := s + DataSet.Fields[j].AsString;
//s := s + FindField(Fields.Fields[j].FieldName).AsString;
end;
Listbox1.Items.Add(s);
//s:= '';
end;
finally
DataSet.EnableControls;
ListBox1.Items.EndUpdate;
end;
end;
end;

**更新:**

您可以像这样将当前网格行设置为选定

DBGrid1.SelectedRows.CurrentRowSelected := True;

更新#2

网格的选定行存储在名为 SelectedRowTBookmarkList 中。要清除当前选择,您所需要做的就是调用其 Clear 方法,如下所示:

procedure TForm1.btnClearSelectedClick(Sender: TObject);
begin
DBGrid1.SelectedRows.Clear;
end;

同样,如果您想清除 ListBox,只需调用其 Clear 方法,如下所示:

procedure TForm1.btnClearListBoxClick(Sender: TObject);
begin
ListBox1.Clear;
end;

如果您在使用我的代码时遇到问题,请尝试以下操作:

  1. 在对象检查器中,将 DBGrid Options 属性 dgMultiSelect 设置为 True。

  2. 在表单上放置一个按钮,并在其 OnClick 处理程序中调用 GetSelected

编译并运行。单击网格中的一行,然后单击按钮。什么都没发生。原因是单击该按钮会将焦点从 DBGrid 移开,因此就其而言,没有选择任何行。然后尝试步骤 3。

  • 再次运行应用程序。这次按住 Ctrl 键,同时单击网格,然后单击按钮。这次选定的行出现在列表框中。按住 Ctrl 按钮,单击网格中的另一行,然后单击 按钮。这次,两行都被添加到列表框中。
  • 关于Delphi TDBGrid 选定行获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778927/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com