手头上有一个项目,客户要求对表格(DBGRID)中的数据进行选取打印.我准备在DBGRID中增加一列(CHECKBOX)按钮,让用户进行选择.可怎样实现呢.1、我尝试着在ADODataSet加入NewField,可显示出的数据无法修改.   还有一个最笨的办法,就是在数据中加入一个字段(是否打印),难道这是   唯一的办法吗,请您指点.2、增加一列(CHECKBOX)按钮,我准备用DBGRID的第三方控件,如果您有更   好的办法(不使用第三方控件,即使麻烦也没关系),请赐教.
分不够,您说话 :)

解决方案 »

  1.   

    用DbgridEh 好了,轻松搞定
      

  2.   

    用DbgridEh  这几天刚用很爽
      

  3.   

    把选取的内容存入一个临时表(用TADODataSet之FieldDefs创建),再以此临时表为数据源进行打印
      

  4.   

    打印和数据没有关系,打印部分只要传递一个数据集。然后你就把这个数据集里的所有记录都打印出来。至于dbgrid,在option里有个multiselect属性,设置为true,这样用户就可以按住ctrl进行多选了,选完了以后你用dbgrid.selectedrows属性(看看delphi的这个属性的帮助有例子的哦)循环向一个TClientDataSet复制过去,然后把TClientDataSet传递到打印模块就可以打印了。
    不知道明白了没有。
      

  5.   

    楼上的兄弟,您的方法,对我帮助很大,谢谢了。关于把DBGrid中的数据复制到TClientDataSet,您能
    说的详细点吗。
      

  6.   

    你也可以把DBGrid中的数据复制到一個臨時表!再打印!
      

  7.   

    1、select 0 as selected,* from tablename
    这样就多出一列作为checkcolumn
    2、设置adodataset为batchmode
    这样对于selected列进行的修改就不会马上往数据库保存,也就不会出错。
    或设置selected列的providerflag去掉pfinupdate也许可以。:)
    3、点选了checkbox后,打印前对adodataset用filter filter:= 'selected=1'
    这样就能过滤出所有选择了的信息,最好先克隆再对克隆的数据集过滤。good luck
      

  8.   

    zyzl,我留言给你系统提示太长,写在这里吧,关于创建临时表!
    以下代码权作参考[adsTest: TADODataSet]:
    var
      i: Integer;
    begin
      with adsTest.FieldDefs.AddFieldDef do
      begin
        Name := 'spring';     {字段名}
        Size := 8;            {长度}
        DataType := ftString; {字段类型}
      end;
      with adsTest.FieldDefs.AddFieldDef do
      begin
        Name := 'autumn';
        Size := 8;
        DataType := ftString;
      end;
      
      adsTest.CreateDataSet; {至此,临时表创建字段完成,下面填充内容}
      adsTest.Open;
      for i := 0 to 12 do
      begin
        adsTest.Append;
        adsTest.FieldByName('spring').AsString := 'Spring ' + IntToStr(i);
        adsTest.FieldByName('autumn').AsString := 'Autumn ' + IntToStr(i);
        adsTest.Post;  {以上区间代码为添充之内容,你可以在这里处理,填入你
                        想要填充的内容,在:=右边;内容可来自多表所选出}
      end;
    end; 然后你可用此ADODataSet为数据集进行操作了,和一般DataSet如ADOQuery操作相同