DBGridEh实现第一列打勾选择,获取第二、三列内容

monkerly_asser 2017-04-19 04:44:21
大神们,如何实现DBGridEh1中,获取第一列checkbox是否打勾(默认没打钩,DBGridEh2为空),有打钩的,获取DBGridEh1第二列“工号”,第三列“姓名”,作为存储过程传入参数。DBGridEh2根据DBGridEh1打勾行的“工号”,“姓名”信息。相应显示出对应该员工的记录。
...全文
832 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
monkerly_asser 2017-05-04
  • 打赏
  • 举报
回复
结贴了,虽然没解决问题,但还是先谢谢了
monkerly_asser 2017-04-26
  • 打赏
  • 举报
回复
引用 12 楼 lyhoo163 的回复:
[quote=引用 11 楼 MKLsweet 的回复:] [quote=引用 3 楼 lyhoo163 的回复:] 取值代码:

    while Not Eof do
    begin
      if FieldByName('选择').AsBoolean then
      begin
        A[Top,0]:=FieldByName('工号').AsString;// A[Top,1]动态数组
        A[Top,1]:=FieldByName('姓名').AsString;
        Top:=Top+1;
      end;
      Next;
    end;
MSSQL不支持数组啊,另外我用的是sqlserver2005,存储过程参数不支持表值参数,如何实现多选时,存储过程能把选中的数据都作为传入参数,而不是只查最后选中的那条数据。[/quote] A[Top,0]是动态数组,目的临时是保存数据,进行处理呢,这里不是存储过程。[/quote]这样,我改用临时表存储数据,用存储过程循环一条条读取临时表数据,存储过程内嵌套存储过程执行。比如,我多选是4组数据。在sql上存储过程显示结果分别是4条EXEC结果。也就是有4个表集。在DBGrid上只能显示最上面的一个结果集。如何让多个存储过程执行结果显示在一条DBGrid上?
lyhoo163 2017-04-25
  • 打赏
  • 举报
回复
引用 11 楼 MKLsweet 的回复:
[quote=引用 3 楼 lyhoo163 的回复:] 取值代码:

    while Not Eof do
    begin
      if FieldByName('选择').AsBoolean then
      begin
        A[Top,0]:=FieldByName('工号').AsString;// A[Top,1]动态数组
        A[Top,1]:=FieldByName('姓名').AsString;
        Top:=Top+1;
      end;
      Next;
    end;
MSSQL不支持数组啊,另外我用的是sqlserver2005,存储过程参数不支持表值参数,如何实现多选时,存储过程能把选中的数据都作为传入参数,而不是只查最后选中的那条数据。[/quote] A[Top,0]是动态数组,目的临时是保存数据,进行处理呢,这里不是存储过程。
monkerly_asser 2017-04-25
  • 打赏
  • 举报
回复
引用 3 楼 lyhoo163 的回复:
取值代码:

    while Not Eof do
    begin
      if FieldByName('选择').AsBoolean then
      begin
        A[Top,0]:=FieldByName('工号').AsString;// A[Top,1]动态数组
        A[Top,1]:=FieldByName('姓名').AsString;
        Top:=Top+1;
      end;
      Next;
    end;
MSSQL不支持数组啊,另外我用的是sqlserver2005,存储过程参数不支持表值参数,如何实现多选时,存储过程能把选中的数据都作为传入参数,而不是只查最后选中的那条数据。
lyhoo163 2017-04-21
  • 打赏
  • 举报
回复
monkerly_asser 2017-04-21
  • 打赏
  • 举报
回复
procedure Ttest.DBGrid1CellClick(Column: TColumn);
var
 A:array of array [0..5]of string;
begin
if DBGrid1.SelectedField.DataType=ftboolean then
  begin
  with DBGrid1.DataSource.DataSet do
    begin
      Edit;
      DBGrid1.SelectedField.AsBoolean:=not DBGrid1.SelectedField.AsBoolean;
      Post;
      DBGrid1.Options:=DBGrid1.Options-[dgEditing];
    end;
     SetLength (A,2);
    while Not Eof do
    begin
      if DBGrid1.DataSource.DataSet.FieldByName('选择').AsBoolean then
      begin
        A[Top,0]:=DBGrid1.DataSource.DataSet.FieldByName('姓名').AsString;// A[Top,1]动态数组
        A[Top,1]:=DBGrid1.DataSource.DataSet.FieldByName('工号').AsString;
        Edit1.text :=A[Top,0];
        Edit2.Text :=A[Top,1];
        Top:=Top+1;
      end;
      Next;
    end;
 end
monkerly_asser 2017-04-21
  • 打赏
  • 举报
回复
引用 6 楼 lyhoo163 的回复:
一、定义二维动态数组 A var A : array of array [0..5] of String; // 保存数据 二、设置动态数组长度 SetLength (A, Top); 三、可以根据需要,加长动态数组长度 while Not Eof do begin if FieldByName('选择').AsBoolean then begin Top:=Top+1; // 步长 +1 SetLength (A, Top); // 数据长度+1,接着向加长的数组赋值 A[Top,0]:=FieldByName('姓名').AsString; A[Top,1]:=FieldByName('性别').AsString;
选中的数组,我想带出来作为存储过程传入参数,但是出现错误,用Edit.Text也显示不出来。显示错误 I/O error 6
monkerly_asser 2017-04-21
  • 打赏
  • 举报
回复
引用 9 楼 lyhoo163 的回复:
大神,别这样,我刚开始玩delphi
monkerly_asser 2017-04-20
  • 打赏
  • 举报
回复
引用 1 楼 lyhoo163 的回复:
可以实现 具体设置,请见我的博客:http://blog.csdn.net/lyhoo163/article/details/28108413
第一个选择框有时候打勾出现false.我存储过程第一列返回值设置为0(类型bit)
lyhoo163 2017-04-20
  • 打赏
  • 举报
回复
取值代码:

    while Not Eof do
    begin
      if FieldByName('选择').AsBoolean then
      begin
        A[Top,0]:=FieldByName('工号').AsString;// A[Top,1]动态数组
        A[Top,1]:=FieldByName('姓名').AsString;
        Top:=Top+1;
      end;
      Next;
    end;
lyhoo163 2017-04-20
  • 打赏
  • 举报
回复
提示DBGridEh“选择”的设置与DBGrid基本相同。
lyhoo163 2017-04-20
  • 打赏
  • 举报
回复
可以实现


具体设置,请见我的博客:http://blog.csdn.net/lyhoo163/article/details/28108413
lyhoo163 2017-04-20
  • 打赏
  • 举报
回复
一、定义二维动态数组 A var A : array of array [0..5] of String; // 保存数据 二、设置动态数组长度 SetLength (A, Top); 三、可以根据需要,加长动态数组长度 while Not Eof do begin if FieldByName('选择').AsBoolean then begin Top:=Top+1; // 步长 +1 SetLength (A, Top); // 数据长度+1,接着向加长的数组赋值 A[Top,0]:=FieldByName('姓名').AsString; A[Top,1]:=FieldByName('性别').AsString;
monkerly_asser 2017-04-20
  • 打赏
  • 举报
回复
引用 3 楼 lyhoo163 的回复:
取值代码:

    while Not Eof do
    begin
      if FieldByName('选择').AsBoolean then
      begin
        A[Top,0]:=FieldByName('工号').AsString;// A[Top,1]动态数组
        A[Top,1]:=FieldByName('姓名').AsString;
        Top:=Top+1;
      end;
      Next;
    end;
这个动态数组应该怎么定义?

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧