呵呵,路过,顺便帮一下你 在DBGrid的OnDrawDataCell里面写如下代码(你可以自己修改一下颜色和字体) procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); begin if (table1.RecNo mod 2) = 0 then DBGrid1.Canvas.Brush.Color := clgray else DBGrid1.Canvas.Brush.Color := clwhite; DBGrid1.Canvas.FillRect(Rect); DBGrid1.Canvas.TextOut(Rect.left + 2, Rect.top + 2, Field.AsString); end;
说详细一点就是在OnCustomDrawCell中写就哦卡了。
对大型数据库不能取到RecNo 可以采用另外的方法,加一个计算字段计算列号代替RecNo
RecNO 为什么总为-1 ?
procedure TDBGridC.DrawCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); Var HPR:Integer; Begin If dgRowLines in Options Then HPR:=Rect.Bottom-Rect.Top+1 Else HPR:=Rect.Bottom-Rect.Top; If Not (gdSelected In State) Then Begin If DataSource.DataSet.RecNo>=0 Then Begin If DataSource.DataSet.RecNo Mod 2=0 Then Canvas.Brush.Color:=FC1 Else Canvas.Brush.Color:=FC2; End Else Begin If ((Rect.Top Div HPR) Mod 2)=0 Then Canvas.Brush.Color:=FC1 Else Canvas.Brush.Color:=FC2; End; End;
在DBGrid的OnDrawDataCell里面写如下代码(你可以自己修改一下颜色和字体)
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (table1.RecNo mod 2) = 0 then
DBGrid1.Canvas.Brush.Color := clgray
else
DBGrid1.Canvas.Brush.Color := clwhite; DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.left + 2, Rect.top + 2, Field.AsString);
end;
可以采用另外的方法,加一个计算字段计算列号代替RecNo
DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var HPR:Integer;
Begin
If dgRowLines in Options Then
HPR:=Rect.Bottom-Rect.Top+1
Else
HPR:=Rect.Bottom-Rect.Top; If Not (gdSelected In State) Then
Begin
If DataSource.DataSet.RecNo>=0 Then
Begin
If DataSource.DataSet.RecNo Mod 2=0 Then
Canvas.Brush.Color:=FC1
Else
Canvas.Brush.Color:=FC2;
End
Else
Begin
If ((Rect.Top Div HPR) Mod 2)=0 Then
Canvas.Brush.Color:=FC1
Else
Canvas.Brush.Color:=FC2;
End;
End;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
End;
上面的这位老兄。
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (table1.RecNo mod 2) = 0 then
DBGrid1.Canvas.Brush.Color := clgray
else
DBGrid1.Canvas.Brush.Color := clwhite; DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.left + 2, Rect.top + 2, Field.AsString); //这里把所有的数据都变为了字符类型,如果我定义了一个带美元符的符号的话,那就会不见了
end;
Bob7946(X度空间) 和AP() 的方法中 recno总是-1,
按johnsonrao(johnson) 所说加计算字段的方法好用,
现已实现。
谢谢谢谢!
第一次提问,非常感谢大家,都给点分吧。
Bob7946 : 10
AP: 10
johnsonrao: 10ok