Hello,
we have an application which uses a WinGrid with 3 bands.
On the second band we have 3 columns: Suppliers, Quantities and a third colum which uses a MultiSelect UltraCombo with the list of Orders for that supplier. After selecting the Orders by checking them on the UltraCombo it adds new rows to a third band listing the orders I choosed.
First time it works like a charm! On the BeforeCellListDropDown event I load all the orders for that specific supplier and there's no Errors.
When I pass on to another supplier it throws an Unhandled Exception like on the picture attached. The exception window appears after the BeforeCellListDropDown and not always... but 90% of the time...
It doesn't happen if I select the rows in the combo in order (from top of the list to bottom) as long as I select the first item on the list... everything else throws this error...
What could be wrong?
Please help because this project is due to deliver this week!
Many thanks.
Hi,
I can't see enough of the call stack of the exception to even take a reasonable guess here. Can you post the entire call stack. I'm pretty sure you can copy and paste the text from that dialog.
If you could post a small sample project demonstrating the exception that would be even better. My guess is that the issue has something to do with the fact that you are adding child rows in response to the selection from a DropDown in the grid. But without knowing what your code is doing and what events it's doing it in, it's impossible to guess.
Here's the stack:
See the end of this message for details on invoking just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************System.ArgumentOutOfRangeException: Parameter name: iteIndex at Infragistics.Win.UltraWinGrid.UltraDropDownBase.Infragistics.Win.IValueList.ResolveItemAppearance(Int32 itemIndex, AppearanceData& appData, AppearancePropFlags& flags, ComponentRole componentRole) at Infragistics.Win.EditorWithTextUIElement.GetImage(String text, AppearanceData& appData) at Infragistics.Win.EditorWithTextUIElement.PositionChildElements() at Infragistics.Win.UIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UltraWinGrid.RowColRegionIntersectionUIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UltraWinGrid.DataAreaUIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UltraWinGrid.UltraGridUIElement.VerifyChildElements(ControlUIElementBase controlElement, Boolean recursive) at Infragistics.Win.UIElement.DrawHelper(Graphics graphics, Rectangle invalidRectangle, Boolean doubleBuffer, AlphaBlendMode alphaBlendMode, Boolean clipText, Boolean forceDrawAsFocused, Boolean preventAlphaBlendGraphics) at Infragistics.Win.ControlUIElementBase.Draw(Graphics graphics, Rectangle invalidRectangle, Boolean doubleBuffer, AlphaBlendMode alphaBlendMode, Size elementSize, Boolean preventAlphaBlendGraphics) at Infragistics.Win.ControlUIElementBase.Draw(Graphics graphics, Rectangle invalidRectangle, Boolean doubleBuffer, AlphaBlendMode alphaBlendMode) at Infragistics.Win.UltraWinGrid.UltraGridUIElement.Draw(Graphics graphics, Rectangle invalidRectangle, Boolean doubleBuffer, AlphaBlendMode alphaBlendMode) at Infragistics.Win.UltraControlBase.OnPaint(PaintEventArgs pe) at Infragistics.Win.UltraWinGrid.UltraGrid.OnPaint(PaintEventArgs pe) at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer) at System.Windows.Forms.Control.WmPaint(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Okay, it seems like you are jumping through some serious hoops here. Why do you need to remove the EditorComponent from the cell? I suspect that is what is causing the problem. The grid is trying to find something on the ValueList and it's not there and the grid is not expecting it to be gone, since it was in the middle of processing the selection of an item.
This could be considered a bug in the grid - the grid should probably not be assuming that the ValueList is still there. That's something we could fix if we could duplicate the problem.
But it seems like your code might be doing some odd things here and it might be better in the long run for you to simplify it so that you avoid removing and re-adding the EditorComponent.
I remove and add the EditorComponent exactly to solve THIS PROBLEM. I'm using EditorComponent instead of ValueList because with ValueList the combo closes without letting me select any row...
Besides I already tried your advise (I just add the EditorComponent once when the form is loading) and I still got the same problem...
I don't want to give bad luck but... I think I solved it!
Apparentely the problem is that I was adding the rows on the third band directly from this:
For each loRow as UltraGridRow in cmbOrders.CheckedRows
' AddRows Code
Next
After a debug I found that sometimes th cmbOrders "lost" the CheckedRows reference returning Null and causinh these problems...
So now before I add any rows to the third band, I save the values on a temporary table and after the table is populated, I run thru the temp table rows and add the rows to the third band..
I already did 4 tests with variations and the error didn't occur anymore... I will make more tests today and tomorrow and get back here to confirm if this REALLY solved it!
Spoken to soon...
I still got the scroll problem... how CAN I SOLVE THIS?????
Sorry, I misunderstood what you said about removing and adding the EditorComponent. That's clearly not a good solution, even if solves the issue.
Having said that, there's clearly a whole lot of other stuff going on there, and I'm afraid I do not have a magic solution for you. If you can reproduce the issue in a small sample project I will be happy to take a look at it and tell you what's happening and why the exception is occurring. But without being able to see it, all I can do is make some wild guesses.
If the problem is being caused by the fact that you are adding rows to a child band when selecting items from the list, then maybe you can get around that by using a BeginInvoke instead of adding the rows directly inside the event handler.
Hi Mike,
Thanks for the answer 'en passant'. A well placed ultcmbPartNumbersPreLoadParameters.Refresh() solved the problem with a fairly complex pre load screen that had three Ultra Combos that were extended to do 'search contains' and worked in tandem with three standard multi select combos (side by side) ...
Yes, the control was 'losing' the ValueList when I was checking the box of the CheckEditor column in code.
I had already used the Invoke to help make the pairs work together.
Anyways, that fixed it.
Thanks, wish I would have 'googled' that part of the error message earlier.