Combo box is not displaying default value in DataGridView in C#

前端 未结 3 1358
时光说笑
时光说笑 2021-01-20 18:21

I\'m trying to allow user to select value from DataGridViewComboBoxColumn for each new row. I\'ve bound ComboBox in GridView to databa

相关标签:
3条回答
  • 2021-01-20 18:50

    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).

    0 讨论(0)
  • 2021-01-20 19:05

    You can add Items to your DataGridViewComboBoxColumn in designer or in code.

    0 讨论(0)
  • 2021-01-20 19:09
    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
    
    0 讨论(0)
提交回复
热议问题