我想从一个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;
5条答案
按热度按时间vbkedwbf1#
下面的代码修复了你的一些问题。
主要的问题是你没有正确地初始化
s
,你获取所选行字段的方法有缺陷。调用
DataSet.Disable/EnableControls
和ListBox1.Items.BeginUpdate/EndUpdate
是为了加快进程。此外,避免像瘟疫一样使用
with
结构。正如您所看到的,我使用的是一个本地DataSet
变量,它只需要最少的额外输入,并避免了在使用with
时可能出现的各种意外问题。更新:
您可以像这样将当前网格行设置为选中状态
更新#2
网格的选定行存储在名为
SelectedRow
的TBookmarkList
中。要清除当前的选择,你需要做的就是调用它的Clear
方法,如下所示:同样,如果你想清除你的ListBox,你只需调用它的
Clear
方法,如下所示:如果你在让我的代码工作时遇到问题,试试这个:
1.在对象检查器中,将DBGrid Options属性
dgMultiSelect
设置为True。1.在表单上放置一个按钮,并在其
OnClick
处理程序中调用GetSelected
。编译并运行。单击网格中的行,然后单击按钮。什么都没发生。原因是单击该按钮会将焦点从DBGrid移开,因此,就其而言,不会选中任何一行。然后尝试步骤3。
1.再次运行应用程序。这一次,按住Ctrl键的同时单击网格,然后单击按钮。这一次,选定的行将显示在列表框中。按住Ctrl按钮,单击网格中的另一行,然后单击按钮。这一次,两行都添加到ListBox中。
wrrgggsh2#
当您知道列号时,仅需要一行调用来检索值。系统将自动返回当前行或在网格列表中单击或双击的最后一行的值。
..
oknwwptz3#
这是我找回密钥的方法
开始start:='m ';
瓦尔_mod:string“公开声明“
xkftehaa4#
一个选定行的快速解决方案****:
1.在当前表单上添加
Data Controls > DBText
。1.使用对象检查器为
TDBText
拾取实际DataSource
。1.使用对象检查器在
TDBText
中选择必要的DataField
。1.在代码中获取值如下:
DBText.Caption
lymgl2op5#
如果您需要找到如何获取DBGrid中选定行的数据,我有提示。我使用DBGRID。selectedField通过DB_GRID获取所选字段并将所选字段转换为书签。SelectedField。数据集。书签和使用数据集。Gotobookmart转到DBGRID DB_DATA中的选定记录字段。GotoBookmark(DB_GRID.SelectedField。DataSet.Bookmark);