We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy.
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

RefreshRange causing entire grid to repaint

Thread ID:

Created:

Updated:

Platform:

Replies:

34623 Sep 13,2005 05:46 PM Sep 14,2005 02:14 PM Windows Forms 5
loading
Tags: GridControl
Administrator [Syncfusion]
Asked On September 13, 2005 05:46 PM

I have some code that makes some changes in how a group of rows might be drawn. I execute a RefreshRange, in this case, for 3 rows, rows 150-152. But then the grid gets the OnPaint call, the ClipRectangle is for the entire grid. Why is that? I would expect the clip rectangle to only cover the rows that were refreshed. The specific call is: Debug.WriteLine("Refreshing rows " + firstRow.ToString() + " to " + lastRow.ToString()); RefreshRange(GridRangeInfo.Rows(firstRow, lastRow)); The debug output is: Refreshing rows 150 to 152 This is the call stack from OnPaint in my derived grid class: Depth: 0 - Method: MozartGridBase.DumpStack Depth: 1 - Method: MozartGridBase.OnPaint Depth: 2 - Method: Control.PaintWithErrorHandling Depth: 3 - Method: Control.WmPaint Depth: 4 - Method: Control.WndProc Depth: 5 - Method: ScrollControl.WndProc Depth: 6 - Method: GridControlBase.WndProc Depth: 7 - Method: MozartGridBase.WndProc Depth: 8 - Method: ControlNativeWindow.OnMessage Depth: 9 - Method: ControlNativeWindow.WndProc Depth: 10 - Method: NativeWindow.DebuggableCallback Depth: 11 - Method: SafeNativeMethods.UpdateWindow Depth: 12 - Method: Control.Update Depth: 13 - Method: GridControlBase.Update Depth: 14 - Method: MozartGridBase.Update Depth: 15 - Method: GridControlBase.RefreshRange Depth: 16 - Method: MozartGrid.SetTreeRowSelection Depth: 17 - Method: CheckBoxHeaderRenderer.EditCheckBoxCheckStateChanged Depth: 18 - Method: CheckBox.OnCheckStateChanged Depth: 19 - Method: CheckBox.set_CheckState Depth: 20 - Method: HeaderCheckBox.OnClick Depth: 21 - Method: CheckBox.OnMouseUp Depth: 22 - Method: MozartCheckBox.OnMouseUp Depth: 23 - Method: Control.WmMouseUp Depth: 24 - Method: Control.WndProc Depth: 25 - Method: ButtonBase.WndProc Depth: 26 - Method: MozartCheckBox.WndProc Depth: 27 - Method: ControlNativeWindow.OnMessage Depth: 28 - Method: ControlNativeWindow.WndProc Depth: 29 - Method: NativeWindow.DebuggableCallback Depth: 30 - Method: UnsafeNativeMethods.DispatchMessageW Depth: 31 - Method: ComponentManager.System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop Depth: 32 - Method: ThreadContext.RunMessageLoopInner Depth: 33 - Method: ThreadContext.RunMessageLoop Depth: 34 - Method: Application.Run Depth: 35 - Method: Form1.Main Painting - ClipRect({X=0,Y=19,Width=696,Height=453}) There is actually nothing happening in my Update() override, it just calls base.Update() at the moment. It''s really just there as a convenient place to place a breakpoint for some stuff I''ve been testing. Obviously, all the checkbox stuff is our code, but it''s at Depth 16 that the RefreshRange call above is made. Should I be calling something besides RefreshRange()? Pete

Administrator [Syncfusion]
Replied On September 13, 2005 05:48 PM

A few additional notes, the "Painting - ClipRect..." stuff is from my OnPaint override. Also, the reason Y begins at 19 is we''ve actually adjusted the internal GridBounds top down 19 pixels because we draw a header in the area above it. But otherwise, that''s the width and height of the grid in the cliprect.

Administrator [Syncfusion]
Replied On September 14, 2005 09:52 AM

Sorry to bring this back up to the top, but I''ve got a tight deadline and this is a pretty serious performance issue for us. It''s basically causing the entire grid to redraw when we really only need a few rows redrawn. Thanks.

Administrator [Syncfusion]
Replied On September 14, 2005 11:10 AM

If you put a stop in RefreshRange, can you step through our code to see exactly why the passed in range is being extended to be the visible grid? There are special situations where a rectangle is enlrged to be the whole grid. (For rxample when colwidths are changing). I think if you step through the code, you may be able to spot the exact text that is enlarging teh range, and this may give some hints on how to avoid it.

Administrator [Syncfusion]
Replied On September 14, 2005 01:56 PM

Clay, I believe I''ve tracked down the problem when I removed my RefreshRange() call and the same OnPaint was happening for the entire grid. I guess I need to explain in a bit more depth what''s going on and maybe you can help me find a solution. We have a custom checkbox render/model (with custom checkbox control) in our first column. We use this for selecting/deselecting rows in the grid. Checking a selection checkbox can possibly select rows other than the one with the checkbox. This is all handled through logic which then modifies content of GridControl.Selections. It appears that somewhere in here (I believe in the call to PaintSelectCells.UpdateSelectRange()), the paint range of the paint is being set. In the first case, the initial GridControl.Selections is empty. If I click a certain selection checkbox, for example, it might add two rows to the selection. My thinking is, only these two rows should be redrawn, but the OnPaint, as mentioned earlier, is getting a clipping rectangle for the entire grid. I can''t be positive this is where it''s coming from. Since there''s no way to really see where the WM_PAINT message is being sent from (or is there?) I''ve just had to trace through to see where the possible places are. Thanks. Pete

Administrator [Syncfusion]
Replied On September 14, 2005 02:14 PM

Nevermind. Further tracing led me right back into my code where I have an Invalidate() call that shouldn''t be there. My mistake. I apologize for the wasted time.

CONFIRMATION

This post will be permanently deleted. Are you sure you want to continue?

Sorry, An error occured while processing your request. Please try again later.

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

;