C#动态生成树型结构的Web程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#动态生成树型结构的Web程序设计许多应用软件的程序设计,我们都希望能像Windows资源管理器那样将其驱动器和其下的文件及文件夹按照层次结构来安排。在C/S条件下这些很容易实现,那么在B/S的Web 方式下,我们实现起来就不是特别容易。针对这个问题,在2002年,Microsoft发布了四种 Web控件,用于为使用Microsoft Internet Explorer的Web访问者提供更好的体验。这些Web控件称为Internet Explorer Web控件,也简称为IE Web控件,其中就包含了TreeView Web控件,它就为我们提供了一种按层次结构显示信息的方式。TreeView控件包含了称做“节点”(node)的一些条目的一个列表。每一个节点都可以有自己的节点集合,从而提供了一种更深层的数据定义。每个节点都可以被折叠起来,从而允许访问者在一个TreeView控件中查找,只看他所感兴趣的那一级的数据。就像Windows的资源管理器一样。只不过在使用前要安装IE Web Controls,并配置好运行环境后才能使用,使用Visual Studio .NET,则静态指定TreeView结构就像填写几份表格一样简单。
虽然使用Visual Studio .NET 将静态TreeNote 添加到TreeView 的过程非常简单,但通常需要将内容动态地添加到TreeView 中。例如,您将目录树信息存储到了数据库中,或是正在设计一个资源管理器风格的Web 应用程序(在此应用程序中,用户可以浏览Web
服务器的文件系统),这时您可能需要根据服务器的文件夹和文件来动态填充TreeNote。本文就是使用C#.net语言通过编程方式,配合Oracle数据库实现一种动态的效果,达到动态的将TreeNote 添加到TreeView 的目的。
1、设计思路和方法
该程序设计思路和方法是:通过编程方式将TreeNote 添加到TreeView 中。要将新的TreeNote 添加到现有的TreeNote 中,只需要使用Nodes 属性的Add() 方法。方法是使用C# 代码将创建两个TreeNote,并将第二个TreeNote 添加为第一个TreeNote 的子节点。然后,将第一个子节点添加到TreeView 的根节点中。
2、开发实例及程序源码
2.1、使用前数据库和IE Web控件的准备工作
1)假如我们要建立如下图的数型结构
图1
图1说明:器材管理、工地信息、公共信息是根节点,其余是子节点。
2)在oracle数据库中建立如下图表的数据库表及字段
图2
图2说明:在数据库中设计字段时将菜单等级确定下来,用流水号来表示唯一性。
图3
图3说明:器材管理根节点的子节点,所属主单序号001表明它要生成在器材管理之下。
图4
图4说明:工地信息根节点的子节点,所属主单序号002表明它要生成在工地信息之下。
图5
图5说明:公共信息根节点的子节点,所属主单序号005表明它要生成在公共信息之下。
3)IE Web控件的准备工作
IE Web 控件可以在安装了.NET Framework 版本 1.0 或1.1 的Web 服务器上使用,在内含代码的类中使用IE Web 控件,首先需要右击Reference(引用),然后选择Add Reference(添加引用),将引用添加到Microsoft.Web.UI.WebControls.dll 程序集中。然后,在内含代码的类中,如果使用的是C# ,则添加usingMicrosoft.Web.UI.WebControls;
2.2、界面和程序设计
1)上传设计
1.1)Web界面如下:
图6
图6说明:在界面上对应设置控件TreeView1。
1.2)动态生成TreeView源代码
string str = "SELECT Menu_name,menu_addr,sn from docmodulemanager where upper_id = '" + dr["Menu_id"].ToString() +
"' and sn in ("+menu_sn.Substring(0,menu_sn.Length-1).ToString()+")" +"order by menu_id,child_id";
OracleDataAdapter objAdapterNode = new OracleDataAdapter(str,objConn); DataSet dsNode = new DataSet();
dsNode.Clear ();
objAdapterNode.Fill(dsNode,"tempNode");
DataTable dtNode = dsNode.Tables["tempNode"];
//建立子节点,遍历。
foreach(DataRow drNode in dtNode.Rows)
{
TreeNode Node = new TreeNode();
Node.Text = drNode["Menu_name"].ToString();
Node.Target = "mainbottom";
string Path = drNode["menu_addr"].ToString();
int menusn = Convert.ToInt32(drNode["sn"].ToString());
Node.NavigateUrl = "Transfer.aspx"+"?menu_addr="+ Path;
Root.Nodes.Add(Node);//建立子节点
}
}
}
catch