您的位置:首页 > Web前端 > Node.js

利用TreeView.TreeNodePopulate 事件为TreeView动态增加节点

2007-09-25 10:52 344 查看
注:TreeView.TreeNodePopulate 事件
在 .NET Framework 2.0 版中是新增的。
若要动态填充某个节点,请首先将该节点的 PopulateOnDemand 属性设置为 true。然后,为以编程方式填充节点的 TreeNodePopulate 事件定义一个事件处理方法。通常的事件处理方法会从数据源中检索节点数据,将该数据放入一个节点结构中,然后将该节点结构添加到正在被填充的节点的 ChildNodes 集合中。通过将 TreeNode 对象添加到父节点的 ChildNodes 集合中,可以创建一个节点结构。

当节点的 PopulateOnDemand 属性设置为 true 时,必须动态填充该节点。不能以声明方式将另一节点嵌套在它的下面;否则将会在页面上出现一个错误!

例子:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">

void PopulateNode(Object sender, TreeNodeEventArgs e)
{

// 判断节点深度

switch(e.Node.Depth)
{
case 0:
// 产生第一层节点

PopulateCategories(e.Node);
break;
case 1:
//产生第二层节点
PopulateProducts(e.Node);
break;
default:
// Do nothing.
break;
}

}

void PopulateCategories(TreeNode node)
{

DataSet ResultSet = RunQuery("Select CategoryID, CategoryName From Categories");

// 建立第二层节点.
if(ResultSet.Tables.Count > 0)
{

//
// 从dataset中取值.
foreach (DataRow row in ResultSet.Tables[0].Rows)
{

// 建立新节点.
TreeNode NewNode = new TreeNode(row["CategoryName"].ToString(), row["CategoryID"].ToString());

// 设置 PopulateOnDemand 属性为true,以便下一层节点动态增加.
NewNode.PopulateOnDemand = true;

// 设置节点选中时展开
NewNode.SelectAction = TreeNodeSelectAction.Expand;

// 加入新节点.
node.ChildNodes.Add(NewNode);

}

}

}

void PopulateProducts(TreeNode node)
{

.
DataSet ResultSet = RunQuery("Select ProductName From Products Where CategoryID=" + node.Value);

if(ResultSet.Tables.Count > 0)
{

foreach (DataRow row in ResultSet.Tables[0].Rows)
{

// 建立新节点.
TreeNode NewNode = new TreeNode(row["ProductName"].ToString());

// 设置 PopulateOnDemand 属性false,关闭动态增加.
NewNode.PopulateOnDemand = false;

// 设置节点选中时什么也不做^-^.
NewNode.SelectAction = TreeNodeSelectAction.None;

// 加入新节点.
node.ChildNodes.Add(NewNode);

}

}

}

DataSet RunQuery(String QueryString)
{

//建立数据库连接

String ConnectionString = "server=localhost;database=NorthWind;Integrated Security=SSPI";

SqlConnection DBConnection = new SqlConnection(ConnectionString);
SqlDataAdapter DBAdapter;
DataSet ResultsDataSet = new DataSet();

try
{

// 建立DataSet.
DBAdapter = new SqlDataAdapter(QueryString, DBConnection);
DBAdapter.Fill(ResultsDataSet);

// 关闭连接.
DBConnection.Close();

}
catch(Exception ex)
{

//
if(DBConnection.State == ConnectionState.Open)
{
DBConnection.Close();
}

Message.Text = "Unable to connect to the database.";

}

return ResultsDataSet;

}

</script>

<html>
<body>
<form runat="server">

<h3>TreeView TreeNodePopulate Example</h3>

<asp:TreeView id="LinksTreeView"
Font-Name= "Arial"
ForeColor="Blue"
EnableClientScript="false"
OnTreeNodePopulate="PopulateNode"
runat="server">

<Nodes>

<asp:TreeNode Text="Inventory"
SelectAction="Expand"
PopulateOnDemand="true"/>

</Nodes>

</asp:TreeView>

<br><br>

<asp:Label id="Message" runat="server"/>

</form>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: