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 s
cmbHierarchies.SelectedIndex = -1;
There are two things you can do:
Add an empty row to the DataTable
that is returned from the stored procedure.
DataRow emptyRow = hierarchies.NewRow();
emptyRow["guid"] = "";
emptyRow["ObjectLogicalName"] = "";
hierarchies.Rows.Add(emptyRow);
Create a DataView and sort it using ObjectLogicalName column. This will make the newly added row the first row in DataView.
DataView newView =
new DataView(hierarchies, // source table
"", // filter
"ObjectLogicalName", // sort by column
DataViewRowState.CurrentRows); // rows with state to display
Then set the dataview as DataSource
of the ComboBox
.
If you really don't want to add a new row as mentioned above. You can allow the user to set the ComboBox
value to null by simply handling the "Delete" keypress event. When a user presses Delete key, set the SelectedIndex
to -1. You should also set ComboBox.DropDownStyle
to DropDownList
. As this will prevent user to edit the values in the ComboBox
.
I would bind the data then insert an blank item at position 0 using the ComboxBox.Items.Insert method. Similar to what flipdoubt suggested, but it adds the item to the top.
Cant you add a new DataRow to the DataTable before you bind it to your DataSource?
You can use the NewRow function of the DataTable to achieve this:
http://msdn.microsoft.com/en-us/library/system.data.datatable.newrow.aspx
Er, can't you just add a default item to the ComboBox after data binding?
insert a blank row in your datatable, and check for it in validation/update/create