1. 程式人生 > 資料庫 >c#呼叫資料庫生成樹形節點時節點重複的問題

c#呼叫資料庫生成樹形節點時節點重複的問題

c#呼叫資料庫生成樹形節點時節點重複的問題


小白一個,最近跟著老師做專案的時候需要從資料庫呼叫省市資料生成樹狀選單,網上大多是幾點需要手動輸入的,

效果圖

在這裡插入圖片描述

程式碼段

using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Data.Odbc;
using System.Configuration;
using System.IO;

namespace Treeview
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 開啟視窗預設載入
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            string conStr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;   //連線資料庫,using引入configuration,解決方案管理器新增引用
            OdbcConnection conn = new OdbcConnection(conStr);
            conn.Open();
            string mysql = "SELECT Addr_Prov, Addr_City FROM Basic_Info GROUP BY Addr_City";
            OdbcCommand cmd = new OdbcCommand(mysql, conn);
            OdbcDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                int i = 0;
                string Addr_Prov = reader[0].ToString();
                string Addr_City = reader[1].ToString();
                TreeNode Province = new TreeNode(Addr_Prov);                             //新建節點名稱為Province,存放Addr_Prov資料
                TreeNode City = new TreeNode(Addr_City);                                  //新建節點名稱為City,存放Addr_City資料

                //判斷要加的父節點是否存在,如存在,將子節點加到已存在的父節點中,若不存在則新加一個父節點,並將子節點加入
                //若果沒有節點,先新增一個
                if (AddrTreeView.Nodes.Count == 0)
                {
                    AddrTreeView.Nodes.Add(Province);                                   //將Province加為父節點
                    Province.Nodes.Add(City);                                           //將City加入到Province作為其子節點
                }
                else
                {
                    //從第一個節點開始遍歷,如果第(i+1)個節點和當前的Addr_Prov一樣,則次節點已經存在,往此節點新增子節點,跳出while迴圈
                    while (i < AddrTreeView.Nodes.Count)
                    {
                        string prov = AddrTreeView.Nodes[i].Text.ToString();
                        if (prov == Addr_Prov)
                        {
                            AddrTreeView.Nodes[i].Nodes.Add(City);
                            break;
                        }
                        i++;
                    }
                    //判斷迴圈有沒有進行到最後,如果有,說明沒有已存在和Addr_Prov一樣的節點(有的話會提前跳出迴圈,i停留在跳出迴圈時的值,加入父節點和對應的子節點
                    if (i == AddrTreeView.Nodes.Count)
                    {
                        AddrTreeView.Nodes.Add(Province);                           //將Province加為父節點                                                                                 
                        Province.Nodes.Add(City);
                    }
                }
            }
            reader.Close();
            conn.Close();
        }
    }
}

注意

資料庫查詢語句,

string mysql = "SELECT Addr_Prov, Addr_City FROM Basic_Info GROUP BY Addr_City";

查出結果是
在這裡插入圖片描述