TreeView树形控件递归绑定数据库里的数据。
第一步:建立sqlserver2005数据库表数据city,字段名分别为Id,Name,Pid
第二步:建立Form窗体后,拖TreeView控件后,填写后台代码
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 treeView
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
BindTree("0");
}
#region 绑定父节点(第一级)
private void BindTree(string pid)
{
DataSet ds = GetData(pid);
if (ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
TreeNode node = new TreeNode();
node.Text = ds.Tables[0].Rows[i]["Name"].ToString();
node.Tag = ds.Tables[0].Rows[i]["ID"].ToString();
this.treeView1.Nodes.Add(node);
BindNode(node);
}
}
}
#endregion
#region 绑定子节点
private void BindNode(TreeNode nd)
{
DataSet ds = GetData(Convert.ToString(nd.Tag));
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
TreeNode node = new TreeNode();
node.Text = ds.Tables[0].Rows[i]["Name"].ToString();
node.Tag = ds.Tables[0].Rows[i]["ID"].ToString();
nd.Nodes.Add(node);
BindNode(node);
}
}
#endregion
#region 将父级下的子级查询出来,并返回一张虚拟表
private DataSet GetData(string pid)
{
string connstr = "server=.;uid=sa;pwd=sa;database=test;";
SqlConnection con = new SqlConnection(connstr);
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from city where Pid=" + pid, con);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
#endregion
}
}
OK,完成!此代码如果用在Asp.Net窗体中,node.tag要改为node.value获取节点值,其它代码不变,直接Copy可以运行!