C#TreeView连接SQL数据库(可实现无限节点)

来源:互联网 发布:冰毒在淘宝上叫什么 编辑:程序博客网 时间:2024/05/22 12:40

转自:http://hi.baidu.com/wenjunlin/item/031ce251effa16a8adc85716

学习编程的秘诀是:编程,编程,再编程!

2010-03-12 13:25

TreeView连接SQL数据库(可实现无限节点)




表如上所示,可用一张表实现
效果如下:




CS code
--------------------------------------------------
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//判断页面提交类型,如果不是回调则调用bandroot方法
if (!Page.IsPostBack)
{
bandroot();
}
}



public DataTable getFather()
{
#region 获取父节点

string cnnstr = ConfigurationManager.ConnectionStrings["win2009ConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection();
conn.ConnectionString = cnnstr;
try
{
conn.Open();
}
catch (Exception e)
{
throw new Exception(e.Message, e);
}
DataSet ds = new DataSet();
string sqlstr="select id,bbs_sort1_name from Bbs_sort1 ";
SqlDataAdapter sda = new SqlDataAdapter(sqlstr, conn);
try
{
sda.Fill(ds);
}
catch (Exception err)
{
throw new Exception(err.Message, err);
}
conn.Close();
conn.Dispose();
return ds.Tables[0];
#endregion
}




public DataTable getChild(string N)
{
#region 获取子节点

string cnnstr = ConfigurationManager.ConnectionStrings["win2009ConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection();
conn.ConnectionString = cnnstr;
try
{
conn.Open();
}
catch (Exception e)
{
throw new Exception(e.Message, e);
}
DataSet ds = new DataSet();
string sqlstr = "select id,bbs_sort2_name from Bbs_sort2 where fid="+N;
SqlDataAdapter sda = new SqlDataAdapter(sqlstr, conn);
try
{
sda.Fill(ds);
}
catch (Exception err)
{
throw new Exception(err.Message, err);
}
conn.Close();
conn.Dispose();
return ds.Tables[0];
#endregion
}


public void bandroot()
{
//绑定根结点
//根结点的父结点为0
DataTable dt=getFather();
//创建新的结点
TreeNode mynode=new TreeNode();
//遍历所有根结点
for (int i=0;i<=dt.Rows.Count-1;i++)
{
//设置新的结点
mynode = new TreeNode(dt.Rows[i]["bbs_sort1_name"].ToString());
//将新结点追加到treeview控件结点集合中
TreeView1.Nodes.Add(mynode);
bandtreeviewnode(mynode,dt.Rows[i]["id"].ToString());
}
}

public void bandtreeviewnode(TreeNode mynode,string nodeid)
{
//该方法为递归方法

//遍历指定结点的所有子结点
DataTable dt=getChild(nodeid);
//创建新的结点
TreeNode mynode1=new TreeNode();
for (int i=0;i<=dt.Rows.Count-1;i++)
{
mynode1 = new TreeNode(dt.Rows[i]["bbs_sort2_name"].ToString());
mynode.ChildNodes.Add(mynode1);
mynode1.NavigateUrl = "http://baidu.com?id=" + dt.Rows[i]["id"].ToString();
//bandtreeviewnode(mynode1,dt.Rows[i]["id"].ToString());//如果要无限分级则去掉注释
}

}

}





------------------下面是二级结点绑定的实例-----------------------------

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
namespace webworks.forum
{
public partial class left2 : System.Web.UI.Page
{
public int familyid, states;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
getMenu();
}
}



public void getMenu()
{
DataTable dt = BLL.BLL_Fmaily_sort.Get_father_node().Tables[0];
TreeNode tn = new TreeNode();
for (int i = 0; i <= dt.Rows.Count-1; i++)
{
tn = new TreeNode(dt.Rows[i]["bbs_sort1_name"].ToString());
tvLeftMenu.Nodes.Add(tn);//添加父节点
getChildNode(tn, dt.Rows[i]["id"].ToString());
tn.NavigateUrl = "bbs_sort.aspx?sid=" + dt.Rows[i]["id"].ToString();
}
}

public void getChildNode(TreeNode firstNode, string id)
{
DataTable dtt = BLL.BLL_Fmaily_sort.Get_child_node(id).Tables[0];
TreeNode tn1 = new TreeNode();
for (int i = 0; i <=dtt.Rows.Count-1; i++)
{
tn1 = new TreeNode(dtt.Rows[i]["bbs_sort2_name"].ToString());
firstNode.ChildNodes.Add(tn1);
//tn1.Value = dtt.Rows[i]["id"].ToString();设置子节点的选中值,这里可以不用,可用在SelectedNodeChanged事件中
tn1.NavigateUrl="bbs_list.aspx?slid="+dtt.Rows[i]["id"].ToString();

}

}
}

}

 


0 0