asp.net 2.0中TREEVIEW中动态增加结点

asp.net|treeview|动态

在asp.net 2.0中,要动态从数据库中取出内容,动态增加结点,其实不难,比如以SQL SERVER 2000的PUBS数据库为例子,要以树型列表方式,取出作者,做为根结点,然后取出每位作者写过什么书,作为子结点,可以这样

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

<!DOCTYPE htmlPUBLIC"-//W3C//DTD XHTML 1.1//EN""http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Dynamic Population of the TreeView Control</title>
<script runat=server>
void Node_Populate(object sender,
System.Web.UI.WebControls.TreeNodeEventArgs e)
{
if(e.Node.ChildNodes.Count == 0)
{
switch( e.Node.Depth )
{
case 0:
FillAuthors(e.Node);
break;
case 1:
FillTitlesForAuthors(e.Node);
break;
}
}
}

void FillAuthors(TreeNode node)
{
string connString = System.Configuration.ConfigurationSettings.
ConnectionStrings["NorthwindConnnection"].ConnectionString;
SqlConnection connection = new SqlConnection(connString);
SqlCommand command = new SqlCommand("Select * From
authors",connection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet authors = new DataSet();
adapter.Fill(authors);
if (authors.Tables.Count > 0)
{
foreach (DataRow row in authors.Tables[0].Rows)
{
TreeNode newNode = new
TreeNode(row["au_fname"].ToString() + " " +
row["au_lname"].ToString(),
row["au_id"].ToString());
newNode.PopulateOnDemand = true;
newNode.SelectAction = TreeNodeSelectAction.Expand;
node.ChildNodes.Add(newNode);
}
}
}

void FillTitlesForAuthors(TreeNode node)
{
string authorID = node.Value;
string connString = System.Configuration.ConfigurationSettings.
ConnectionStrings["NorthwindConnnection"].ConnectionString;
SqlConnection connection = new SqlConnection(connString);
SqlCommand command = new SqlCommand("Select T.title,
T.title_id From titles T" +
" Inner Join titleauthor TA on
T.title_id = TA.title_id " +
" Where TA.au_id = '" + authorID + "'", connection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet titlesForAuthors = new DataSet();
adapter.Fill(titlesForAuthors);
if (titlesForAuthors.Tables.Count > 0)
{
foreach (DataRow row in titlesForAuthors.Tables[0].Rows)
{
TreeNode newNode = new TreeNode(
row["title"].ToString(), row["title_id"].ToString());
newNode.PopulateOnDemand = false;
newNode.SelectAction = TreeNodeSelectAction.None;
node.ChildNodes.Add(newNode);
}
}
}

</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeViewRunat="Server" ExpandImageUrl="Images/closed.gif"
CollapseImageUrl="Images/open.gif"
OnTreeNodePopulate="Node_Populate" ID="tvwauthors">
<Nodes>
<asp:TreeNodeText="Authors" PopulateOnDemand=true
Value="0"/>
</Nodes>
</asp:TreeView>
</div>
</form>
</body>
</html>
其中,注意ontreenodepopulate事件,是在展开树的结点时发生的,这里定义了自定义的NODE_POPULATE,在node_populate中,检查当前结点的深度,如果是0,就是根结点,于是就调用FillAuthors过程,取出所有的作者,如果深度是1,则是叶子结点,调用FillTitlesForAuthors过程。其中,要注意它们中的动态建立树结点的过程,如:
TreeNode newNode = new TreeNode(row["au_fname"].ToString() + " " +
row["au_lname"].ToString(),

row["au_id"].ToString());

newNode.PopulateOnDemand = true;

newNode.SelectAction = TreeNodeSelectAction.Expand;

node.ChildNodes.Add(newNode);
其中, popluateondemand属性表明,该结点会动态扩展。

时间: 2024-09-19 09:31:37

asp.net 2.0中TREEVIEW中动态增加结点的相关文章

“ASP.NET 2.0 正式版中无刷新页面的开发”中示例代码与Firefox兼容的解决

asp.net|解决|示例|刷新|无刷新|页面 这几天正着手开始写毕业设计,因为发生了一些事情,所以一直拖到现在才开始.其实我准备做一个ASP.NET 2.0并且使用AJAX的Web项目,于是到博客园到处寻着AJAX的文章,恰好翻到了Leon.Zhou的ASP.NET 2.0 正式版中无刷新页面的开发按照代码示例和讲解做了一个页面,确实不错啊.因为俺平时几乎都用Firefox,所以就顺手测试了一下Firefox下的效果,结果发现点了Button之后没有反应--于是打开Javascript控制台,

asp.net 4.0+ webform程序中集成mvc4_实用技巧

本文为大家分享了asp.net 4.0+ webform程序中集成mvc4的方法,供大家参考,具体内容如下 1.新建packages.config文件,里面加上必要的程序集  <?xml version="1.0" encoding="utf-8"?> <packages> <package id="Microsoft.AspNet.Mvc" version="4.0.20710.0" targe

实现 Asp.Net 2.0的TreeView客户端个性化控制

ASP.NET 2.0 的 TreeView 控件功能虽说强大,但其客户端控制很逊色,本文将讲解 TreeView 的客户端实现原理,并实现两个个性化操作: (1) 节点的全部打开和关闭; TreeNode Expand(or Collapse) all (2) 只打开一个节点(关闭其他兄弟节点). just one node expanded(when a client expand one node all other will collaps) 用记事本打开页面源代码,可以找到一下两个脚本

ASP.NET 2.0 正式版中无刷新页面的开发(示例代码的补充)

asp.net|示例|刷新|无刷新|页面 原文请见Leon.Zhou的:http://pfzhou.cnblogs.com/archive/2006/03/31/363342.html 下载了示例代码,并转换成VB了,AJAX功能测试成功.但遇到些小问题:Demo1很正常.Demo2按Leon原来的写法testAJAX.aspx.vb中Line 22不成功.所以我直接在IDE环境中,修改button3的OnClientClick属性,见testAJAX.asp的Line 52.测试成功.Demo

ASP.NET 2.0发送电子邮件中存在的问题

asp.net|问题 在新发行的ASP.NET 2.0版本中,微软不再建议使用System.Web.Mail命名空间而代之以新的System.Net.Mail命名空间.在这个新库中引入了许多新特征,但是在发送邮件的方式方面也相应地带入了一些小错误. 一. 发送邮件 在详细讨论这些小错误之前,让我们先看一段示例代码(我们假定你已经在文件开始添加了"using System.Net.Mail"): MailMessage msg = new MailMessage();msg.From =

ASP.NET 2.0实现模板中的数据绑定系列

模板化的数据绑定控件为我们在页面上显示数据提供了根本的灵活性.你可能还记得ASP.net v1.x中的几个模板化控件(例如DataList和Repeater控件).ASP.NET 2.0仍然支持这些控件,但在模板中绑定数据的语法已经被简化和改善了.本文将讨论在数据绑定控件模板中绑定数据的多种方法. 数据绑定表达式 ASP.NET 2.0改善了模板中的数据绑定操作,把v1.x中的数据绑定语法DataBinder.Eval(Container.DataItem, fieldname)简化为Eval(

用ASP.NET 2.0在数据库中存储二进制文件

一.引言 在构建数据驱动的应用程序时,经常需要捕获文本和二进制数据.这样的程 序可能需要存储图像,PDF,Word文件或其它二进制数据.能够使用两种方式来 存储这些二进制数据:存储在web服务器的文件系统上并添加一个对数据库中相 应文件的引用:或直接存储在数据库本身. 文本数据,例如字符串,数字,日期,GUID,货币值,等等-在数据库系统中 都有适当的和相应的数据类型定义.例如,在Microsoft SQL Server中,你可以 使用int数据类型来存储一个整数值:而为了存储一个字符串值,你可

用ASP.NET 2.0在Oracle中存取图片(文件)的操作

asp.net|oracle 有时由于某种需要(如安全性)须将图片或文件存放在数据库中,当然一般情况下特别是文件比较大的时候很多人不提倡将文件以二进制的形式存放在数据库中的,现将Oracle中文件的存取整理如下(思路和在SQL Server2000中存取一样,存储时在数据中存放图片或文件的二进制字节流,读出时将数据库中对应字段读取到字节数据,然后输出):       1.在TOAD或SQLPlus中创建一下数据库表. 1CREATE TABLE TEST_TABLE2(3  ID     VAR

asp.net中Treeview数据绑定与动态增加节点示例

TreeView数据绑定 在ASP.NET中如何实现数据库与TreeView控件的数据绑定呢?花些时间自己编写了一个演示程序,包括有Access数据库,你可复制这两个代码做下测试,测试数据库文件后附下载. Left.aspx 代码如下:  代码如下 复制代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Left.aspx.cs" Inherits="Left&qu