今天一个兄弟问我treeView怎么用.我就自己写了一个小的例子.并加了一些注解 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data; namespace CSTreeView { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //其实这个程序不是很麻烦,只是一个取值顺序的问题.一般来说,我们都是先取父节点,再取子结点. //这样我们可以用一个递归的方法.来完成这个取值的 //第一步我们先把所有的父结点取出来 //第二步我们就是根据每一个父结点的条件去取它的子结点. //因为是递归调用.所以它会按着顺序取,一直到把最后的一个结点取出来. //这个方法的好处在于,简单.但是也会浪费资源.你可以试着在取值的时候,先算一下结点的层数,再取. CreateTreeViewNode(this.treeView1.Nodes, GetDt(), 0); } //这是我做的一个数据源,因为没有用SQL,你可以把你的数据源改一下 public DataTable GetDt() { DataTable dt = new DataTable(); DataColumn dc1 = new DataColumn(); dc1.ColumnName = "City"; dt.Columns.Add(dc1); DataColumn dc2 = new DataColumn(); dc2.ColumnName = "pId"; dc2.DataType = Type.GetType("System.Int32"); dt.Columns.Add(dc2); DataColumn dc3 = new DataColumn(); dc3.ColumnName = "Id"; dc3.DataType = Type.GetType("System.Int32"); dt.Columns.Add(dc3); DataRow dr = dt.NewRow(); dr["pId"] = 0; dr["City"] = "黑龙江"; dr["Id"] = 1; dt.Rows.Add(dr); DataRow dr1 = dt.NewRow(); dr1["pId"] = 0; dr1["City"] = "吉林"; dr1["Id"] = 2; dt.Rows.Add(dr1); DataRow dr2 = dt.NewRow(); dr2["pId"] = 1; dr2["City"] = "哈尔滨"; dr2["Id"] = 3; dt.Rows.Add(dr2); return dt; } /**/ /// <summary> /// 递归查询 /// </summary> /// <param name="nodes">TreeView的节点集合</param> /// <param name="dataSource">数据源</param> /// <param name="pid">上一级行政区划的标识码</param> private void CreateTreeViewNode(TreeNodeCollection nodes, DataTable dataSource, int pId) { string filter; filter = string.Format("pId={0}", pId); //datatable.select这个方法是一个选择的方法,用来从大的数据量中取出你要的条件. DataRow[] drarr = dataSource.Select(filter); TreeNode node; //这里采用一上循环来取值. foreach (DataRow dr in drarr) { node = new TreeNode(); node.Text = (string)dr["City"]; node.Tag = (int)dr["Id"]; nodes.Add(node); CreateTreeViewNode(node.Nodes, dataSource, (int)node.Tag); } } } }