从DBGrid中导出数据,当从DBGrid中读出某一行的数据后,使这一行的颜色固定不变,以区别还没有读出或导出失败的数据?例如:读出第一行的数据后,使第一行变红(读取第二行的数据时还是红色)。不够可以加分!

解决方案 »

  1.   

    自己做个列表,里面保存已经读出的记录的关键字段的值。
    然后在dbgrid的drawcell事件中,判断该记录是否在上面的列表中,如果在的话,就draw为红色!
      

  2.   

    dbgrid只不过时你的查询的一个显示,应该随着指针的变化dbgrid指向哪一行也应该是变化的把,自己做一个列表,感觉有点浪费 因为你的查询本身就是一个表,
      

  3.   


      在DELPHI中经常用到网格控件(DBGrid)显示数据,网格控件只提供了每一行的颜色属性,但在实际应用中我们经常希望它按某一行某一项的取值不同显示不同的颜色,甚至在网格中的单位表格项中显示出图像等等,下面我们以一个简单的例子来告诉大家怎么做。   比如我们要求如果春季有退书用红色表示,如果秋季有退书用黄色表示(图1)      图1   利用DBGrid自绘功能可以很容易地实现这样的要求。用户可以处理DBGrid的OnDrawColumnCell事件,在其中实现特殊的效果。要判断记录是否满足要求,可以使用DBGrid的DataLink属性获得数据,但DBGrid的DataLink属性属于保护成员,必须在TCustomDBGrid的子类中调用。 type 
    TMyCustomDBGrid = class(TCustomDBGrid); procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
    DataCol: Integer; Column: TColumn; State: TGridDrawState); 
    var
    sCjts,sQjTs:String;
    begin
    with TMyCustomerDBGrid(Sender) do
    begin
    Cjts:=DataLink.Fields[5].AsString;
    sQjts:=DataLink.Fields[9].AsString;
    if sCjts<>‘‘ then       //春季退书数量>0的用红色显示
    Canvas.Brush.Color := clRed
    else
    if sQjts<>‘‘ then      //秋季退书数量>0的用黄色显示
    Canvas.Brush.Color := clYellow
    else
    Canvas.Brush.Color:=clWhite;
    Canvas.Font.Color:=clBlack; 
    canvas.fillrect(rect);
    canvas.textout(rect.left+4,rect.top+4,Column.Field.AsString);
    end;
    end;