具有 Datagridviewcombobox 列的单元格显示 ValueMember 而不是 DisplayMember
Posted
技术标签:
【中文标题】具有 Datagridviewcombobox 列的单元格显示 ValueMember 而不是 DisplayMember【英文标题】:Cell with Datagridviewcombobox column displays the ValueMember instead of DisplayMember 【发布时间】:2017-06-28 06:46:09 【问题描述】:我有一个从数据库绑定数据的 Datagridview。
DataGridViewTextBoxColumn colOperationID = new DataGridViewTextBoxColumn();
colOperationID.Name = "OperationID";
colOperationID.DataPropertyName = "OperationID";
BOMOperations.Columns.Add(colOperationID);
DataGridViewComboBoxColumn colOperationDesc = new DataGridViewComboBoxColumn();
colOperationDesc.Name = "OperationDesc";
colOperationDesc.DataSource = srcDT;
colOperationDesc.DisplayMember = "OperationDesc";
colOperationDesc.ValueMember = "OperationID";
colOperationDesc.DataPropertyName = "OperationDesc";
colOperationDesc.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
colOperationDesc.DefaultCellStyle.BackColor = Color.White;
colOperationDesc.DisplayStyleForCurrentCellOnly = true;
BOMOperations.Columns.Add(colOperationDesc);
然后用户将单击编辑按钮,datagridview 将变为可编辑。我的问题是,当我单击 datagridviewcombobox 列时,我将选择一个项目,该项目将正确显示(DisplayMember),但只要单元格失去焦点,组合框的单元格就会显示 ValueMember。
我已经尝试过我在这里检查数据类型的解决方案,但我的解决方案是正确的。 DisplayValue 是一个字符串,而 DisplayValue 是一个 int。
我还尝试将以下行 colOperationDesc.DataPropertyName = "OperationDesc";
更改为 colOperationDesc.DataPropertyName = "OperationID";
,它给了我这个例外。 exception
【问题讨论】:
【参考方案1】:colOperationDesc.DataPropertyName
应该是DataGridView.DataSource
中列的名称,并且应该“引用”与colOperationDesc.ValueMember
中相同的值。
注意colOperationDesc.ValueMember
和colOperationDesc.DisplayMember
应该是来自colOperationDesc.DataSource
的属性/列名,在您的情况下来自srcDT
变量。
但只要单元格失去焦点,组合框的单元格就会显示 价值成员
这是因为在 srcDT
变量中找不到列/属性“OperationDesc”(DisplayMember
)。
【讨论】:
我已经尝试更改 colOperationDesc.DataPropertyName = "OperationID" 但它给了我一个 System.ExceptioncolOperationDesc.ValueMember
和colOperationDesc.DisplayMember
中使用的属性/列是否存在于srcDT
变量中
它们确实存在于数据表 srcDT 中。我更新了我的帖子并上传了我更改 DataPropertyName 时遇到的异常。这是我的数据源的代码:cmd = new SqlCommand(); srcDT = new DataTable(); cmd.CommandText = "SELECT OperationID, OperationDesc FROM Operation"; srcDT = _SQL.GetData(cmd); colOperationDesc.DataSource = srcDT; colOperationDesc.ValueMember = "OperationID"; colOperationDesc.DisplayMember = "OperationDesc";
@Zhyke, DataPropertyName
应引用 DataGridView.DataSource 中使用的来自DataTable
的列,并且与srcDT
中的“OperationId”类型完全相同。您是否在代码中的某处使用了选定的值?哪一行抛出异常?
是的,它们确实具有相同的列名和相同的数据类型。我正在使用更改的选定值来填充我的 datagridview 中的其他字段。实际上例外只是一个弹出对话框。谢谢。【参考方案2】:
您可以将DataPropertyName
设置为OperationID
。
colOperationDesc.DataPropertyName = "OperationID";
【讨论】:
谢谢,但我已经尝试过了,它给了我一个 System.Exception:以上是关于具有 Datagridviewcombobox 列的单元格显示 ValueMember 而不是 DisplayMember的主要内容,如果未能解决你的问题,请参考以下文章
具有 Datagridviewcombobox 列的单元格显示 ValueMember 而不是 DisplayMember
如何在 DataGridViewComboBox 列中绘制非活动行?
dataGridViewCombobox 值未保存在导航器上保存按钮单击