将数据加载到 DataGridViewComboBoxColumn VB.NET
Posted
技术标签:
【中文标题】将数据加载到 DataGridViewComboBoxColumn VB.NET【英文标题】:Load data into DataGridViewComboBoxColumn VB.NET 【发布时间】:2014-08-22 17:49:15 【问题描述】:嗨,我整天都在用头撞墙试图弄清楚这一点。
我有一个显示 SQL 查询结果的 DataGridView
查询返回 3 个字段:GROUPNUM、GROUPNAME、COACHING
组字段中只有字符串并且它们显示正常,但 COACHING 字段是一个单字符字段,其中包含 Y 或 N。对于该列,我希望有一个以 Y 或 N 作为项目的组合框。这是我目前所拥有的。
dtGroups 是一个用 SQL 数据适配器填充的数据表。
dvGroups = dtGroups.DefaultView
'Set up datagrid view
With dgvToPopulate
.Columns.Clear()
.AutoGenerateColumns = False
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
.DataSource = dtGroups
With .Columns
Dim groupNumColumn, groupNameColumn As New DataGridViewTextBoxColumn
With groupNumColumn
.DataPropertyName = "GROUPNUM"
.HeaderText = "Group Number"
.ReadOnly = True
End With
With groupNameColumn
.DataPropertyName = "GROUPNAME"
.HeaderText = "Group Name"
.ReadOnly = True
End With
Dim coachingColumn As New DataGridViewComboBoxColumn
With coachingColumn
.HeaderText = "RN Coaching"
.Items.AddRange("Y", "N")
.DataPropertyName = "COACHING"
.DisplayMember = .DataPropertyName
.ValueMember = .DisplayMember
End With
.AddRange(groupNumColumn, groupNameColumn, coachingColumn)
End With
End With
网格按照我想要的方式设置,它显示了除了所有组合框之外的所有数据,没有任何选择。如何根据该字段中存储的内容让组合框在其中包含 Y 或 N。
对此的任何帮助将不胜感激。
【问题讨论】:
如果是,那么数据库中的 COACHING 类型是什么?如果是布尔值,则“Y”和“N”不是直接转换。考虑一个复选框,而不是一个组合。 数据库中的字段类型为char,限制为一个字符。我实际上是在考虑使用复选框。 @Plutonix 知道如何使用复选框来完成此操作吗? 听起来 DB 是一个伪布尔值。如果可以的话,我会改变它。 我完全同意@Plutonix。将值存储为位。格式化一个值(用于显示)然后解析(用于存储)总是更容易。 另一个问题,取决于数据库,是引入其他字符的机会。如果您无法更改数据库,您可以尝试在 SQL 中转换它:类似于([Coaching]='Y') AS myCoaching
for MS Access
【参考方案1】:
DisplayMember
和 ValueMember
都链接到 DataSource
属性。每当您更改这些属性之一时,都会重置数据连接。换句话说:items-collection 被清除了。
以你的例子为例。 String
类没有名为 COACHING
的成员。它具有Length
和Chars
等属性。因此您无法创建绑定。此外,items-collection 接受所有类型的对象。
您需要创建和绑定自定义数据源。这是一个使用 DataTable
的示例:
Dim ynTable As New DataTable()
With ynTable
.Columns.Add("Value", GetType(String))
.Rows.Add("Y")
.Rows.Add("N")
.AcceptChanges()
End With
With coachingColumn
.HeaderText = "RN Coaching"
.DataSource = ynTable
.DataPropertyName = "COACHING"
.DisplayMember = "Value"
.ValueMember = "Value"
End With
【讨论】:
非常感谢。这让我整天发疯。这就像一个魅力。在旁注中,我正在考虑使用复选框而不是组合框。你知道我如何让它将 Y 识别为 True 校验,N 识别为 false 吗? @slister 我很确定我以前做过,但我不记得怎么做了。试试谷歌parse
(推)和format
(拉)+DataGridViewCell
。如果运气不好,您可以随时提出新问题;)以上是关于将数据加载到 DataGridViewComboBoxColumn VB.NET的主要内容,如果未能解决你的问题,请参考以下文章
如何在将数据加载到 UIViewConroller Swift 时创建正在加载的 UIView