【发布时间】:2011-12-01 18:15:59
【问题描述】:
我正在尝试在DataGridView 中设置一些东西。看起来这应该很简单,但我遇到了麻烦。我想显示三列:
- 代码ID
- 代号
- DisplayMember 为 TypeName,ValueMember 为 TypeID 的组合框
我希望能够从TypeName 的所有可能值中进行选择。这是我的困境:
如果我将所有这些加载到一个DataTable 并将DataGridView 设置为DataSource,我可以显示该记录的现有TypeName,但组合框将不包含任何其他值。如果我将DataGridViewComboBoxColumn 的DataSource 设置为单独的DataTable,其中包括所有可能的TypeNames,则不会显示现有值。
DataGridView 使用起来真的很烦人,因此无论是解决方案还是可行的替代方案都将不胜感激。
编辑:看来问题是由于我想为DisplayMember 和ValueMember 单独设置一个项目。如果我不担心将ID 设置为ValueMember,则以下工作:
var typeColumn = new DataGridViewComboBoxColumn
{
DataSource = typeList,
DisplayMember = "Type",
ValueMember = "Type",
DataPropertyName = "Type"
}
如果我执行以下操作,则选择了正确的类型,但我无法更改组合框中的选择:
var typeColumn = new DataGridViewComboBoxColumn
{
DataSource = typeList,
DisplayMember = "Type",
ValueMember = "TypeID",
DataPropertyName = "TypeID"
}
如果我使用以下内容,我会在尝试填充时收到 FormatException 错误:
var typeColumn = new DataGridViewComboBoxColumn
{
DataSource = typeList,
DisplayMember = "Type",
ValueMember = "TypeID",
DataPropertyName = "Type"
}
编辑:typeList 是一个简单的DataTable,由以下内容填充:
SELECT DISTINCT IT.InsuranceTypeID, IT.[Type]
FROM InsuranceType IT
WHERE IT.ClientID = @ClientID
ORDER BY [Type]
【问题讨论】:
-
您是否在 DGVCBC 上设置 DataPropertyName?此外,史诗般的个人资料图标。 social.msdn.microsoft.com/forums/en-US/winformsdatacontrols/…
-
您能否发布您如何设置
typeList以及您要添加到列表中的结构?DataPropertyName和ValueMember的类型必须相同,这可能是您在上一个示例中遇到异常的原因。 -
@SwDevMan81 - 当然,请参阅我的编辑。
标签: c# winforms data-binding datagridview datatable