c#动态生成树型结构的web程式设计_c#应用

2008-02-23 05:42:45来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  许多应用软件的程式设计,我们都希望能像Windows资源管理器那样将其驱动器和其下的文档及文档夹按照层次结构来安排。在C/S条件下这些很容易实现,那么在B/S的Web方式下,我们实现起来就不是特别容易。针对这个问题,在 2002 年,Microsoft? 发布了四种 ASP.NET 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# ,则添加 using Microsoft.Web.UI.WebControls;

  2.2 界面和程式设计

  1) 上传设计

  1.1) Web界面如下

  
  图 6

  图6说明:在界面上对应配置控件TreeView1.

  1.2) 动态生成TreeView源代码

using Microsoft.Web.UI.WebControls;//添加控件的引用

private void GetTreeView()//程式开始
{
 try
 {
  string strSql = "SELECT DISTINCT Menu_id,Menu_name from docmodulemanager where Menu_level = 1 and sn in

  (" All.Substring(0,All.Length-1).ToString() ")";
  OracleDataAdapter
  objAdapter = new OracleDataAdapter(strSql,objConn);
  DataSet ds = new DataSet();
  ds.Clear ();
  objAdapter.Fill(ds,"temp");
  DataTable dt = ds.Tables["temp"];
  TreeView1.Nodes.Clear();
  //建立根节点,遍历。

  foreach(DataRow dr in dt.Rows)
  {
   TreeNode Root = new TreeNode();
   Root.Text = dr["Menu_name"].ToString();
   TreeView1.Nodes.Add(Root);//建立根节点
   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);//建立子节点
  }
 }
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: c#中实现vb中的createobject方法_c#应用

下一篇: 论c#变得越来越臃肿是不可避免的_c#应用