有个stringgrid
内容
C001   A01   A02   A03   
C001   B01   B02   B03   
C001   C01   C02   C03   
C002   D01   D02   D03   
C002   E01   E02   E03   
C003   E01   E02   E03   我想点击保存的时候,根据相同第一列的保存为一个文件。
C001   A01   A02   A03   
C001   B01   B02   B03   
C001   C01   C02   C03 
保存为一个文件
C002   D01   D02   D03   
C002   E01   E02   E03  
保存为一个文件
C003   E01   E02   E03  
保存为一个文件
如何实现,谢谢

解决方案 »

  1.   

    最好是先将数据按照第一列来分类,
    用一个TStringList保存文本内容
    用一个临时变量,保存当前的cell里的内容
    然后循环查找,遇到相同的就Add到StringList中
    遇到不同的就SaveToFile一次,然后改变临时变量的值,
    然后继续做上面的事。是不是有点太啰嗦了
      

  2.   

    TStringGrid 的行列除了用 Cells,还可以用 Cols 和 Rows 访问。这是两个 TStrings 对象,用 AddStrings 方法很容易分类归并到单独的 TStringList 对象中,然后用 SaveToFile 保存文件。
      

  3.   

    TStringGrid 用 Cells显示第一行的内容进行判断,如果一样则循环继续,如果不一样则停止循环,输出文件。
      

  4.   

    CREATE TABLE [filetext] (
    [filecode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [filename] [varchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    CONSTRAINT [PK_file] PRIMARY KEY  CLUSTERED 
    (
    [filecode]
    )  ON [PRIMARY] 
    ) ON [PRIMARY]
    GO
    建立表对应编号和文件夹
    procedure TForm1.BitBtn1Click(Sender: TObject);//这个为执行
    var ccode,ccname:string;
        filename:string;
    begin
      with ADOQuery1  do
      begin
        if isempty then exit;
        first;
        while not eof do
        begin
         ccode:=Fieldbyname('字段1').asstring;
         ccname:=fieldbyname('字段2').asstring;
         filename:=checkcode(code); //得到对应的文件名称
         //写入文件  ..不用我写了吧
         next;
        end;
      end;
    end;function TForm1.checkcode(code:string):string;//根据输入的文件夹编号得到文件夹编号
    var mySQLs:string;
    begin
     with ADOQuery2  do
     begin
       if not active then
       begin
         mySQLs:='select *from filetext';
         OpenSQLs(ADOQuery2,mySQLs);
       end;
       mySQLs:=' fielcode='+quotedstr(code);
       GetOPenSQLs(ADOQuery2,mySQLs);
       if isempty then
       begin
         result:= forcedirectories('E:\开发\fiel'+code);    //没有就创建此文件夹
         mySQLs:='insert into filetext(filecode,filename) values('+Quotedstr(code)+','+Quotedstr('E:\开发\fiel'+code)+')';
         ExcuteSQLs(ADOQuery3,mySQLs);
       end;
       else result:=Filedbyname('filename').asstring;
     end;
    end;procedure TForm1.OpenSQLs(myado:TADOQuery;mySQLs:string); //查询语句
    begin
      with myado  do
      begin
        close;
        sql.Clear;
        sql.Add(mySQLs);
        open;
      end;
    end;
    procedure TForm1.GetOPenSQLs(myado:TADOQuery;mySQLs:string); //原来基础上查询语句
    begin
      with myado  do
      begin
        Filtered:=false;
        Filter:=mySQLs;
        Filtered:=true;
      end;
    end;
    procedure TForm1.ExcuteSQLs(myado:TADOQuery;mySQLs:string); //执行SQL
    begin
      with myado  do
      begin
        close;
        sql.Clear;
        sql.Add(mySQLs);
        ExecSQL;
      end;
    end;