如何设置DataGridViewComboBox列的值?

thi*_*zar 8 c# datagridview winforms

我想知道如何设置DataGridViewComboBox单元格的值.我已经将DataGridViewComboBox与DataSource绑定在一起.但是我想为这个数据源设置新值.

这是我到目前为止:

gvList.Rows[0].Cells[0].value = "Select";
Run Code Online (Sandbox Code Playgroud)

但它抛出一个错误说:格式异常:DataGridViewComboBox单元格值无效.

我怎么能没有错误地实现这个目标?

Dav*_*all 14

问题的根本原因是组合框值列表中不存在值"选择".您需要将其添加到列的数据源,或者添加到单个单元的组合框的数据源(使用该单元的编辑控件).

下面是关于设置我将要离开的所选项目的值的更多解释,因为您可能会发现它很有用.

设置DataGridViewComboBoxColumn的值有两种基本方法.您可以使用数据绑定,也可以直接设置值.

听起来你正试图直接设置,所以我先解释一下,然后在下面我将用数据绑定完成答案.

采取以下人为的例子:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        BindingList<User> users = new BindingList<User> { new User() { UserName = "Fred", userid = 2 } };

        IList<MyValue> values = new List<MyValue> { new MyValue{id = 1, name="Fred"}, new MyValue{id = 2, name="Tom"}};

        dataGridView1.DataSource = users;

        DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
        col.DataSource = values;
        col.DisplayMember = "name";
        col.DataPropertyName = "userid";
        col.ValueMember = "id";
        dataGridView1.Columns.Add(col);

    }       
}

public class MyValue
{
    public int id { get; set; }
    public string name { get; set; }
}

public class User
{
    public string UserName { get; set; }
    public int userid {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我将ValueMember属性设置为"id",它指的是我的ComboBox绑定到的列表中的属性名称id.

所以我需要做的就是以下内容(我确定我的行和单元格索引是正确的 - 你应该编写代码来检查):

dataGridView1.Rows[0].Cells[2].Value = 1;
Run Code Online (Sandbox Code Playgroud)

现在,在我的示例中这是有效的,因为我ValueMember的设置为我的"id"属性是一个整数,如果相反id是一个字符串属性,我需要像这样设置值:

dataGridView1.Rows[0].Cells[2].Value = "1";
Run Code Online (Sandbox Code Playgroud)

(实际上只是尝试了这个并且它使用隐式转换进行管理)

当然,我想确保列表中的值实际为"1".

以上几行是导致错误的直接原因 - 将值提供给组合框的列表不包含值"Select".

要使用数据绑定设置值,您需要告诉ComboBoxColumn它在DataGridView数据源中绑定的内容.

完成后,我将ComboBoxColumn的DataPropertyName设置为DataGridView绑定的类的属性名称.


Val*_*ale 5

有一种设置值的方法,但如果设置了 DataSource 则不允许。

DataGridViewComboBoxCell cell =(DataGridViewComboBoxCell)gvList.Rows[0].Cells[0];
cell.Items[0] = "Select";
Run Code Online (Sandbox Code Playgroud)


V4V*_*tta 3

该错误是由于您已将 a 绑定DataSourceComboBox列,并且在分配 Select 时,它也尝试在其绑定中找到相同的内容DataSource。您最好的选择是将其添加到绑定到ComboBox列的原始数据源中