从数据库中查询出200行记录,如果某行中字段A1的值等于字段A2的值,那么就将此行中的所有值标示为红色,应该怎么做?

解决方案 »

  1.   

    在网上搜一下  dbgrid技术的问题很多的   
    给你一个http://www.rosipay.com/4/1355.html看对你有帮助没?
      

  2.   

    参考:
    在数据网格中以红色突出显示当前选中的行。  设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码:  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then   DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色   DbGrid1.Canvas.pen.mode:=pmmask;   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
      

  3.   

    procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
    begin
    if column.Index=3 then
     begin
      if trim(adoquery1.FieldByName('a1').AsString)=trim(adoquery1.FieldByName('a2').AsString) then
          dbgrideh1.Canvas.Font.Color:=clRed
         else
       dbgrideh1.Canvas.Font.Color:=clGreen;
     end;
     DBGrideh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
    end;你再修改一下就差不多了
      

  4.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if gdSelected in State then Exit;  
      if (sender as TDBGrid).DataSource.DataSet.FieldByName('A1').VALUE= (sender as TDBGrid).DataSource.DataSet.FieldByName('A2').VALUE then
          (Sender as TDBGrid).Canvas.Brush.Color := clinfobk //定义背景颜色
      else
        (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223);  //定义背景颜色
     //定义网格线的颜色:
      DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
      with (Sender as TDBGrid).Canvas do //画 cell 的边框
      begin
        Pen.Color := $00ff0000; //定义画笔颜色(蓝色)
        MoveTo(Rect.Left, Rect.Bottom); //画笔定位
        LineTo(Rect.Right, Rect.Bottom); //画蓝色的横线
        Pen.Color := clbtnface; //定义画笔颜色(兰色)
        MoveTo(Rect.Right, Rect.Top); //画笔定位
        LineTo(Rect.Right, Rect.Bottom); //画绿色
      end;
    end;