我用DBGridEh来显示一个复杂的多行(列)表头统计表,统计表的字段根据不同用户的需要可以定义,运行时动态访问数据库中的表头定义表,显示表头,绑定字段。
   问题是:对于某个特定用户,他的统计表往往是定义一次,一直使用。使用动态生成的方法使得程序的效率降低。
   请高手赐教,可否有什么方法,在配置统计表表头的同时,生成“静态”的,或者说如同设计时就绑定的表头,以提高效率?

解决方案 »

  1.   

    ////////
    将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;
      

  2.   

    我知道的保存数据方式只有两种;ini;数据表;全被人说了;^_^;
      

  3.   

    保存到INI就可以了,如果保存到数据库的话,那么就间接的增加了访问数据库的
    次数了,也就没有达到楼主想减少对数据库访问的目的