【问题标题】:How to select a row with a MDB database (TDBGrid)如何使用 MDB 数据库 (TDBGrid) 选择行
【发布时间】:2018-03-28 20:02:21
【问题描述】:

我希望有人可以帮助我。我知道如何显示一列,但只针对选定的行,不知道如何选择一行。

我有一个小的 MDB 3x9

Item    Supplier    Price
--------------------------    
apple   applesRus   $1
Grape   GrapesRus   $2
Milk    MilkRus     $3
....    ....        ...

只想了解供应商(只是草稿)

for supplierList < 9 do;
begin
supplierlist + 1;
supplier : = DBgrid1.row[supplierlist].field[1];
memo1.Lines.Add(Supplier);
end;

【问题讨论】:

  • 移动底层数据集对象的光标(例如通过Locate方法)。
  • 我认为您正在寻找的是“dataset.next”,但不是很清楚。另外你想要一个“while not dataset.eof do ...”循环而不是“for”循环。

标签: delphi tdbgrid


【解决方案1】:

如何解决这个问题取决于您的网格是否在 Options 属性中具有 dgMultiSelect 设置为真或假。

如果 dgMultiSelect 为 False,则只需查找 提供 DBGrid 的数据集的当前行,因为在 DBGrid 中显示为选中的记录是数据集的逻辑光标所在的记录。你可以用类似的东西来做到这一点

  Memo1.Lines.Add(DataSet.FieldByName('Supplier').AsString);

如果 dgMultiSelect 为 True,您需要利用在 DBGrid 记录在可通过网格的 SelectedRows 属性访问的TBookmarkList 中。 基本上,您迭代 SelectedRows,使用每个书签访问相应的行 在数据集中查找字段值。类似的东西

  ADataSet := DBGrid1.DataSource.DataSet;

  for i:=0 to DBGrid1.SelectedRows.Count-1 do begin
    ADataSet.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
    Memo1.Lines.Add(DataSet.FieldByName('Supplier').AsString);
  end;

当操作一个多条记录时,在性能方面,最好:

  • 对 DisableControls 和 EnableControls 调用之间的操作进行括号 在数据集上,使用try ..finally ...

  • 将 ADataSet.FieldByName(somename) 的结果分配给本地 TField 变量 并从中查找字段值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2021-09-28
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多