我在窗体中使用了的DBGrid,但在其它窗体遮挡了我的窗体后,我的DBGrid的显示就乱了,不知道需要用什么方法,才能让它自动重画或刷新?

解决方案 »

  1.   

    你的DBGrid显示就乱了? 看不懂
      

  2.   

    我在DBGrid的OnDrawColumnCell里使用了颜色,但别的窗体遮挡了之后,被遮挡部分的表格内容就变成了空白,需要用DBGrid的Refresh 刷新一下,就又正常了我希望的就是:在遮挡物移开或关闭后,能不能及时让我Refresh我的DBGrid谢谢楼上:)
      

  3.   

    那你应用颜色的代码是在哪个事件里写的
    在OnDrawColumnCell和OnDrawDataCell里写应该是自动重画的
      

  4.   

    就是在nDrawColumnCell里使用Canvas.Brush.Color, 然后
    DefaultDrawColumnCell(Rect, DataCol, Column, State);
      

  5.   

    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的了:(
      

  6.   

    俺仔细看了一下,是这样的:当遮挡我DBGrid窗体的窗体移开后,实际上DBGrid本身得到了重画,但是我在OrderListDrawColumnCell函数里加入的代码,程序并没有执行,所以造成我的表格的颜色和内容的丢失:(不知道是不是窗体重画的时候没有执行OrderListDrawColumnCell函数?
      

  7.   

    俺又试了一下,这程序拿到WIN7上就没有问题,在XP上就出现上述问题:(
      

  8.   

    楼主,你的问题只需要一行代码搞定:DBGrid1.Repaint;
      

  9.   

    问题找到了,
    我现在明白了,它在重画的时候,只默认重画可能需要重画的Cell,而我的程序是认为它会一行一行重画所有格子。所以在取得查询条件时出错了