想在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;
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;
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;
if Data.DS_BOM.DataSet.FieldByName('QAB003').AsString = Edit1.text then
条件内执行
會否不宜在DBGrid1DrawColumnCell 'even' 內執行.
因為browse 又會重複.