zoukankan      html  css  js  c++  java
  • 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>

    效果
  • 相关阅读:
    数据结构开发(23):二叉树中结点的查找、插入、删除与清除操作
    数据结构开发(22):二叉树的转换、深层特性与存储结构设计
    数据结构开发(21):树中属性操作与层次遍历
    数据结构开发(20):树中结点的查找、插入、清除与删除操作
    数据结构开发(19):树的定义、操作、存储结构与实现
    数据结构开发(18):归并排序和快速排序
    数据结构开发(17):冒泡排序和希尔排序
    HTTP协议的内容协商
    长轮询实现消息推送
    XHR的应用场景
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/775353.html
Copyright © 2011-2022 走看看