检索TDBGrid中特定列的值

时间:2015-11-14 04:47:28

标签: delphi delphi-7 multi-select tdbgrid

我的应用程序中有一个名为Grid的TDBGRID,包含3列:

$ http GET http://127.0.0.1:8000/todos/ Origin:http://www.someorigin.com
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Date: Sat, 14 Nov 2015 04:42:38 GMT
Server: WSGIServer/0.1 Python/2.7.10
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN

我的网格是多选的。

当用户单击按钮时,如何获取所选行的EMP_ID(我想将它们传递给存储过程)。

1 个答案:

答案 0 :(得分:1)

如果我理解你想要什么,下面的代码应该会有所帮助。

选择的DBGrid中的行记录在存储在SelectedRows属性中的书签中。那么,要获得TForm1.GetBookmarkIDs的程序列表,那是什么 你需要做的是:

  • 将您当前的位置保存在网格中(CDS1.GetBookmark)

  • 迭代SelectedRows'依次获取每个书签的项目,获取书签,获取数据集以转到该书签并获取数据集行的EMP_ID(在我的测试数据中,列名恰好是' ID')

  • 使用EMP_ID值

  • 做任何你喜欢的事
  • 返回我们在开头标记的记录

对DisableControls和EnableControls的调用是为了加快速度,因为它们会阻止GUI中的其他数据感知控件(当然还有网格)在访问所选行时更新。

代码:

procedure TForm1.GetBookmarkIDs;
var
  BM,
  SelectedBM : TBookmark;
  EMP_ID : Integer;
  i : Integer;
begin
   BM := CDS1.GetBookmark;
   try
     CDS1.DisableControls;
     CDS1.First;
     for i  := 0 to DBGrid1.SelectedRows.Count - 1 do begin
       SelectedBM := PChar(DBGrid1.SelectedRows[i]);
       CDS1.GotoBookmark(SelectedBM);
       EMP_ID := CDS1.FieldByName('ID').AsInteger;
       Memo1.Lines.Add(IntToStr(EMP_ID));
     end;
   finally
     CDS1.GotoBookmark(BM);
     CDS1.FreeBookmark(BM);
     CDS1.EnableControls;
   end;
 end;

您没有准确说明如何格式化要发送到存储过程的EMP_ID列表。使用上面的代码,你可以做一些事情,比如每次围绕"调用存储过程,对于i:= 0 ..."循环。

如果你想要它们,比方说,作为逗号分隔的列表,你可以将例程重写为返回字符串的函数,沿着这些行

function TForm1.GetBookmarkIDs : String;
[...]
begin
  Result := '';
  [...]
       //EMP_ID := CDS1.FieldByName('ID').AsInteger;
       if Result <> '' then
         Result := Result + ', ';
       Result := Result + CDS1.FieldByName('ID').AsString;
       [...]