将数据加载到 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】:

DisplayMemberValueMember 都链接到 DataSource 属性。每当您更改这些属性之一时,都会重置数据连接。换句话说:items-collection 被清除了。

以你的例子为例。 String 类没有名为 COACHING 的成员。它具有LengthChars 等属性。因此您无法创建绑定。此外,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的主要内容,如果未能解决你的问题,请参考以下文章

将数据加载到 redshift 数据库中

如何在将数据加载到 UIViewConroller Swift 时创建正在加载的 UIView

将 json 格式数据加载到 google bigquery 性能问题

将 plist 加载到核心数据中

有没有办法将数据从 redshift 加载到 HDFS?

显示加载图标,直到Firebase firestore将数据完全加载到textview中