如何使用SQL数据库中的所有列和值填充树视图

时间:2013-07-22 08:22:42

标签: mysql sql vb.net treeview

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

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

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

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

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

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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

'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