无限级treeview设计
数据库设计
aspx页面如下
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无限级树</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server" ImageSet="BulletedList3" ShowLines="True">
</asp:TreeView>
</div>
</form>
</body>
</html>
代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无限级树</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server" ImageSet="BulletedList3" ShowLines="True">
</asp:TreeView>
</div>
</form>
</body>
</html>
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.buildTree();
}
}
/// <summary>
/// 创建树
/// </summary>
private void buildTree()
{
DataSet ds = ExecuteDataSet("select * from treetest");
//建立关系
ds.Relations.Add("SortRelation", ds.Tables[0].Columns["treeid"], ds.Tables[0].Columns["treeparentid"]);
//遍历每行并根据数据行关系生成树
foreach (DataRow dbRow in ds.Tables[0].Rows)
{
if (dbRow.IsNull("treeparentid"))
{
string s = dbRow["treename"].ToString();
TreeNode tn = new TreeNode(s);
tn.NavigateUrl = "#";
this.TreeView1.Nodes.Add(tn);
PopulateSubTree(dbRow, tn);
}
}
}
/// <summary>
/// 遍历子类
/// </summary>
/// <param name="dbRow">遍历的Row</param>
private void PopulateSubTree(DataRow dbRow, TreeNode tn)
{
foreach (DataRow childRow in dbRow.GetChildRows("SortRelation"))
{
string s = "";
s = childRow["treename"].ToString();
TreeNode tn2=new TreeNode(s);
tn.ChildNodes.Add(tn2);
PopulateSubTree(childRow, tn2);
}
}
#region 返回dataset对象
/// <summary>
/// 返回dataset对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns></returns>
public DataSet ExecuteDataSet(string sql)
{
SqlConnection con = new SqlConnection("server=.;database=treeviewtest;uid=sa;pwd=;");
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter(sql, con);
sda.Fill(ds);
return ds;
}
#endregion
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.buildTree();
}
}
/// <summary>
/// 创建树
/// </summary>
private void buildTree()
{
DataSet ds = ExecuteDataSet("select * from treetest");
//建立关系
ds.Relations.Add("SortRelation", ds.Tables[0].Columns["treeid"], ds.Tables[0].Columns["treeparentid"]);
//遍历每行并根据数据行关系生成树
foreach (DataRow dbRow in ds.Tables[0].Rows)
{
if (dbRow.IsNull("treeparentid"))
{
string s = dbRow["treename"].ToString();
TreeNode tn = new TreeNode(s);
tn.NavigateUrl = "#";
this.TreeView1.Nodes.Add(tn);
PopulateSubTree(dbRow, tn);
}
}
}
/// <summary>
/// 遍历子类
/// </summary>
/// <param name="dbRow">遍历的Row</param>
private void PopulateSubTree(DataRow dbRow, TreeNode tn)
{
foreach (DataRow childRow in dbRow.GetChildRows("SortRelation"))
{
string s = "";
s = childRow["treename"].ToString();
TreeNode tn2=new TreeNode(s);
tn.ChildNodes.Add(tn2);
PopulateSubTree(childRow, tn2);
}
}
#region 返回dataset对象
/// <summary>
/// 返回dataset对象
/// </summary>
/// <param name="sql">sql语句</param>
/// <returns></returns>
public DataSet ExecuteDataSet(string sql)
{
SqlConnection con = new SqlConnection("server=.;database=treeviewtest;uid=sa;pwd=;");
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter(sql, con);
sda.Fill(ds);
return ds;
}
#endregion
}
显示结果