【问题标题】:Cells show the value member (ID) instead Display member单元格显示值成员(ID)而不是显示成员
【发布时间】:2015-08-03 18:24:56
【问题描述】:

我目前正在使用 C#,并且我有以下代码来设置 DGV 内的 ComboBox 列:

// Add the values of the combo box
dgvcbGeneric.DataSource = dtDataSource;
dgvcbGeneric.ValueMember = "ID";
dgvcbGeneric.DisplayMember = "Value";
dgvcbGeneric.DataPropertyName = strColumn;
dgvcbGeneric.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;

dgvcbGeneric.DisplayStyleForCurrentCellOnly = true;
// vGenericCMB.SortMode = DataGridViewColumnSortMode.Automatic

dgvcbGeneric.DefaultCellStyle.NullValue = columns[strActualColumn].nullFormat;

// Add the new ComboBoxColumn of the DGV
dgvLink.Columns.Add(dgvcbGeneric);

一切正常,但 DGV 仅在单元格具有焦点时显示成员值:

谁能解释一下为什么会出现这个问题?

【问题讨论】:

  • 我将strColumn 替换为"Day",将columns[strActualColumn].nullFormat 替换为null,对我来说效果很好。焦点单元格显示ComboBox,一旦选择了一个值并且单元格失去焦点,它仍然显示Value 而不是ID。我不知道NullValue 是否会产生这种效果,但我不知道,因为我不知道你在那个变量中有什么值。
  • 该值为空值。问题是一样的

标签: c# winforms datagridview datatable .net-3.5


【解决方案1】:

我自己发现了错误。基本上,在 DGV 的数据源中,“Day”列的类型为“Byte”(SQL 中的 Tinyint)。 当代码尝试创建 DataTable 以填充 DGV ComboBox 列时; ID 类型为“整数”。

解决方案是检查 ID 与列源的数据类型。如果是不同的;抛出异常以预先检查。

【讨论】:

  • 我对“long”和“int”类型有同样的问题。更改数据库中的类型后问题解决。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
相关资源
最近更新 更多