Apologies if this answer exists elsewhere, my search didn't return anything.
Here's my situation. I have a form containing some buttons and a WinGrid. On button press by the user, server side updates are performed using data from the grid. The update communication is performed in a background thread so that the user can access other parts of the application. The downside is this leaves the wingrid enabled where the user could make changes while the update is in progress.
The simplest option is to set the .Enabled property on the wingrid during processing, and re-enable after it's complete. However, project management has deemed the graying out of the grid "ugly" (even though it's been stressed to them that this is consistent windows behavior) and not an acceptable answer.
I've attempted to go through all the appearance objects in the grid and set their disabled colors to the same value as the non-disabled colors (ie .ForeColorDisabled = ForeColor) at design time, in the hopes that when setting .Enabled = false, I'd get the behavior I'm looking for without any visual change. However this doesn't appear to be doing anything, I'm still seeing the grayed-out component.
My questions are:
1) Is the above approach feasible and maybe I'm just missing something?
2) Is there perhaps another way to get the behavior I'm looking for? (I should note that what I'm looking for is not solved by just setting the grid to ReadOnly, I still need to mimic a truely disabled component (ie clicking column header doesn't resort).
Thanks!
How about this:
Grid.DisplayLayout.Override.AllowAddNew = AllowAddNew.NoGrid.DisplayLayout.Override.AllowUpdate = Infragistics.Win.DefaultableBoolean.FalseGrid.DisplayLayout.Override.AllowDelete = Infragistics.Win.DefaultableBoolean.False
Those would definitely prevent any kind of data update in the grid, but they wouldn't prevent other kinds of grid interaction like
- resorting of data by a column
- grouping of data by column (the group-by box is visible durint this process)
- right-click context menus on certain grid components
probably more that I'm missing.
Just to throw it out there I was thinking from the user experience perspective. Assuming the intent of disabling the grid is to prevent the user from adding, updating or deleting data while you are talking to the server is it necessary to stop the user from interacting with the data currently displayed? For example, being able to sort or group the data. Would it make sense to allow the user to still interact with the program other than making changes and just make sure that when you are done talking with the server refresh the results as the user currently has the grid configured?
I have no problem writing the code necessary to disable those, but I was really hoping to avoid having to do that.
Before I do that though I'd really like to see perhaps an official confirmation that my 1st approach (setting all disabled colors to their non-disabled values) and still using the .Enabled property is a dead end.
Yeah you'll have to do all that lovely plumbing to disable column sorting, column grouping, and context menus too. Unless there is some major way of locking down the entire grid that I currently don't know about. Do you think you have a handle on that or are you looking for some more sample code?