1。查出记录时用sql多生成一个字段,比如
select a.fd1,a.fd2,...,0 as fdchange from tabxxx a where ....
2。在dbgrid中不要显示fdchange字段
3。在dbgrid的数据源中的onpost事件中将fdchange设置为1,即只要有修改,则将当前记录的fdchange设置为1。
4。在dbgrid的ondrawcolumncell事件中判断如果fdchange字段的值为1,则设置该行的颜色为红色:
  {dbgrid1:tdbgrid;query1:tquery;}
  if query1.fieldbyname('fdchange').asinteger=1 then
  begin
    dbgrid1.Canvas.Font.color:=clred;
    dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
  end;
5。在提交事务后设置fdchange为0;

解决方案 »

  1.   

    那个控件不太好用,换成ListView比较好,不过这样修改数据就要自己写程序了。
      

  2.   

    to liuchcn:
      "在dbgrid的数据源中的onpost事件中"在query中只有afterpost,beforepost事件,均不能
    修改字段值,onpost??
      

  3.   

    是没有onpost:),搞错了。 应该是afterpost或beforepost事件。fdchange不能修改是什么意思?因为我没有具体试过,但我想这样的做法应该可以。
    或者试一下在字段的onchange事件中修改fdchange的值。