带有Datagridviewcombobox列的单元格显示ValueMember而不是DisplayMember

时间:2017-06-28 06:46:09

标签: c# winforms datagridview

我有一个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

2 个答案:

答案 0 :(得分:1)

colOperationDesc.DataPropertyName应该是DataGridView.DataSource中列的名称,并且应“引用”与colOperationDesc.ValueMember中相同的值。

请注意,colOperationDesc.ValueMembercolOperationDesc.DisplayMember应该是colOperationDesc.DataSource来自srcDT变量的DisplayMember的属性/列名称。

  

但只要细胞失去焦点,组合框的细胞就会显示出来   ValueMember

这是因为从srcDT变量找不到列/属性“OperationDesc”(grid)。

答案 1 :(得分:0)

您可以将DataPropertyName设置为OperationID

colOperationDesc.DataPropertyName = "OperationID";