I\'m trying to allow user to select value from DataGridViewComboBoxColumn
for each new row. I\'ve bound ComboBox
in GridView
to databa
You can use the DefaultCellStyle.NullValue
and DefaultCellStyle.DataSourceNullValue
properties of the combo box column.
There is a quite comprehensive MSDN article on this here.
I've also given a code example below:
// Let's say I have this list of cars I want to add to my datagridview
List<Car> cars = new List<Car>();
cars.Add(new Car() { Index = 0, Make = "Ford" });
cars.Add(new Car() { Index = 1, Make = "Chevvy" });
cars.Add(new Car() { Index = 2, Make = "Toyota" });
// I create the column, setting all the various properties
DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.DataSource = cars;
col.Name = "Cars";
col.DisplayMember = "Make";
col.HeaderText = "Car";
col.ValueMember = "Index";
col.DataPropertyName = "Car";
// As well as standard properties for a combobox column I set these two:
col.DefaultCellStyle.NullValue = cars[0].Make;
col.DefaultCellStyle.DataSourceNullValue = cars[0].Index;
dataGridView1.Columns.Add(col);
dataGridView1.DataSource = dt;
One thing to note with the code above is that I am setting the DataPropertyName
to allow binding with a property on the datagridview's datasource.
If I was not doing that then I would need to add some additional logic when accessing the combo box column when users have selected nothing, since the Value of the property would be null (the NullValue does not set a value to the actual cell, only shows a default value).
You can add Items to your DataGridViewComboBoxColumn
in designer or in code.
bindingSource1.DataSource = itemBAL.GetTable();
dataGridView1.DataSource = bindingSource1;
ItemName.DataSource = bindingSource1; //Where ItemName is an instance ofDataGridViewComboBoxColumn
ItemName.DisplayMember = "Name";
ItemName.ValueMember = "ItemId";
add this line only
dataGridView1["ItemName",dataGridRowNumber].value=1;//item id value