多谢! 

解决方案 »

  1.   

    创建一个aodquery,将选择的结果添加到这个dataset里面,然后打印这个dataset
      

  2.   

    1.要有两个数据结构一样的表,以下例子为,aTABLE,btable两个数据表.
    2.在用户介面要有一个DBGrid控件,数据源是连接aTABLE,给用户选择打印数据之用的.
    3.QuickReport连的数据源是btable表.
    4.打印按钮的代码如下:var
    i:integer;
    begin
      {------如果用户有选择了数据--------}
     if DBGrid.SelectedRows.Count>0 then begin
      ADOQuery.DisableControls;{数据源是aTABLE表}
     for i := 0 to DBGrid.SelectedRows.Count- 1 do begin
        ADOQuery.GotoBook(pointer(DBGrid.SelectedRows.Items[i]));
        with ADOQuery2 begin
          append;
          FieldByName('x_a').AsString:= adoquery.FieldByName('x_a').AsString;
          FieldByName('x_b').AsString:= adoquery.FieldByName('x_b').AsString;
          post;
        end;
      ...你的打印控制;
      ADOQuery.EnableControls;
     end;
     end else begin {没有选择数据的情况下为全部打印}
       with ADOQuery begin
         DisableControls;
         First;
          while not eof begin
            ADOQuery2.append;
            ADOQuery2.FieldByName('x_a').AsString:= FieldByName('x_a').AsString;
            ADOQuery2.FieldByName('x_b').AsString:= FieldByName('x_b').AsString;
            ADOQuery2.post;
            next;
          end;
         EnableControls;
       end;
      ........你的打印代码
     end;
     
    end;
      

  3.   

    以前用ReportBuilder做过,大概是先在数据集中增加一个字段,设置为BOOLEAN型的,在dbgrid里面设置为checkbox供拥护勾选。然后根据选择的内容打印,就象4楼的那样
      

  4.   

    或者如楼上说说,加上个标志字段,标识是否选择。
    或者创建个中间临时数据集,就用clientdataset吧,简单方便,把选中的记录暂存这里,然后传它到report里面去
      

  5.   

    1.状态标志法:设置一个状态标志,打印的置true,否则置false,根据true来打印
    2.转移法:放一个内存数据集,把要打印的放到内存数据集中,用quickreport关联他然后打印。
    zhoutler已经说的很清楚了。
      

  6.   

    在NeedData事件中判断即可;可参考demo中打印stringgrid的例子