ASP.NET的TreeView控件使用

ASP.NET的TreeView控件使⽤
⼀、定义
1TreeView
TreeView 为⼀种⽤树形来组织数据的⽅式。例如我们经常看到的⽹页的菜单,有⼀级菜单,⼆级菜单,甚⾄还会有三级菜单。可以简单的把这些菜单看成⼀个树,每⼀个链接都是树的⼀个节点。。包含其他节点的节点称为“⽗节点”。包含在其他节点中的节点称
为“⼦节点”。没有任何⼦节点的节点称为“叶节点”。不被任何其他节点包含并且是所有其他节点的上级节点的节点称
为“根节点”。⼀个节点可以同时是⽗节点和⼦节点,但是不能同时为根节点、⽗节点和叶节点。节点为根节点、⽗节点还是叶节点决定着节点的⼏种可视化属性和⾏为属性。
《转⾃MSDN》
2. T r e e Nod e
T r e e Nod e 对象由以下四个⽤户界⾯ (UI) 元素组成,可以⾃定义或隐藏这些元素:
可以通过设置 T T r e e Vie w 类的 、 和  属性,指定可展开、可折叠和不可展开的节点的⾃定义图像。通过
将 T T r e e Vie w 类的  属性设置为 f f als e,甚⾄可以完全隐藏展开节点的指⽰图标。
ShowC he ckB ox e s 属性设置
若要在节点旁显⽰复选框,请设置 T T r e e Vie w 类的  属性。如果 ShowC
为 T T r e e Nod e T yp e.Nod e 以外的⼀个值,将在指定的节点类型旁显⽰复选框。通过设置节点的  属性,可以有选择地重写个别节点的复选框。如果显⽰复选框,可使⽤  属性确定复选框是否被选中
通过设置  属性可以在节点中显⽰图像。此图像显⽰在节点⽂本旁。
T r e e Vie w 控件中的节点⽂本可以处于两种模式之⼀:选择模式或导航模式。默认情况下,会有⼀个节点处于选定状态。若要使⼀个节点处于导航模式,请将该节点的  属性值设置为空字符串 ("") 以外的值。若要使节点处于选择模式,Nav ig ate Ur l 属性设置为空字符串。
请将节点的 Nav
默认情况下,单击处于选择模式的节点会将页⾯回发到服务器并引发  事件。也可以选择设置节点Se le ctA ction 属性,指定引发其他事件。有关更多信息,请参见 。若要确定哪个节点在被单击时处于选择模式,请的 Se
使⽤ T T r e e Vie w 控件的  属性。
当节点处于导航模式时,禁⽤该节点的所有选择事件。单击处于导航模式的节点时,⽤户将被定向到指定的 URL。可以选择设置  属性以指定⽤来显⽰链接内容的窗⼝或框架。
T r e e Nod e 类包含⼀些⽤于存储节点状态的属性。可使⽤  属性确定节点是否被选定。若要确定节点是否已展开,请使⽤  属性。 属性⽤于确定节点是否绑定到数据。当节点绑定到数据时,可以使⽤  属性访问基础数据项。
此类提供了⼀些属性,有助于确定⼀个节点相对于树中其他节点的位置。使⽤  属性确定节点的深度。
使Value Path 属性可以获得从当前节点到其根节点的分隔节点列表。若要确定节点的⽗节点,请使⽤  属性。使⽤  集合⽤ Value
访问⼦节点。
有时,静态地预定义树结构并不可⾏,因为有时数据⼤⼩或⾃定义内容依⽤户输⼊⽽定。因此,T T r e e Vie w 控件⽀持动态节点填充。在运⾏阶段,可以在展开节点时填充该节点。有关动态节点填充的更多信息,请参见 属性。
有关 T T r e e Nod e 的实例的初始属性值列表,请参见  构造函数。
3. T r e e Nod e C olle ction
T r e e Nod e C olle ction 类⽤于存储和管理 T T r e e Vie w 控件中的 T T r e e Nod e 对象的集合。T T r e e Vie w 控件在其两个属性中使⽤ T T r e e Nod e C olle ction 类。在  属性中存储其根节点,在  属性中存储其选定的节
点。T T r e e Nod e C olle ction 集合也⽤于  属性来存储⼦节点(如果有的话)。
T r e e Nod e C olle ction 类⽀持多种访问集合中的项的⽅法:
可以通过添加和移除 T T r e e Nod e 对象以编程⽅式管理 T T r e e Nod e C olle ction。若要在集合中添加节点,请使⽤  或  ⽅法。若要从集合中移除节点,请使⽤ 、 或  ⽅法。
例如树形图---->
⼆、⽤法
例⼦:包含三个部分:⼀、⽹页前端(WebForm1.aspx))⼆、fig的配置(数据库的连接)三、数据库处理层(DBhelper.cs)四、xml⽂件(l
效果:
实现:
⼀、⽹页前端(包含⼀个TreeView,⼀个XmlDataSource,两个LinkbButton(绑定删除与添加事件),
三个label,两个select控件,⼀个TextBox)
实现:
1、WebForm1.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication4.WebForm1" %> <!DOCTYPE html>
<html xmlns="/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="XmlDataSource1" Width="193px">
<DataBindings>
<asp:TreeNodeBinding DataMember="Area" ShowCheckBox="True" TextField="name" ValueField="value" />
<asp:TreeNodeBinding DataMember="Province" ShowCheckBox="True" TextField="name" ValueField="value" />
<asp:TreeNodeBinding DataMember="City" ShowCheckBox="True" TextField="name" ValueField="value" />
</DataBindings>
</asp:TreeView>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_l"></asp:XmlDataSource>
<asp:Label ID="Label2" runat="server" Text="区域名"></asp:Label>;
<asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
<asp:Label ID="Label1" runat="server" Text="上级"></asp:Label>;
<select id="se" runat="server">
<option value="0">
请选择
</option>
</select>
<asp:Label ID="Label3" runat="server" Text="级别"></asp:Label>
<select id="se1" runat="server">
<option value="0">
请选择
</option>
<option value="1">
省级
</option>
<option value="2">
市级
</option>
</select>
<br />
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="onclick_insert">添加</asp:LinkButton>
<br />
<asp:LinkButton ID="LinkButton2" runat="server" OnClick="onclick_delete">删除</asp:LinkButton>
</form>
</body>
</html>
⼆、WebForm1.aspx.cs
using System;
using System.Collections.Generic;
小不点奇迹using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Web.Security;
using WebApplication4.DAL;
using WebApplication4.DAL;
using System.Xml;
namespace WebApplication4
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{//页⾯加载刷新时都应该重新绑定与重写XMl⽂件
databindselect();
AddXML();
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
}
public void databindselect()//将数据库的数据绑定到select(ID=se)中
空气污染的调查报告
{
string sql = "select * from Area";
DataSet ds = DBhelper.QuerySql(sql);
foreach (DataRow dr in ds.Tables[0].Rows)
{
this.se.Items.Add(new ListItem(dr["name"].ToString(),dr["ID"].ToString()));//value=dr["name"],ID=dr["ID"]
}
}
public void onclick_insert(object sender, EventArgs e)//插⼊事件的实现
{
string name = _name.Text.ToString().Trim();//获取TextBox的值
int id = Convert.ToInt32(this.se.Value);//获取select(ID=se) 控件被选中的值
int level = Convert.ToInt32(this.se1.Value); //获取select(ID=se1)控件被选中的值
string selectsql="select * from Area where Name='"+name+"'";
DataSet ds = DBhelper.QuerySql(selectsql);//判断所要插⼊的数据是否存在于数据库⾥⾯
int row = ds.Tables[0].Rows.Count;
if (row == 0)//如果不存在,就插⼊到数据库中
{
string sql = "insert into Area(Name,parentID,level) values('" + name + "'," + id + "," + level + ")";
DBhelper.QuerySql(sql);//将数据插⼊数据库中
AddXML();//重写XML⽂件以便重新绑定
}
databindselect();//重新绑定到select双膝之间1984
this.XmlDataSource1.DataFile = "~/App_l";//XMLDataSource1控件的⽂件配置
TreeView1.DataBind();//TreeView的绑定
}
public void onclick_delete(object sender, EventArgs e)
{  //上级的勾选的⼦集的去除(就是那个select 的下拉列表)--->删除数据库中的⼦集结果--->删除选中的节点的数据库数据-->删除select控件的节点
TreeNodeCollection tr = TreeView1.CheckedNodes;// TreeNodeCollection 类⽤于存储和管理 TreeView 控件中的 TreeNode 对象的集合。此语句是出被选            if (tr.Count > 0)//如果有被选中的节点
{
for (int i = 0; i < tr.Count; i++)//遍历节点,总数为被选中的节点的数量
{
string selectchildsql = "select * from Area where parentID=" + Convert.ToInt32(tr[i].Value);//sql语句--出此节点的⼦集
DataSet dsc = DBhelper.QuerySql(selectchildsql);//以数据集的形式显⽰⼦集
//通过for循环删除select 中显⽰的选中的元素的⼦集
foreach (DataRow dr in dsc.Tables[0].Rows)
{
this.se.Items.Remove(new ListItem(dr["Name"].ToString(), dr["ID"].ToString()));
}
string childnodesql = "delete from Area where parentID=" + Convert.ToInt32(tr[i].Value);
DBhelper.QuerySql(childnodesql);//删除被选中的节点的数据库中的⼦集
string selectsql = "select  * from Area where ID=" + Convert.ToInt32(tr[i].Value);
DataSet ds = DBhelper.QuerySql(selectsql);//删除数据库中被选中的节点
foreach (DataRow dr in ds.Tables[0].Rows)
{
{
this.se.Items.Remove(new ListItem(dr["Name"].ToString(), dr["ID"].ToString()));//删除被选中的节点在select控件的值
}
string sql = "delete from Area where ID=" + Convert.ToInt32(tr[i].Value);
DBhelper.Handlesql(sql);
AddXML();//重写XML⽂件
}
}
XmlDataSource1.DataFile = "~/App_l";//数据源配置⽂件
TreeView1.DataBind();//重新绑定到控件
}叶绿素荧光参数
XmlTextWriter tw = null;
public void AddXML()
{
DataSet ds = DBhelper.QuerySql("select  * from Area");
string filename = AppDomain.CurrentDomain.BaseDirectory + "App_Data\\l";//到位置
tw = new XmlTextWriter(filename,null);//书写xml的⽂件
tw.Formatting = Formatting.Indented;//额,这个不懂
tw.WriteStartDocument();//开始书写XMl⽂件
WriteXMl(ds.Tables[0]);//写⼊数据集
tw.WriteEndDocument();//结束书写
tw.Flush();
tw.Close();
}
/// <summary>
/// 绑定⼀条数据的代码到xml⽂件中
/// </summary>
/// <param name="dr"></param>
public void WriteOneXML(DataRow dr)//在xml⽂件中写⼊⼀条数据例如<Province></Province>或者<City></City>,通常配合遍历使⽤
{
switch(Convert.ToInt32(dr["level"]))//根据等级判断所要添加的头
哈特曼{
case 0 :
tw.WriteStartElement("Area");
break;
case 1:
tw.WriteStartElement("Province");
break;
case 2:
tw.WriteStartElement("City");
break;
}
脉冲氙灯tw.WriteAttributeString("value",dr["ID"].ToString());
/
/<Area value="##" name="###">
//</Area>
tw.WriteAttributeString("name",dr["Name"].ToString());
}
static int  count=0;//初始化所要循环的条数
public void WriteXMl(DataTable  dt)
{//在遍历⼦节点的时候,遍历完了就会⾃动停⽌。
DataSet ds=DBhelper.QuerySql("select * from Area");
foreach (DataRow dr in dt.Rows)//循环的⼦集的元素
{
if (count != ds.Tables[0].Rows.Count)//这个count是为了遍历所有节点,这个树遍历完了之后才会清零,所以⼀开始要与ds.Table[0].Rows.Count(总数)⽐                {
count++;//写的次数等于所要写的条数
WriteOneXML(dr);
DataTable ddt = Getdata(dr);//遍历节点,搜寻他的所有⼦节点,并写⼊xml⽂件
WriteXMl(ddt);//递归寻字节点
tw.WriteEndElement();

本文发布于:2024-09-22 13:41:00,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/137477.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:节点   属性   数据   确定   选中
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议