我用DBGridEh来显示一个复杂的多行(列)表头统计表,统计表的字段根据不同用户的需要可以定义,运行时动态访问数据库中的表头定义表,显示表头,绑定字段。
问题是:对于某个特定用户,他的统计表往往是定义一次,一直使用。使用动态生成的方法使得程序的效率降低。
请高手赐教,可否有什么方法,在配置统计表表头的同时,生成“静态”的,或者说如同设计时就绑定的表头,以提高效率?
问题是:对于某个特定用户,他的统计表往往是定义一次,一直使用。使用动态生成的方法使得程序的效率降低。
请高手赐教,可否有什么方法,在配置统计表表头的同时,生成“静态”的,或者说如同设计时就绑定的表头,以提高效率?
将DBGrid中各列的位置以及宽度记录入Ini文件,以及从Ini文件读取DBGrid中各列位置以及宽度的函数
procedure f_ReadIni(const Now_DBGrid:TDBGrid;Form_Name:String);
var
FilePath:String;
MyIniFile:Tinifile;
Grid_Name,Field_Name:String;
Width:integer;
i,j,n:integer;
Column:Array[0..100] of String;
Widths:Array[0..100] of integer;
begin
FilePath := ExtractFilePath(Application.ExeName);
MyIniFile:=TiniFile.Create(FilePath+'gsp.ini');
Grid_Name :=Form_Name+','+Now_DBGrid.Name;
n:= Now_DBGrid.Columns.Count-1 ; for i:=0 to 100 do column[i]:='';
for i:=0 to n do
begin
Field_Name:=Now_DBGrid.Columns[i].FieldName;
j:=MyIniFile.ReadInteger(Grid_Name,Field_Name,i);
Column[j]:=Field_Name;
Widths[j] :=MyIniFile.ReadInteger(Grid_Name,Field_Name+'_Width',Now_DBGrid.Columns[i].Width);
end; for i:=0 to n do
begin
Now_DBGrid.Columns[i].FieldName := Column[i];
Now_DBGrid.Columns[i].Width := Widths[i];
end; MyIniFile.Destroy;
end;procedure f_WriteIni(const Now_DBGrid:TDBGrid;Form_Name:String);
var
FilePath:String;
MyIniFile:Tinifile;
Grid_Name,Field_Name:String;
Width:Integer;
i:integer;
begin
FilePath := ExtractFilePath(Application.ExeName);
MyIniFile:=TiniFile.Create(FilePath+'gsp.ini');
Grid_Name :=Form_Name+','+Now_DBGrid.Name; for i:=0 to Now_DBGrid.Columns.Count-1 do
begin
Field_Name := Now_DBGrid.Columns[i].FieldName;
Width := Now_DBGrid.Columns[i].Width;
MyIniFile.WriteInteger(Grid_Name,Field_Name,i);
MyIniFile.WriteInteger(Grid_Name,Field_Name+'_Width',Width);
end; MyIniFile.Destroy;
end;
次数了,也就没有达到楼主想减少对数据库访问的目的