将子节点添加到节点列表

本文关键字:节点 列表 添加 子节点 | 更新日期: 2023-09-27 18:36:18

我知道我的标题很模糊,我不知道如何总结。

有一个与MySQL数据库的连接,该数据库从我想在treeView中查看的表中获取一列,并将每行中的数据添加为节点,我想将子节点添加到我添加的节点中,但数据将根据每个节点而变化。

        string myConString = "Server=localHost;Database=fakekeeper;Uid=root;Pwd=**********;";
        string query = "SELECT OSP FROM OSP;";
        MySqlConnection conn = new MySqlConnection(myConString);
        MySqlDataReader reader;
        MySqlCommand cmd = new MySqlCommand(query, conn);
        conn.Open();
        reader = cmd.ExecuteReader();
        TreeNode tables = new TreeNode();
        treeView1.Nodes.Add(tables);
        while (reader.Read())
        {
            tables.Nodes.Add(reader["OSP"].ToString());
        }
        conn.Close();

它在我的数据库中的工作方式是每个产品都有一个 OSP,因为一个 OSP 可以有很多产品,但一个产品只能有一个 OSP,我想在我的树视图中这样,当我双击 OSP 时,它会向我显示与该 OSP 关联的所有产品在树中查看作为节点我不确定我是否可以在我的 while 循环中添加它们,或者我是否需要创建另一个?

将子节点添加到节点列表

我设法通过添加另一个我设法添加到节点的while循环来自己弄清楚:

        string myConString = "Server=localHost;Database=fakekeeper;Uid=root;Pwd=**********;";
        string query = "SELECT OSP FROM OSP;";
        MySqlConnection conn = new MySqlConnection(myConString);
        MySqlDataReader reader;
        MySqlCommand cmd = new MySqlCommand(query, conn);
        conn.Open();
        reader = cmd.ExecuteReader();
        TreeNode tables = new TreeNode();
        treeView1.Nodes.Add(tables);
        while (reader.Read())
        {
            TreeNode alphaNode = new TreeNode(reader["OSP"].ToString());
            tables.Nodes.Add(alphaNode);
            MySqlConnection subNodeConn = new MySqlConnection(myConString);
            string subNodeQuery = string.Format("SELECT product FROM {0};", reader["OSP"].ToString());
            MySqlCommand subNodeCommand = new MySqlCommand(subNodeQuery, subNodeConn);
            MySqlDataReader subNodeReader;
            subNodeConn.Open();
            subNodeReader = subNodeCommand.ExecuteReader();
            while(subNodeReader.Read())
            {
                alphaNode.Nodes.Add(subNodeReader["Product"].ToString());
            }
        }
        conn.Close();

请告诉我是否有更有效的方法可以做到这一点?