我有一个 DataGridView
使用自定义列。
但是当我添加一个“DataGridViewComboBoxColumn
”并将我的模型类列表作为DataSource
给它时然后我有以下错误:
System.ArgumentException: DataGridViewComboBoxCell value is not valid.
新编辑: 4/9/2009 “更多详细信息”
我有一个名为 SmsPart
的类(class)具有以下属性:
public class SmsPart
{
public int ID
public SmsPart Parent
public string Name
// and more
}
我有一个名为“GetSmsParts
”的方法返回“List<SmsPart>
”。
我想要 Parent
DataGridView 中的列为 ComboBoxColumn,以选择哪个部分是所选部分的父级。
因此,出于这个原因,我制作了“DataGridViewComboBoxColumn”并将其设置为Datasource 与孔DataGridView 相同的DataSource“这是GetsmsParts 方法”:
DataGridViewComboBoxColumn comboCulomn = new DataGridViewComboBoxColumn();
comboCulomn.DataSource = listParts;
comboCulomn.DataPropertyName = "Parent";
comboCulomn.DisplayMember = "Name";
comboCulomn.ValueMember = "ID";
comboCulomn.Name = "Parent";
dgvParts.Columns.Add(comboCulomn);
但我总是有这个错误信息:
System.ArgumentException: DataGridViewComboBoxCell value is not valid.
最佳答案
尝试为 ValueMember
分配数据字段的名称clm2
的属性(property).当您指定值类型为 typeof(smsType)
时,您没有告诉 ComboBox 列将哪个字段用于该值。
编辑
等一下:是你的 smsType
一些复杂的类型或什么?我不确定这里是否有任何限制,但对于示例,您应该使用类似 int
的内容或 string
左右(您通常希望存储为数据库字段的任何内容)。
当然,还有 DataGridView
的类型的基础数据源的列(在您的示例中称为“类型”)也必须与 ValueMember
的类型相同!
编辑 2
关于您的第二条评论:假设一个名为“tbl”的数据库表包含(除其他外)一个名为“Type”的列,其类型为 Integer
.您正在 DataGridView 中显示该表的内容,并且您希望用户能够从组合框中为“类型”列选择值。这是关于您正在谈论的场景。
- 不可能像您在数据库列中使用的那样存储复杂类型,因此您不能对
Value
使用复杂类型DataGridViewComboBoxColumn
中的字段. - 要为整个网格执行数据绑定(bind),您必须将网格绑定(bind)到数据库表“tbl”。创建
DataGridViewComboBoxColumn
,您需要为该列分配一个可能值的列表,并告诉该列它在 DataGridView 的数据源中将所选值存储到哪个字段,哪个字段用作显示值以及哪个字段用作存储的值基础数据源的列。
这意味着在示例中(假设列的数据源包含属性“Value”和“Name”):
DataGridViewComboBoxColumn col = new ...
col.DataSource = columnDataSource;
col.DisplayMember = "Name";
col.ValueMember = "Value";
col.DataPropertyName = "Type";
这就是全部。但是,如果我没记错的话,您分配给“ValueMember”的属性类型不能是复杂类型(类/结构)......
关于c# - 将 ComboBox 列添加到具有相同数据源的 DataGridView 时出现 ArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1503649/