问大家一个关于DBGrid的行记录颜色控制的问题:
用两种颜色(假设是白和绿)区分DBGrid中所有的记录,即NO值相同的显示相同颜色,不同的显示不同颜色。例如有:
NO    颜色
1      白
1      白
2      绿
3      白
而搜索所有NO为奇数的显示如下
NO    颜色
1      白
3      绿
3      绿
5      白
5      白
(特别注意网上的那种XXX mod 2 =0 的办法在上面那种情况只有一片白色的哦)

解决方案 »

  1.   

    DrawCell事件控制颜色变化不过没看懂楼主要怎么做
      

  2.   

    判断条件取颜色值,再在DrawCell里重绘偶写过组件,继承自TDBGrid。。
      

  3.   

    在onDrawColumnCell事件中
     IF <条件语句>  THEN
     BEGIN
      DBGRID1.Canvas.Font.Color:=CLBLUE;  //字体颜色
      dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
      DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
     END; 
      

  4.   

    可能有点误解的地方,我再描述一次我的问题吧:
    用两种颜色(假设是白和绿)区分DBGrid中所有的记录,即NO值相同的显示相同颜色,不同的显示不同颜色。例如有:
    NO 
    1 (第一行背景是白色)
    1 (第二行背景是白色)
    2 (第三行背景是绿色)
    3 (第四行背景是白色)而搜索所有NO为奇数时显示如下
    NO 
    1 (第一行背景是白色)
    1 (第二行背景是白色)
    3 (第三行背景是绿色)
    5 (第四行背景是白色)
    5 (第五行背景是白色)
    7 (第六行背景是绿色)
    (特别注意网上的那种XXX mod 2 =0 的办法在上面那种情况只有一片白色的哦)
    总的来说就两个条件 A、NO值相同的,背景色要一样  B、DBGrid中相邻的两条记录(两行)若NO不同,则颜色不同。三楼的那位仁兄能不能说详细点呢? 四楼的那位,跟没回答一样……
    若能解决问题的话,分不是问题……
      

  5.   

    DBGrid中的记录是来源于SQL的,用ADOQuery查询的
      

  6.   

    你的第一种模式的颜色区分,就可以用那种 No.值 mod 2=0的方式完成,在DrawCell事件中重绘颜色第二种模式,根据你自己的要求,总结一个规律(公式),还是用类似 mod 2=0的方式完成就可以了
      

  7.   

    分开来可以实现啊,但组合起来就不知怎么弄了,我问的就是同时满足上面A、B条件的怎么做的?两个条件 A、NO值相同的,背景色要一样 B、DBGrid中相邻的两条记录(两行)若NO不同,则颜色不同。
      

  8.   

    先定义两个全局变量GNo,GColor。
    在onDrawColumnCell事件中
    IF adoquery1.fieldbyname('No').asinteger=GNo THEN
    begin
      DBGRID1.Canvas.Font.Color:=GColor  //字体颜色
    end
    else
    BEGIN
      if GColor = CLWhite then
      begin
        DBGRID1.Canvas.Font.Color:=CLGreen;  //字体颜色
        GColor := CLGreen;
      end
      else
      begin
        DBGRID1.Canvas.Font.Color:=CLWhite;  //字体颜色
        GColor := CLWhite;
      end;
    END
    GNo := adoquery1.fieldbyname('No').asinteger;
    DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
      

  9.   

    感谢10楼的回答,跟我的想法差不多,但比我的简洁多了,但还是有个严重的问题。这个问题我都不知怎么用文字表达,把代码运行起来就清楚了:
    举例子吧:随便弄个showmessage,在DBGrid上面弹出个框来如图
    点了OK后,我们当然希望背景没什么改变,但却变成了这样:
    又如,正常显示如下:
    把上图右边的滚动条上下拉动后就变成这样了
    或者点击DBGrid中的某个框上下拉就变成这样了:
    总的来说就是DBGrid的背景色不稳定吧,怎么解决啊……
      

  10.   

    再来顶一顶,有木有人能告诉我,我的那个问题用dbgrid能不能解决的啊?
      

  11.   

    四楼正解
    IF <条件语句>  THEN
     BEGIN
      DBGRID1.Canvas.Font.Color:=CLBLUE;  //字体颜色
      dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
      DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
     END; 
      

  12.   

    同意4楼意见。IF <条件语句>  THEN
     BEGIN
      DBGRID1.Canvas.Font.Color:=CLBLUE;  //字体颜色
      dbgrid1.Canvas.Brush.Color:=clInactiveCaption; //背景颜色
      DBGRID1.DefaultDrawColumnCell(RECT,DATACOL,COLUMN,STATE); //实现变色
     END;