【问题标题】:How To Populate A Treeview With All Columns And Values From SQL Database如何使用 SQL 数据库中的所有列和值填充树视图
【发布时间】:2013-07-22 08:22:41
【问题描述】:

不确定是否可以这样做,但我正在尝试生成一个 MySQL 查询,该查询为我提供表中的每个列名以及与这些列关联的值,同时删除值的重复条目。

简而言之,我正在尝试使用数据库中表中的列名作为节点来填充树视图控件。在每个节点下,我想将每列中的所有非重复且非空条目列为子节点。基本上为我的应用程序创建一个类似控件的过滤器。

我正在尝试模拟 Excel 中的过滤器选项,用户可以在其中勾选所有过滤器选项以包含/排除数据。

我已尝试构建查询,但现阶段只能管理列名。我也尝试从我的数据集中构建树视图控件,但只能填充节点,而不是子节点。

感谢任何帮助,因为我仍在 VB.net 中学习 SQL

【问题讨论】:

  • 这几乎不是 mysql 或 sql 或 treeview 问题。这确实是一个 VB.net 问题。请添加正确的标签。

标签: mysql sql vb.net treeview


【解决方案1】:

使用您的建议和帮助,我设法将其转换为数据表并获得了预期的结果。感谢您让我走上正轨。

这是我的最终结果。可以用更整洁的代码实现相同的结果,但这对我有用。再次感谢。

            MySQLConn.Open()

            Dim ColumnQry As New MySqlCommand("SELECT * FROM Stores WHERE 1=2", MySQLConn)
            ColumnQry.CommandType = CommandType.Text
            Dim da1 As New MySqlDataAdapter(ColumnQry)
            dasColumns.Tables.Clear()

            da1.Fill(dasColumns, "Columns")
            Dim dt1 As DataTable = dasColumns.Tables("Columns")

            For Each f As DataColumn In dt1.Columns
                trvFilter.Nodes.Add(f.ColumnName, f.ColumnName)

                Dim ValuesQry As New MySqlCommand("SELECT DISTINCT " & f.ColumnName & " FROM Stores ORDER BY " & f.ColumnName, MySQLConn)
                ValuesQry.CommandType = CommandType.Text
                Dim da2 As New MySqlDataAdapter(ValuesQry)
                dasValues.Tables.Clear()

                da2.Fill(dasValues, "Values")
                Dim dt2 As DataTable = dasValues.Tables("Values")

                For x = 0 To (dasValues.Tables("Values").Rows.Count - 1)
                    trvFilter.Nodes(f.ColumnName).Nodes.Add(dt2.Rows(x)(f.ColumnName).ToString)
                Next
            Next

            MySQLConn.Close()

【讨论】:

    【解决方案2】:

    我认为你不能通过一个查询来做到这一点。一些伪代码...

    'get empty recordset, just to get all the field names
    query = "SELECT * FROM mytable WHERE 1=2"
    rs = conn.open(query)
    'loop over the fields and add them to the treeview while storing a reference
    'of the created node in variable n
    foreach f in rs.fields
      set n = treeview.addnode(f.name)
      'for the created node get the unique values occuring in that column
      query = "SELECT DISTINCT " & f.name & " FROM mytable ORDER BY " & f.name
      rs2 = conn.open(query)
      'loop over the found values
      while not rs2.EOF
        'add each value to the treeview as a child of node n
        treeview.addnode(rs2.fields(f.name), n)
        rs2.MoveNext
      loop
    next f
    

    【讨论】:

    • 首先 Roebie,对于误导性的标签,我很抱歉 - 我会更正。其次,感谢您的回复,它肯定让我在查询方面走上了正轨。但是,我不确定我是否正确编码,因为我仍然遇到问题。我正在使用查询但存储到 DataTable 中。我无法弄清楚您如何使用 rs.fields,因为它对我无效。我正在使用我的数据集中的 rs.columnnames。
    • 更新 我已更改我的代码以使用使用 ADODB 连接的记录集,但它仍然无法识别 f.name。此外,如果我已经使用 MySQL 连接到数据库,则尝试使用 ADODB 建立另一个连接时会出错。
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多