想在DBGRID转颜色及记录行数 有何办法?以下可以转颜色但记录行数有问题
Edit1.text  是见到这字串就转颜色
Edit2.text  是想记录那几行曾經转颜色
以下是失敗例子: (行号重复了很多次)
Edit2.Text := Edit2.Text + '(' + Data.DS_BOM.DataSet.FieldByName('Seq_no').AsString + ')';
 procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if Data.DS_Bom.DataSet.RecNo > 0 then
    begin
      if Column.Title.Caption = 'No:' then
        DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top, IntToStr(Data.DS_Bom.DataSet.RecNo));
    end;
  if Data.DS_BOM.DataSet.FieldByName('QAB003').AsString = Edit1.text  then
     Begin
     Edit2.Text := Edit2.Text + '(' + Data.DS_BOM.DataSet.FieldByName('Seq_no').AsString + ')';
     DBGrid1.Canvas.Brush.Color:=clRed;
     DBGrid1.DefaultDrawColumnCell
     (Rect, DataCol, Column, State);   end;
end;

解决方案 »

  1.   


    procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      //这里稍作改变下,道理想下就明白了。 
      if (Data.DS_Bom.DataSet.RecNo > 0) and (Column.Title.Caption = 'No:') then
      begin
        DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top,                  IntToStr(Data.DS_Bom.DataSet.RecNo));
        if Data.DS_BOM.DataSet.FieldByName('QAB003').AsString = Edit1.text then
        Begin
          Edit2.Text := Edit2.Text + '(' +     Data.DS_BOM.DataSet.FieldByName('Seq_no').AsString + ')';
          DBGrid1.Canvas.Brush.Color:=clRed;
          DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
        end;
      end;
    end;
      

  2.   

    你写序号的条件,应该在  
    if Data.DS_BOM.DataSet.FieldByName('QAB003').AsString = Edit1.text then
    条件内执行
      

  3.   


    會否不宜在DBGrid1DrawColumnCell 'even' 內執行. 
    因為browse 又會重複.