I have a combo box on a WinForms app in which an item may be selected, but it is not mandatory. I therefore need an ‘Empty’ first item to indicate that no value has been set.
The combo box is bound to a DataTable being returned from a stored procedure (I offer no apologies for Hungarian notation on my UI controls :p ):
DataTable hierarchies = _database.GetAvailableHierarchies(cmbDataDefinition.SelectedValue.ToString()).Copy();//Calls SP cmbHierarchies.DataSource = hierarchies; cmbHierarchies.ValueMember = 'guid'; cmbHierarchies.DisplayMember = 'ObjectLogicalName';
How can I insert such an empty item?
I do have access to change the SP, but I would really prefer not to ‘pollute’ it with UI logic.
Update: It was the DataTable.NewRow() that I had blanked on, thanks. I have upmodded you all (all 3 answers so far anyway). I am trying to get the Iterator pattern working before I decide on an ‘answer’
Update: I think this edit puts me in Community Wiki land, I have decided not to specify a single answer, as they all have merit in context of their domains. Thanks for your collective input.
There are two things you can do:
Add an empty row to the
DataTablethat is returned from the stored procedure.Create a DataView and sort it using ObjectLogicalName column. This will make the newly added row the first row in DataView.
Then set the dataview as
DataSourceof theComboBox.If you really don’t want to add a new row as mentioned above. You can allow the user to set the
ComboBoxvalue to null by simply handling the ‘Delete’ keypress event. When a user presses Delete key, set theSelectedIndexto -1. You should also setComboBox.DropDownStyletoDropDownList. As this will prevent user to edit the values in theComboBox.