c# - 将 ComboBox 列添加到具有相同数据源的 DataGridView 时出现 ArgumentException

标签 c# .net datagridview combobox datasource

我有一个 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 中显示该表的内容,并且您希望用户能够从组合框中为“类型”列选择值。这是关于您正在谈论的场景。

  1. 不可能像您在数据库列中使用的那样存储复杂类型,因此您不能对 Value 使用复杂类型DataGridViewComboBoxColumn 中的字段.
  2. 要为整个网格执行数据绑定(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/

相关文章:

c# Datagridview (Winform) 基于相邻单元格值的单元格着色

c# - 如何将 IdentityRole 扩展为自定义表名

c# - 我不知道如何处理 SocketException 以满足我的需要

c# - 在 Entity Framework 中使用 SqlQuery RAW 查询返回匿名类型

c# - DataGridView ID 列不会隐藏

c# - 在 dataGridView 中的单个列下显示不同表中的两个属性

c# - MemberwiseClone 与新对象

c# - 保存已发送的短信

c# - 由于 Unresolved 依赖关系,无法使用 Winforms 控件

.net - 如何绕过 .NET 中未处理的异常处理来克服 StackOverflowException