I have a SelectionDrag event where I want to examine the SelectedRowsCollection, verify a constraint of the ListObject of each row. If the ListObject fails the constraint I want to purge it from the SelectedRowsCollection.
There is no public method on SelectedRowsCollection to remove a row, so I declare another SelectedRowsCollection and attempt to add the valid rows to the alternate collection, and continue the DragDrop with the valid rows.
However when I add to the SelectedRowsCollection, I get a null reference exception. Neither the SelectedRowsCollection nor the row is null. This has to be something from the internal workings of SelectedRowsCollection.Add(). Is this a bug? It seems like one. Any Suggestions?
Here is the code:
SelectedRowsCollection selectedRows = ((UltraGrid)sender).Selected.Rows; SelectedRowsCollection finalRows = new SelectedRowsCollection(); foreach (UltraGridRow row in selectedRows) { DomainObject domainObj = (DomainObject) row.ListObject; if (NotValid) { continue; } finalRows.Add(row); // Exception is thrown here } if (finalRows.Count > 0) { ((UltraGrid)sender).DoDragDrop(finalRows, DragDropEffects.Move); }
Here is the stack trace
at Infragistics.Win.UltraWinGrid.SelectedRowsCollection.AddRange(UltraGridRow[ rows, Boolean ensureRowsOrdered, Boolean fireSlectionChangeEvent) at Infragistics.Win.UltraWinGrid.SelectedRowsCollection.AddRange(UltraGridRow[ rows) at Infragistics.Win.UltraWinGrid.SelectedRowsCollection.Add(UltraGridRow row) at MyForm.Grid_SelectionDrag(Object sender, CancelEventArgs e) :line 330 at Infragistics.Win.UltraWinGrid.UltraGrid.OnSelectionDrag(CancelEventArgs e) at Infragistics.Win.UltraWinGrid.UltraGrid.FireEvent(GridEventIds id, EventArgs e) at Infragistics.Win.UltraWinGrid.UltraGrid.Infragistics.Win.ISelectionManager.OnDragStart(ISelectableItem item, Point mousePosition) at Infragistics.Win.SelectionStrategyBase.DragStart() at Infragistics.Win.SelectionStrategyExtended.OnMouseMove(ISelectableItem item, MouseMessageInfo& msginfo) at Infragistics.Win.SelectionStrategyExtended.OnMouseMessage(ISelectableItem item, MouseMessageInfo& msginfo) at Infragistics.Win.ControlUIElementBase.ProcessMouseMoveHelper(Object sender, MouseEventArgs e) at Infragistics.Win.ControlUIElementBase.ProcessMouseMove(Object sender, MouseEventArgs e) at System.Windows.Forms.MouseEventHandler.Invoke(Object sender, MouseEventArgs e) at System.Windows.Forms.Control.OnMouseMove(MouseEventArgs e) at System.Windows.Forms.Control.WmMouseMove(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)
You should not create a new SelectedRows collection. I don't think this class is intended to be used outside of the grid. If you just want to store a list of rows so you can drag, why not simply store them in a List<UltraGridRow> or an array?
Or, if you want to de-select a row in the grid, just set the Selected property of the row to false. This will remove the row from the grid's Selected.Rows collection.
I have a similar issue where I am trying to select certain rows by inserting a SelectedRowsCollection in the grids selected rows.
My_ultragrid.Selected.Rows.AddRange(row_collection.All as UltraGridRow[]);
However, this is throwing a null exception and crashing. None of the parameters in the above statement are null.
I tried to insert RowsCollection and an Arrayist too. Still getting the same error.
Hi,
Can you post a small sample project demonstrating the exception?
What version of the grid are you using?