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>

    效果
  • 相关阅读:
    NET 中反射的用法
    Prism 框架解读之一系列
    委托(Delegate)
    Python NameError:name ‘xrange’ is not defined
    Python import commands ImportError: No module named 'commands'
    Python import commands ImportError: No module named 'commands'
    Python3 TypeError: initial_value must be str or None, not bytes
    Python3 TypeError: initial_value must be str or None, not bytes
    Python import urllib2 ImportError: No module named 'urllib2'
    Python import urllib2 ImportError: No module named 'urllib2'
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/775353.html
Copyright © 2011-2022 走看看