Procedure TMainForm.OrderListDrawColumnCell(Sender: TObject; Const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); Var i: Integer; TextDisp: Boolean; TmOpen: Boolean; Begin If (OrderList.DataSource.DataSet.RecordCount <= 0) Then Exit; TmOpen := Timer1.Enabled; Timer1.Enabled := False; TextDisp := False; If (Column.Index = 0) Then TmpID := Column.Field.AsString; If (gdSelected In State) Then OrderList.Canvas.Brush.Color := clAqua; If (Column.Index > 2) Then Begin i := Column.Index - 1; D_Base.OperSearch.Sort := 'OperateTime DESC'; D_Base.OperSearch.Filter := 'OrderID=''' + TmpID + '''' + ' AND DeptID=' + IntToStr(i); D_Base.OperSearch.Filtered := True; If (D_Base.OperSearch.RecordCount > 0) Then Begin D_Base.OperSearch.First; If (D_Base.OperSearch.FieldValues['Operate'] = 1) Then Begin TextDisp := True; If (Not (gdSelected In State)) Then Begin OrderList.Canvas.Brush.Color := clLime; End Else Begin OrderList.Canvas.Brush.Color := clGreen; End; End; End; End; OrderList.DefaultDrawColumnCell(Rect, DataCol, Column, State); If TextDisp Then OrderList.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, 'Pass'); Timer1.Enabled := TmOpen; End; 这是nDrawColumnCell的代码,其它就没有关于这个Grid的了:(
在OnDrawColumnCell和OnDrawDataCell里写应该是自动重画的
DefaultDrawColumnCell(Rect, DataCol, Column, State);
Const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var
i: Integer;
TextDisp: Boolean;
TmOpen: Boolean;
Begin
If (OrderList.DataSource.DataSet.RecordCount <= 0) Then Exit;
TmOpen := Timer1.Enabled;
Timer1.Enabled := False;
TextDisp := False;
If (Column.Index = 0) Then TmpID := Column.Field.AsString;
If (gdSelected In State) Then OrderList.Canvas.Brush.Color := clAqua;
If (Column.Index > 2) Then Begin
i := Column.Index - 1;
D_Base.OperSearch.Sort := 'OperateTime DESC';
D_Base.OperSearch.Filter := 'OrderID=''' + TmpID + '''' + ' AND DeptID=' + IntToStr(i);
D_Base.OperSearch.Filtered := True;
If (D_Base.OperSearch.RecordCount > 0) Then Begin
D_Base.OperSearch.First;
If (D_Base.OperSearch.FieldValues['Operate'] = 1) Then Begin
TextDisp := True;
If (Not (gdSelected In State)) Then Begin
OrderList.Canvas.Brush.Color := clLime;
End Else Begin
OrderList.Canvas.Brush.Color := clGreen;
End;
End;
End;
End;
OrderList.DefaultDrawColumnCell(Rect, DataCol, Column, State);
If TextDisp Then OrderList.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, 'Pass');
Timer1.Enabled := TmOpen;
End;
这是nDrawColumnCell的代码,其它就没有关于这个Grid的了:(
我现在明白了,它在重画的时候,只默认重画可能需要重画的Cell,而我的程序是认为它会一行一行重画所有格子。所以在取得查询条件时出错了