Hello,
We're using Infragistics Ultragrid ver 10.3 . Some of our users have started receiving this error:
TheGrid DataError: Error text = Unable to retrieve cell value. PropertyDescriptor.GetValue call failed. This may happen for variety of reasons. One possible cause may be that the UltraGridRow's list object may be out of sync with the underlying data list. This can occur if the underlying data list fails to raise proper events notifying the bound controls (UltraGrid) of change in the data list. If you are using a custom IList data source, try implementing IBindingList interface on the data list and raising ListChanged event appropriately. If the data list already implements IBindingList then it may be failing to raise proper notifications. You can also try calling RowsCollection.Refresh on the grid's rows collection to synchronize the grid's list objects with the data lists. Note that the UltraGrid will continue operating normally.TheGrid DataError: Exception type = NullReferenceExceptionTheGrid DataError: Exception = System.NullReferenceException: Object reference not set to an instance of an object. at Infragistics.Win.UltraWinDataSource.UltraDataColumnPropertyDescriptor.GetValue(Object component) at Infragistics.Win.UltraWinGrid.UltraGridRow.GetCellValue(UltraGridColumn column)TheGrid DataError: No cell.TheGrid DataError: No row.TheGrid DataError: Source of the error is TheGrid(_realTimeLocatesGrid_RealTimeLocatesView): Unknown.
Based on the user's logs, my suspicion is on this line of code: _grid.Selected.Rows.Clear() [I think its this line because in the user logs I can see the line before this has fired]. However this _grid.Selected.Rows.Clear() is wrapped in a try-catch block. So my questions are as follows:
1. Could this line be causing a data error? I read that its due to the user trying to input a value? If the "Selected" property is null could it throw this exception?
2. As I've wrapped this bit of code in a try-catch, should it not go into the catch block?
3. What course of action should i take? rowsCollection.Refresh()?
I understand its an old version of Infragistics but we're not looking to upgrade as of now. Really appreciate any help provided.
Thanks.
Hello Huzan,
Thank you for contacting. it looks like a threading issue to me.
I would like to know if your application is using multiple threads or creating a background thread.
You can also test if you are getting the same issue running the sample against Version 19.1
Regards,
Divya Jain
Hi Divya,
Thanks for the speedy response.
Are you saying that accessing the grid itself (_grid.selected) could be throwing this exception because it is accessed from non UI thread?
You cannot access anything on another thread than the current thread without properly marshalling that data or communication.
And it's generally not possible to marshal when you are not in control of the communication, as is the case when you are using data binding. No control in the DotNet Framework supports multi-threading, nor does the BindingManager or DataSet/DataTable.
So if you are using a background thread or any thread other than the UI thread, you cannot access the data source or any of the controls on the main thread.
Accessing a property of the grid from another thread will probably not blow up immediately, but it will create a race condition where things are out of synch and the grid may blow up later when performing some other operation - often the next time is receives an OnPaint event.
Yes, you are right. You cannot access a control, any control, from another thread other than the UI thread.