代码如下:
procedure TForm1.qry_subAfterOpen(DataSet: TDataSet);
var
m: Integer;
begin
if not (qry_sub.IsEmpty) then grid_sub.Columns.AddAllColumns(True);
with grid_sub do
begin
Columns[0].Title.Alignment:=taCenter;
Columns[0].Title.Caption:='色号';
Columns[0].ReadOnly:=True;
Columns[0].Color:=$0080FF80;
Columns[0].Width:=36;
Columns[0].Footers.Add;
Columns[0].Footers[0].Alignment:=taCenter;
Columns[0].Footers[0].ValueType:=fvtCount;
Columns[1].Title.Alignment:=taCenter;
Columns[1].Title.Caption:='色名';
Columns[1].ReadOnly:=True;
Columns[1].Color:=$0080FF80;
Columns[1].Width:=65;
for m:=2 to Columns.Count-2 do
begin
Columns[m].Title.Alignment:=taCenter;
Columns[m].Width:=40;
end;
Columns[Columns.Count-1].Title.Alignment:=taCenter;
Columns[Columns.Count-1].ReadOnly:=True;
Columns[Columns.Count-1].Color:=$0080FF80;
Columns[Columns.Count-1].Width:=52;
for m:=2 to Columns.Count-1 do
begin
Columns[m].Footers.Add;
Columns[m].Footers[0].Alignment:=taCenter;
Columns[m].Footers[0].ValueType:=fvtSum;
end;
end;
end;说明一下:
qry_sub中的列是动态语句生成的,列数不定。
使用这段代码后,当列数比较多的时候,正常,此时qry_sub查到的结果如下:
colorid,colorname,1,2,3,4,sums
19,aa,1,2,2,0,5
68,bb,2,2,2,2,8这种情况下正常但当qry_sub只查到一个尺码列的时候,如以下结果时
colorid,colorname,2,sums
19,aa,3,3
77,bb,4,4这种情况的时候,footer中报错,内容如下:
提示如下:qry_sub field '1' not found,dbsumlst.pas系统提示出错
case Item.GroupOperation of
goSum:
if (FDataSet.FieldByName(Item.FieldName).IsNull = False) then
Item.SumValue := Item.SumValue + FDataSet.FieldByName(Item.FieldName).AsFloat;
请问这种情况是怎么回事?如何解决?
procedure TForm1.qry_subAfterOpen(DataSet: TDataSet);
var
m: Integer;
begin
if not (qry_sub.IsEmpty) then grid_sub.Columns.AddAllColumns(True);
with grid_sub do
begin
Columns[0].Title.Alignment:=taCenter;
Columns[0].Title.Caption:='色号';
Columns[0].ReadOnly:=True;
Columns[0].Color:=$0080FF80;
Columns[0].Width:=36;
Columns[0].Footers.Add;
Columns[0].Footers[0].Alignment:=taCenter;
Columns[0].Footers[0].ValueType:=fvtCount;
Columns[1].Title.Alignment:=taCenter;
Columns[1].Title.Caption:='色名';
Columns[1].ReadOnly:=True;
Columns[1].Color:=$0080FF80;
Columns[1].Width:=65;
for m:=2 to Columns.Count-2 do
begin
Columns[m].Title.Alignment:=taCenter;
Columns[m].Width:=40;
end;
Columns[Columns.Count-1].Title.Alignment:=taCenter;
Columns[Columns.Count-1].ReadOnly:=True;
Columns[Columns.Count-1].Color:=$0080FF80;
Columns[Columns.Count-1].Width:=52;
for m:=2 to Columns.Count-1 do
begin
Columns[m].Footers.Add;
Columns[m].Footers[0].Alignment:=taCenter;
Columns[m].Footers[0].ValueType:=fvtSum;
end;
end;
end;说明一下:
qry_sub中的列是动态语句生成的,列数不定。
使用这段代码后,当列数比较多的时候,正常,此时qry_sub查到的结果如下:
colorid,colorname,1,2,3,4,sums
19,aa,1,2,2,0,5
68,bb,2,2,2,2,8这种情况下正常但当qry_sub只查到一个尺码列的时候,如以下结果时
colorid,colorname,2,sums
19,aa,3,3
77,bb,4,4这种情况的时候,footer中报错,内容如下:
提示如下:qry_sub field '1' not found,dbsumlst.pas系统提示出错
case Item.GroupOperation of
goSum:
if (FDataSet.FieldByName(Item.FieldName).IsNull = False) then
Item.SumValue := Item.SumValue + FDataSet.FieldByName(Item.FieldName).AsFloat;
请问这种情况是怎么回事?如何解决?
dbgrid.column.clear;
grid_sub.Columns.AddAllColumns(True)
句中的参数为true,已经是自动清除了原来所有的columns的。不知道是不是dbgrideh的问题呢?
还是报同样的错误。
footers不需要增加吧,你在设计窗体时需要特意添加footer吗,所列增加完了,就可以了。直接给footer赋值。
while i <DBGridEh1.Columns.Count do
begin
if Trim(DBGridEh1.Columns[i].FieldName) = '' then
Break;
if (DBGridEh1.DataSource.DataSet.FieldByName(DBGridEh1.Columns[i].FieldName).DataType in [ftbcd]) then
begin
DBGridEh1.Columns[i].DisplayFormat:=',0.00';
DBGridEh1.Columns[i].Footer.DisplayFormat:=',0.00';
DBGridEh1.Columns[i].Footer.ValueType:=fvtSum;
end
else
if (DBGridEh1.DataSource.DataSet.FieldByName(DBGridEh1.Columns[i].FieldName).DataType in [ftinteger,ftboolean]) then
begin
DBGridEh1.Columns[i].DisplayFormat:='0';
DBGridEh1.Columns[i].Footer.DisplayFormat:='0';
DBGridEh1.Columns[i].Footer.ValueType:=fvtCount;
end
else
if (DBGridEh1.DataSource.DataSet.FieldByName(DBGridEh1.Columns[i].FieldName).DataType in [ftdatetime,ftdate,fttime]) then
begin
DBGridEh1.Columns[i].DisplayFormat:='YYYY-MM-DD';
end
else
DBGridEh1.Columns[i].DisplayFormat:='';
i:=i+1;
end;