将数据加载到DataGridViewComboBoxColumn VB.NET中

将数据加载到DataGridViewComboBoxColumn VB.NET中,vb.net,datagridview,datagridviewcombobox,Vb.net,Datagridview,Datagridviewcombobox,嗨,我一整天都在拼命想办法解决这个问题 我有一个DataGridView,它显示SQL查询的结果 查询返回3个字段:GROUPNUM、GROUPNAME、COACHING “组”字段中只有字符串,并且显示良好,但“指导”字段是一个单字符字段,其中包含Y或N。对于该列,我希望有一个以Y或N作为项目的组合框。这是我到目前为止所拥有的 dtGroups是一个用SQL数据适配器填充的数据表 dvGroups = dtGroups.DefaultView

嗨,我一整天都在拼命想办法解决这个问题

我有一个DataGridView,它显示SQL查询的结果

查询返回3个字段:GROUPNUM、GROUPNAME、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
的成员。它具有
Length
Chars
等属性,因此无法创建绑定。此外,items集合接受所有类型的对象

您需要创建并绑定自定义数据源。下面是一个使用
数据表的示例:

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

如果是,db中的辅导栏是什么类型的?如果是布尔值,则“Y”和“N”不是直接转换。而不是组合,考虑复选框。数据库中的字段类型是char,它仅限于一个字符。我实际上在考虑用复选框代替@钚知道我如何使用复选框来实现这一点吗?听起来DB是一个伪布尔。如果可以的话,我会改变它。我完全同意@puropoix。将值存储为位。格式化一个值(用于显示)然后解析(用于存储)总是比较容易的。另一个问题,取决于数据库,是引入其他字符的可能性。如果您无法将DB:think
([Coaching]='Y')更改为MyAching
for MS Access,您可以尝试在SQL中转换它。非常感谢。这一整天都让我发疯。这很有魅力。另一方面,我想用复选框代替组合框。你知道我怎么能让它识别Y为真支票,N为假支票吗?@slister我很确定我以前做过,但我不记得怎么做了。尝试谷歌
parse
(推)和
format
(拉)+
DataGridViewCell
。如果运气不好,你总是可以问一个新问题;)