问题的根本原因是组合框值列表中不存在值“选择”。您需要将其添加到列的数据源中,或者添加到单个单元格组合框的数据源中(使用该单元格的编辑控件)。
下面是关于设置所选项目的值的更多解释,我将离开,因为您可能会发现它很有用。
有两种基本方法可以设置 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;}
}
在此示例中,我将ValueMember 属性设置为“id”,它指的是我的 ComboBox 绑定到的列表中的属性名称 id。
所以我需要做的就是以下(我确信我的行和单元格索引是正确的 - 你应该编写代码来检查):
dataGridView1.Rows[0].Cells[2].Value = 1;
现在,在我的示例中,这是可行的,因为我的 ValueMember 设置为我的“id”属性,它是一个整数,如果 id 是一个字符串属性,我需要像这样设置值:
dataGridView1.Rows[0].Cells[2].Value = "1";
(实际上只是尝试过这个,它通过隐式转换进行管理)
当然,我想确保我的列表中确实有一个值“1”。
以上几行是您的错误的直接原因 - 为组合框提供值的列表不包含值“选择”。
要使用数据绑定设置值,您需要告诉 ComboBoxColumn 它在 DataGridView 数据源中绑定的对象。
我将 ComboBoxColumn 的 DataPropertyName 设置为绑定 DataGridView 的类的属性名称就完成了。