一个stringgrid1 和一个表table1,表的字段数及记录数与stringgrid1的列、行一一对应。
要求:通过对stringgrid1每一格CELLS设置背景颜色后,保存到表table1中。下次打开时从表table1中读取设置的颜色数据并对所对应的单元格设置背景颜色。
已找了几小时的资料,都没找到答案,请高手帮忙解决啊。

解决方案 »

  1.   

    表中记录应该有个索引 比如说ID
     声明全局变量
     M:integer=-1;
     N:integer=-1;
      cltemp:Tcolor; 更改CELLS颜色需要在DrawCell事件中 假设StringGrid1.cells{0,X}是索引字段
      with StringGrid1 do
      begin
        if (ACol = M) and (ARow =N) then
        begin
          Canvas.Brush.Color := cltemp;
          Canvas.FillRect(Rect);
          Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Cells[M, N]);
        end;
      end;执行
      M:=1;
      N:=3;
      cltemp:=clYellow;
      StringGrid1.Invalidate; 就可以改颜色了
    adoquery.close;
    adoquery.sql.text:='update 表 set color字段='+inttostr(cltemp)+' where 索引字段='+StringGrid1.cells{0,N};
    adoquery.execsql;   同时保存颜色
    在第一次读取数据加载进StringGrid1的时候 可以在DrawCell里当个判断
    按照cells[0,N]的值 读取数据表里的对应color值
    用    Canvas.Brush.Color := 颜色;
          Canvas.FillRect(Rect);
          Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Cells[X, Y]); 修改
      

  2.   

    谢谢楼上的。关健是stringgrid的每一个单元格都是有颜色的啊,而且当表单显示时stringgrid1的单元格背景颜色应一齐显示出来的。
    再细说一下功能要求:用一个stringgrid1作为数据录入,因为在这个stringgrid里是分区域的,不同
    的区域显示不同的背景以提醒用户。
       为了实现这个功能,我用两个表单:一个表单(Form1)实现对单元格背景的设置并保存到表table1中;
    另一个表单(FORM2)是数据录入,但这个表单(Form2)的stringgrid1的单元格背景必须从表table1中读取并显示以提醒用户。希望高手帮忙啊。