DXDBGRID :我想用代码,动态添加 DXDBGRID 的列,并指定列的类型? DXDBGRID :我想用代码,动态添加 DXDBGRID 的列,并指定列的类型因为表有100列,需要代码实现,列的类型大多是MASK,也有其他的如PICK指点!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 procedure TfrmDayInput.AddTableField(tb : Tadotable);var ddarray,oilarray : array of string; i,j,k : integer; tmpFField : array of TFloatField; tmpSField : TStringField; idField,pfield : TSmallIntField; sAmount,sMoney : TFloatField;begin try with qrybase do begin //将油品和订单类型读入动态数组 close;sql.clear; sql.add('select jmdd from tb_ddlx order by jmdd'); open; setlength(ddarray,recordcount); for i := 0 to recordCount-1 do begin ddarray[i] := fields[0].value; next; end; close;sql.clear; sql.add('select jmoil from tb_oil order by jmoil'); open; setlength(oilarray,recordcount); for j:=0 to recordcount-1 do begin oilarray[j] := fields[0].value; next; end; setlength(tmpFField,(i+1) * (j+1)+ 2*(j+1)); tmpSField := TStringField.Create(self); tmpSField.FieldName := 'sitename'; tmpSField.Name := tmpSField.FieldName; tmpSField.DataSet := tb; sAmount := TFloatField.Create(self); sAmount.FieldName := 'sumamount'; sAmount.Name := sAmount.FieldName; //sAmount.FieldKind := fkCalculated; sAmount.DataSet := tb; sMoney := TFloatField.Create(self); sMoney.FieldName := 'SumMoney'; sMoney.Name := sMoney.FieldName ; //sMoney.FieldKind := fkCalculated; sMoney.DataSet := tb; k := 1; for i := 0 to length(oilarray)-1 do begin for j:= 0 to length(ddarray)-1 do begin tmpFField[k] := TFloatField.create(self); tmpFField[k].FieldName := 'F_' + oilarray[i] + '_' + ddarray[j]; tmpFFIeld[k].Name := tmpFField[k].FieldName; tmpFField[k].DataSet := tb; k := k + 1; end; tmpFField[k+1] := TFloatField.create(self); tmpFField[K+1].FieldName := 'F_' + oilarray[i] + '_price'; tmpFField[K+1].Name := tmpFField[K+1].FieldName; tmpFField[k+1].DataSet := tb; tmpFField[k+1] := TFloatField.create(self); tmpFField[K+1].FieldName := 'F_' + oilarray[i] + '_KC'; tmpFField[K+1].Name := tmpFField[K+1].FieldName; tmpFField[k+1].DataSet := tb; end; pField := TSmallIntField.Create(self); pField.FieldName := 'adjustPrice'; pField.Name := 'adjustPrice'; pField.DataSet := tb; idField := TSmallIntField.Create(self); idfield.FieldName := 'id'; idfield.Name := 'id'; idfield.DataSet := tb; end; finally oilarray := nil; ddarray := nil; tmpFField := nil; end;end;以前我写的一段代码,你看看吧。应该对你有点帮助。 if DxDbGrid1.ColumnCount=0 then begin adotemp1.Close; adotemp1.Open; DxDbGrid1.CreateDefaultColumns(adotemp1,nil); end; 用CreateColumnEx比较好,在创建之前判断是什么类型的Field,根据实际需要创建不同类型的Column 为什么我在一个线程里面动态往dxdbgrid中添加column时老出现很严重的错误,屏幕刷新也跟不上。出现如 list index of bound(1) 等东西请问是什么原因 如何让程序在规定的时间内执行某个按钮的功能? 怎样为DBGrid创建序号? MaskEdit日期输入问题! 请问我这段关于线程的代码有什么问题? 求救:如何获取网卡的MAC地址? 窗体继承 关于qrdbtext的问题,来者有分啊! how create tablespace in oracle 畅联信息 请问:加载动画的问题! 请问有没有控件能做出类似qq的用户那种动态按钮的 “Delphi 网络编程/分布式开发”招聘小版主2-3名,请大家踊跃报名!
var ddarray,oilarray : array of string;
i,j,k : integer;
tmpFField : array of TFloatField;
tmpSField : TStringField;
idField,pfield : TSmallIntField;
sAmount,sMoney : TFloatField;
begin
try
with qrybase do
begin
//将油品和订单类型读入动态数组
close;sql.clear;
sql.add('select jmdd from tb_ddlx order by jmdd');
open;
setlength(ddarray,recordcount);
for i := 0 to recordCount-1 do
begin
ddarray[i] := fields[0].value;
next;
end; close;sql.clear;
sql.add('select jmoil from tb_oil order by jmoil');
open;
setlength(oilarray,recordcount);
for j:=0 to recordcount-1 do
begin
oilarray[j] := fields[0].value;
next;
end; setlength(tmpFField,(i+1) * (j+1)+ 2*(j+1)); tmpSField := TStringField.Create(self);
tmpSField.FieldName := 'sitename';
tmpSField.Name := tmpSField.FieldName;
tmpSField.DataSet := tb;
sAmount := TFloatField.Create(self);
sAmount.FieldName := 'sumamount';
sAmount.Name := sAmount.FieldName;
//sAmount.FieldKind := fkCalculated;
sAmount.DataSet := tb;
sMoney := TFloatField.Create(self);
sMoney.FieldName := 'SumMoney';
sMoney.Name := sMoney.FieldName ;
//sMoney.FieldKind := fkCalculated;
sMoney.DataSet := tb; k := 1;
for i := 0 to length(oilarray)-1 do
begin
for j:= 0 to length(ddarray)-1 do
begin
tmpFField[k] := TFloatField.create(self);
tmpFField[k].FieldName := 'F_' + oilarray[i] + '_' + ddarray[j];
tmpFFIeld[k].Name := tmpFField[k].FieldName;
tmpFField[k].DataSet := tb;
k := k + 1;
end;
tmpFField[k+1] := TFloatField.create(self);
tmpFField[K+1].FieldName := 'F_' + oilarray[i] + '_price';
tmpFField[K+1].Name := tmpFField[K+1].FieldName;
tmpFField[k+1].DataSet := tb;
tmpFField[k+1] := TFloatField.create(self);
tmpFField[K+1].FieldName := 'F_' + oilarray[i] + '_KC';
tmpFField[K+1].Name := tmpFField[K+1].FieldName;
tmpFField[k+1].DataSet := tb;
end;
pField := TSmallIntField.Create(self);
pField.FieldName := 'adjustPrice';
pField.Name := 'adjustPrice';
pField.DataSet := tb;
idField := TSmallIntField.Create(self);
idfield.FieldName := 'id';
idfield.Name := 'id';
idfield.DataSet := tb; end;
finally
oilarray := nil;
ddarray := nil;
tmpFField := nil;
end;
end;以前我写的一段代码,你看看吧。应该对你有点帮助。
begin
adotemp1.Close;
adotemp1.Open;
DxDbGrid1.CreateDefaultColumns(adotemp1,nil);
end;
老出现很严重的错误,屏幕刷新也跟不上。
出现如 list index of bound(1) 等东西
请问是什么原因