<%@ 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>
<style type="text/css">
<!--
body,td,th {
font-family: 宋体;
font-size: 9pt;
}
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server" Width="100%" />
</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>
<style type="text/css">
<!--
body,td,th {
font-family: 宋体;
font-size: 9pt;
}
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server" Width="100%" />
</div>
</form>
</body>
</html>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TreeViewBind();
}
}
主从表绑定#region 主从表绑定
private void TreeViewBind()
{
DataSet dst = GetTreeViewData();
foreach (DataRow masterRow in dst.Tables["sProBigName"].Rows)
{
TreeNode masterNode = new TreeNode((string)masterRow["sProBigName"]);
TreeView1.Nodes.Add(masterNode);
foreach (DataRow childRow in masterRow.GetChildRows("child"))
{
TreeNode childNode = new TreeNode((string)childRow["sProSmallSortName"]);
masterNode.Expanded = false;
masterNode.ChildNodes.Add(childNode);
}
}
}
private DataSet GetTreeViewData()
{
SqlConnection Conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionSqlServer"].ToString());
SqlDataAdapter BigSort = new SqlDataAdapter("select * from [Yp_ProBigSort]", Conn);
SqlDataAdapter SmallSort = new SqlDataAdapter("select * from [Yp_ProSmallSort]", Conn);
DataSet ds = new DataSet();
BigSort.Fill(ds, "sProBigName");
SmallSort.Fill(ds, "sProSmallSortName");
ds.Relations.Add("child", ds.Tables["sProBigName"].Columns["iProBigSort_ID"], ds.Tables["sProSmallSortName"].Columns["iProBigSortID"]);
return ds;
}
#endregion
}
using System.Data;
using System.Configuration;
using System.Collections;
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.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TreeViewBind();
}
}
主从表绑定#region 主从表绑定
private void TreeViewBind()
{
DataSet dst = GetTreeViewData();
foreach (DataRow masterRow in dst.Tables["sProBigName"].Rows)
{
TreeNode masterNode = new TreeNode((string)masterRow["sProBigName"]);
TreeView1.Nodes.Add(masterNode);
foreach (DataRow childRow in masterRow.GetChildRows("child"))
{
TreeNode childNode = new TreeNode((string)childRow["sProSmallSortName"]);
masterNode.Expanded = false;
masterNode.ChildNodes.Add(childNode);
}
}
}
private DataSet GetTreeViewData()
{
SqlConnection Conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionSqlServer"].ToString());
SqlDataAdapter BigSort = new SqlDataAdapter("select * from [Yp_ProBigSort]", Conn);
SqlDataAdapter SmallSort = new SqlDataAdapter("select * from [Yp_ProSmallSort]", Conn);
DataSet ds = new DataSet();
BigSort.Fill(ds, "sProBigName");
SmallSort.Fill(ds, "sProSmallSortName");
ds.Relations.Add("child", ds.Tables["sProBigName"].Columns["iProBigSort_ID"], ds.Tables["sProSmallSortName"].Columns["iProBigSortID"]);
return ds;
}
#endregion
}
Yp_ProBigSort表
数据结构:
iProBigSort_ID(父表主键)
sProBigName(根节点名称)
iProBigSort_ID sProBigName
1 普通内科
2 普通外科
3 妇产科
Yp_ProSmallSort表
iProSmallSort_ID(子表主键)
iProBigSortID(父表主键)
sProSmallSortName(子节点名称)
iProSmallSort_ID iProBigSortID sProSmallSortName
1 1 感冒
2 1 发烧
3 2 普通外科1
4 2 普通外科2
5 3 妇产科1
6 3 妇产科2
-----------------------------------------------
TreeView的数据绑定资源默认的有两类:XML和SiteMap
这两类资源的共同特点就是资源文件是固定保存在项目中的,这一类方便我们使用来做菜单,所以TreeView归类在导航控件中.这里的绑定我不做详细的叙述,VS2005中可以很方便的使用.
TreeView还有一种用法是用来显示数据信息及其数据信息的层级信息,这里上面的两类就不能满足我们的需要,我们需要的是与数据库资源连接,而形成动态的TreeView.同样我们还可以在数据库中使用树的双亲表示法把树描述出来,例如
ID | Name | ParentID |
1 | 1 | 0 |
2 | 2 | 0 |
3 | 3 | 0 |
4 | 4 | 1 |
5 | 5 | 1 |
6 | 6 | 2 |
7 | 7 | 2 |
8 | 8 | 3 |
9 | 9 | 7 |
使用这种的数据库方法可以很方便的绑定到TreeView中,形成一个无限动态树.(当然还有其他的数据库的方法)
private void InitTree(TreeNodeCollection Nds, string ParentId)
{
DataView dvroles = new DataView();
TreeNode tmpNd;
string strRID;
dvroles.Table = csa.CreateDataSet("DS1").Tables["T1"];//DataSet的DataTable表中
dvroles.RowFilter = " ParentID=" + ParentId;
foreach (DataRowView drvrole in dvroles)
{
strRID = drvrole["ID"].ToString();
tmpNd = new TreeNode();
tmpNd.Value = drvrole["ID"].ToString();
tmpNd.Text = drvrole["Name"].ToString();
tmpNd.Target = drvrole["ParenID"].ToString();
Nds.Add(tmpNd);
InitRoleTree(tmpNd.ChildNodes, strRID);
}
}
{
DataView dvroles = new DataView();
TreeNode tmpNd;
string strRID;
dvroles.Table = csa.CreateDataSet("DS1").Tables["T1"];//DataSet的DataTable表中
dvroles.RowFilter = " ParentID=" + ParentId;
foreach (DataRowView drvrole in dvroles)
{
strRID = drvrole["ID"].ToString();
tmpNd = new TreeNode();
tmpNd.Value = drvrole["ID"].ToString();
tmpNd.Text = drvrole["Name"].ToString();
tmpNd.Target = drvrole["ParenID"].ToString();
Nds.Add(tmpNd);
InitRoleTree(tmpNd.ChildNodes, strRID);
}
}
在这里我们可以进行控制的树的信息有
Value | 节点的ID |
Text | 节点的显示信息 |
Target | 关联网页内容的目标窗口,如果没有关联网页,也可以做一个数据容器 |
ToolTip | 节点文本提示工具 |
ImageUrl | 节点图片 |
ImageToolTip | 节点图片文本提示工具 |