• HierarchicalDataSource


           分层数据的数据源控件的实现,使用treeview控件显示无限级分类


    1.数据结构如下



    2.定义节点对象,实现IHierarchyData接口,此为重点实现,因为是分层结构,所以要重复在判断是否有子节点和MessageID和ParentID是否相等.当然具体情况具体分析了

    3.定义节点对象集合,实现IHierarchicalEnumerable接口

    4.定义视图,继承HierarchicalDataSourceView类

    5.最后定义数据源控件,实现IHierarchicalDataSource接口

    贴下代码

    (1)

    (2)
      public class SqlHierarchicalEnumerable : ArrayList, IHierarchicalEnumerable
      
    {
     
        IHierarchyData IHierarchicalEnumerable.GetHierarchyData(
    object enumeratedItem)
        
    {
          
    return (SqlHierarchyData)enumeratedItem;
        }

      }

    (3)

    (4)

     public class CustomSqlDataSource : SqlDataSource, IHierarchicalDataSource
      
    {
        
    private SqlHierarchicalDataSourceView view = null;


        HierarchicalDataSourceView IHierarchicalDataSource.GetHierarchicalView(
    string viewPath)
        
    {
          
    if (null == this.view)
            
    this.view = new SqlHierarchicalDataSourceView(this, viewPath);

          
    return this.view;
        }


        
    private static readonly object EventKey = new object();

        
    event EventHandler IHierarchicalDataSource.DataSourceChanged
        
    {
          add
          
    {
            Events.AddHandler(EventKey, value);
          }

          remove
          
    {
            Events.RemoveHandler(EventKey, value);
          }

        }



        
    public string DataParentIdField
        
    {
          
    get return ViewState["DataParentIdField"!= null ? (string)ViewState["DataParentIdField"] : string.Empty; }
          
    set { ViewState["DataParentIdField"= value; }
        }


        
    public string DataIdField
        
    {
          
    get return ViewState["DataIdField"!= null ? (string)ViewState["DataIdField"] : string.Empty; }
          
    set { ViewState["DataIdField"= value; }
        }

      }


    使用

       <asp:TreeView runat="Server" ID="tv" DataSourceID="MySource">
          
    <DataBindings>
            
    <asp:TreeNodeBinding DataMember="MessageID" TextField="Subject" ValueField="MessageID" />
          
    </DataBindings>
        
    </asp:TreeView>
        
    <custom:CustomSqlDataSource 
        
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
          SelectCommand
    ="Select * From Messages"
          DataIdField
    ="MessageID" DataParentIdField="ParentID" ID="MySource"
          runat
    ="server">
        
    </custom:CustomSqlDataSource>

    效果
  • 相关阅读:
    WordPress Editorial Calendar插件权限安全绕过漏洞
    Linux kernel 本地拒绝服务漏洞
    Linux kernel ‘evm_update_evmxattr’函数拒绝服务漏洞
    VB6-ListView的排序和点滴
    VB6IDE改造
    杂记-匆匆北京行
    第60篇随笔:《道法自然》读书笔记
    VB6 AddIns 控件样式模板
    VB6-改造ComUnit(免除用例名称注册)
    VB6-设计模式点滴
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/775353.html
Copyright © 2020-2023  润新知