C# Web控件与数据感应之 TreeView 类 续篇

张裕  高级会员 | 2024-6-20 16:12:24 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 213|帖子 213|积分 639

  
目录
关于内置 TreeView
两者的区别
准备数据源
范例运行环境
一些实用方法
获取数据举行呈现
获取所有的结点 
小结


关于内置 TreeView

数据感应也即数据捆绑,是一种动态的,Web控件与数据源之间的交互,在我的前期文章《C# Web控件与数据感应之 TreeView 类》,对于 Microsoft.Web.UI.WebControls.TreeView 已做了详细先容,本文则继承先容 C# 实现  System.Web.UI.WebControls.TreeView 的一些实用方法。
两者的区别

Microsoft.Web.UI.WebControls.TreeView 属于微软的过去时控件,现在则升级为内置的 System.Web.UI.WebControls 集合,System.Web.UI.WebControls.TreeView 也已正式成为内置控件,并且属性方法均有一些变革。
准备数据源

我们在 MS SQL Server 创建 pub_area(区域表),其布局如下表:
序号字段名类型阐明1acodenvarchar(10)区域代码,唯一键2anamenvarchar(50)区域名称3parent_acodenvarchar(10)父项所属区域代码 执行如下 创建表的 SQL 语句:
  
  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. CREATE TABLE [dbo].[pub_area](
  6.         [acode] [nvarchar](10) NOT NULL,
  7.         [aname] [nvarchar](50) NOT NULL,
  8.         [parent_acode] [nvarchar](10) NULL,
  9. CONSTRAINT [IX_pub_area] UNIQUE NONCLUSTERED
  10. (
  11.         [acode] ASC
  12. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  13. ) ON [PRIMARY]
  14. GO
复制代码
执行如下SQL语句,创建一些数据:
  
  1. insert into pub_area(acode,aname,parent_acode) values('01','天津市','')
  2. insert into pub_area(acode,aname,parent_acode) values('0101','南开区','01')
  3. insert into pub_area(acode,aname,parent_acode) values('010101','学府街道','0101')
  4. insert into pub_area(acode,aname,parent_acode) values('010102','万兴街道','0101')
复制代码
通过查询分析器,执行查询SQL语句,表现如下图:


末了我们将数据填充到 DataSet 即可,具体操作可参考我的文章《C# 利用IDbDataAdapter / IDataReader 实现通用数据集获取》 


范例运行环境

操作系统: Windows Server 2019 DataCenter
数据库:Microsoft SQL Server 2016
.net版本: .netFramework4.0 或以上
开发工具:VS2019  C#
一些实用方法

获取数据举行呈现

simpleSystemTreeview方法告急是通过DataSet数据源举行提取呈现在 TreeView 控件上,方法返回 int 类型,表现成功返回当前节点的节点数,其参数设置见下表:
序号参数名类型阐明1tvSystem.Web.UI.WebControls.TreeNodeCollection传入的TreeView的当前结点集合对象2dsDataSet数据集对象,默认只取Tables[0]3keystring数据表的唯一标识字段名4parentkeystring数据表的父结点字段名5disstring数据表的表现名称字段名6keytypestring标识类型,这是我们自定的规范,比如CID(字符)、ID(数值)固定名称的处理方式,默认处理方式对key或parentKey举行字符串过滤处理7initvaluestring是否指定一个初始值8firstlevelbool是否指遍历一级,如果为true,则不在举行递归9initByKeybool初始值使用哪个关键字段,false使用父节点,true使用唯一标识,默认为false 实当代码如下:
  1.         public int simpleSystemTreeview(System.Web.UI.WebControls.TreeNodeCollection tv, DataSet ds, string key, string parentkey, string dis, string keytype, string initvalue, bool firstlevel, bool initByKey)
  2.         {
  3.             
  4.             int rv = 0;
  5.             DataView dv = new DataView();
  6.             dv.Table = ds.Tables[0];
  7.             System.Web.UI.WebControls.TreeNode tmpNd;
  8.             if ((keytype == "uniqueidentifier") && (initvalue == ""))
  9.             {
  10.                 dv.RowFilter = " " + (initByKey == false ? parentkey : key) + " is null ";
  11.             }
  12.             else
  13.             {
  14.                 dv.RowFilter = "isnull(" + (initByKey == false ? parentkey : key) + ",'')='" + initvalue + "'";
  15.             }
  16.             rv = dv.Count;
  17.             foreach (DataRowView drv in dv)
  18.             {
  19.                 tmpNd = new System.Web.UI.WebControls.TreeNode();
  20.                 tmpNd.Value = drv[key].ToString();
  21.                 tmpNd.Text = drv[dis].ToString();
  22.                 //    tmpNd.ImageUrl="../images/"+drv["Caption"].ToString();
  23.                 //    tmpNd.NavigateUrl="../"+drv["Caption"].ToString();
  24.                 tv.Add(tmpNd);
  25.                 if (!firstlevel)
  26.                     simpleSystemTreeview(tmpNd.ChildNodes, ds, key, parentkey, dis, keytype, tmpNd.Value, firstlevel, false);
  27.             }
  28.             return rv;
  29.         }
复制代码

前端示例代码如下:
  1. <%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="FALSE" %>
  2. <%@ Import Namespace="System.Data" %>
  3. <%@ Import Namespace="System.Web.UI.WebControls" %>
  4. <script language="C#" runat="server">
  5.     public CosysJaneCommonAPI.CODAL dal = new CosysJaneCommonAPI.CODAL();
  6.     void Page_Load(Object sender, EventArgs e)
  7.     {
  8.         if (Page.IsPostBack) { return; }
  9.         object rvvv=dal.GetDataSet("select acode,aname,parent_acode from pub_area", null);
  10.         DataSet _ds = rvvv as DataSet;
  11.         int rvvv_count = dal.simpleSystemTreeview(tv.Nodes, _ds, "acode", "parent_acode", "aname", "uniqueidentifier", "",false,false);
  12.         Response.Write(rvvv_count);
  13.     }
  14. </script>
  15. <html>
  16. <head>
  17.     <meta charset="UTF-8">
  18.     <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=yes"/>
  19.     <title></title>
  20.     </style>
  21. </head>
  22. <body>
  23. <form runat="server">
  24. <div style=" margin-top:50px;margin-left:50px">
  25.        <asp:TreeView ID="tv" runat="server" Height="300" ShowLines="true"  Width="500" AutoPostBack="false" ExpandLevel="3" BackColor="White" style="font-family: 微软雅黑"
  26.                                 EnableTheming="True"  BorderColor="#003300" BorderStyle="Solid" BorderWidth="1px">
  27.         </asp:TreeView>
  28. </div>
  29. </form>
  30. </body>
  31. <script type="text/javascript">
  32. </script>
  33. </html>
复制代码
成功后表现如下图:





获取所有的结点 

GetSystemTreeViewAllNodes 方法获取当前给定集合的所有结点对象,并存储到指定的ArrayList当中,其参数阐明见下表:
序号参数名类型阐明1tvSystem.Web.UI.WebControls.TreeNodeCollection传入的TreeView的当前结点集合对象2rv2ArrayList要存储的 ArrayList 实当代码如下:
  
  1. public void GetSystemTreeViewAllNodes(System.Web.UI.WebControls.TreeNodeCollection tv, ArrayList rv2)
  2. {
  3.      for (int i = 0; i < tv.Count; i++)
  4.      {
  5.          rv2.Add(tv[i]);
  6.          GetSystemTreeViewAllNodes(tv[i].ChildNodes, rv2);
  7.      }
  8. }
复制代码
调用示例如下,获取南开区的所有街道的结点对象:
  
  1. ArrayList rv2 = new ArrayList();
  2. GetSystemTreeViewAllNodes(tv.Nodes, rv2);
  3. Response.Write(rv2.Count);
复制代码
小结

1、由于System.Web.UI.WebControls.TreeView是内置控件,因此在Web页中直接引用命名空间即可直接使用,使用 VS 开发我们必要在 IDE环境解决方案中添加  System.Web 引用,如下图:

2、System.Web.UI.WebControls.TreeNode() 在递归遍历的时候,必要提供 ChildNodes,Microsoft.Web.UI.WebControls.TreeView 则通报 Nodes
3、System.Web.UI.WebControls.TreeNode() 的使用 Value表现值, Microsoft.Web.UI.WebControls.TreeView 则使用 ID 表现唯一标识
4、System.Web.UI.WebControls.TreeView 在 Web 页面引用命名空间后可以直接使用值, Microsoft.Web.UI.WebControls.TreeView 则必要使用 Register 命令,并必要下载对应的Dll库到网站的 Bin 目录下。
因此建议使用 System.Web.UI.WebControls.TreeView 举行开发,详细先容和用法可参照如下链接:
TreeView 类 (System.Web.UI.WebControls) | Microsoft Learn
感谢您的阅读,盼望本文能够对您有所资助。




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张裕

高级会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表