我的应用程序中有一个名为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(我想将它们传递给存储过程)。
答案 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;
[...]