今天看了个小练习,让在一个TreeView上显示全国省市区,通过递归调用可以解决此类问题。代码如下:
关于数据库建库脚本见附件,其中只用了前三个字段。提醒一下大家:第三个字段的含义是他的父节点的id是几。
但是感觉递归调用的效率并不高,如果可以找到其他方法就优先使用其他方法。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace C1
{
public partial class Form1 : Form
{
private List<Info> list = new List<Info>();
public Form1()
{
InitializeComponent();
}
private void btnStart_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=SH\\SQL_SH;Initial Catalog=地区数据;User ID=sunhao;Password=251314");
SqlCommand cmd = new SqlCommand("select ar_id,ar_name,ar_uid from Area", conn);
conn.Open();
SqlDataReader rd = cmd.ExecuteReader();
if (rd.HasRows)
{
while (rd.Read())
{
Info inf = new Info();
inf.Id = rd.GetInt32(0);
inf.Name = rd.GetString(1);
inf.U_id = rd.GetInt32(2);
list.Add(inf);
}
}
AddTreeNodes(0,treeView1.Nodes[0]);
// MessageBox.Show(treeView1.Nodes[0].ToString());
}
//
private void Form1_Load(object sender, EventArgs e)
{
}
public void AddTreeNodes(int id, TreeNode tn)
{
foreach (Info item in list)
{
if (item.U_id == id)
{
TreeNode node = new TreeNode();
node.Text = item.Name;
tn.Nodes.Add(node);
AddTreeNodes(item.Id,node);
}
}
}
}
}