fastreport中,frxdbdataset有几个选项来控制打印的记录rbfirst,从数据集的第一行开始;
rbcurrent,从数据集的当前行开始;等
但如果客户要只打印它所选择的几行,怎么办?
我也查询一些资料,有的人说根据所选择的行,重新构造数据集,数据集只包含客户所选择的记录,这方法有点烦琐,如果是主从表,一个数据集还不能解决问题,
各位高手有没有更好的方法,请指教!!
rbcurrent,从数据集的当前行开始;等
但如果客户要只打印它所选择的几行,怎么办?
我也查询一些资料,有的人说根据所选择的行,重新构造数据集,数据集只包含客户所选择的记录,这方法有点烦琐,如果是主从表,一个数据集还不能解决问题,
各位高手有没有更好的方法,请指教!!
2.在用户介面要有一个DBGrid控件,数据源是连接aTABLE,给用户选择打印数据之用的.
3.fastreport连的数据源是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;
fastreport打印报表,也是逐行扫描的吧,难道不能这样,选择了的就显示报表,没选择的就跳过?
有谁试过没?