当前位置: 首页>>代码示例>>C#>>正文


C# HierarchicalDataBoundControl类代码示例

本文整理汇总了C#中System.Web.UI.WebControls.HierarchicalDataBoundControl的典型用法代码示例。如果您正苦于以下问题:C# HierarchicalDataBoundControl类的具体用法?C# HierarchicalDataBoundControl怎么用?C# HierarchicalDataBoundControl使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


HierarchicalDataBoundControl类属于System.Web.UI.WebControls命名空间,在下文中一共展示了HierarchicalDataBoundControl类的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: PerformDataBinding

//引入命名空间
using System;
using System.Collections;
using System.ComponentModel;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Samples.AspNet.CS.Controls {

    [AspNetHostingPermission(SecurityAction.Demand, 
        Level=AspNetHostingPermissionLevel.Minimal)]
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, 
        Level=AspNetHostingPermissionLevel.Minimal)]
    public class GeneologyTree : HierarchicalDataBoundControl {

        private TreeNode rootNode;
        public TreeNode RootNode {
            get {
                rootNode ??= new TreeNode(String.Empty);
                return rootNode;
            }
        }
        
        private ArrayList nodes;
        public ArrayList Nodes {
            get {
                if (null == nodes) {
                    nodes = new ArrayList();
                }
                return nodes;
            }
        }
        public string DataTextField {
            get {
                object o = ViewState["DataTextField"];
                return((o == null) ? string.Empty : (string)o);
            }
            set {
                ViewState["DataTextField"] = value;
                if (Initialized) {
                    OnDataPropertyChanged();
                }
            }
        }
        private int _maxDepth = 0;
        protected override void PerformDataBinding() {
            base.PerformDataBinding();

            // Do not attempt to bind data if there is no
            // data source set.
            if (!IsBoundUsingDataSourceID && (DataSource == null)) {
                return;
            }
            
            HierarchicalDataSourceView view = GetData(RootNode.DataPath);
            
            if (view == null) {
                throw new InvalidOperationException
                    ("No view returned by data source control.");
            }                                  
            
            IHierarchicalEnumerable enumerable = view.Select();
            if (enumerable != null) {
                            
                Nodes.Clear();
                                
                try {
                    RecurseDataBindInternal(RootNode, enumerable, 1);
                }
                finally {
                }
            }
        }
        private void RecurseDataBindInternal(TreeNode node, 
            IHierarchicalEnumerable enumerable, int depth) {                                    
                        
            foreach(object item in enumerable) {
                IHierarchyData data = enumerable.GetHierarchyData(item);

                if (null != data) {
                    // Create an object that represents the bound data
                    // to the control.
                    TreeNode newNode = new TreeNode();
                    RootViewNode rvnode = new RootViewNode();
                    
                    rvnode.Node = newNode;
                    rvnode.Depth = depth;

                    // The dataItem is not just a string, but potentially
                    // an XML node or some other container. 
                    // If DataTextField is set, use it to determine which 
                    // field to render. Otherwise, use the first field.                    
                    if (DataTextField.Length > 0) {
                        newNode.Text = DataBinder.GetPropertyValue
                            (data, DataTextField, null);
                    }
                    else {
                        PropertyDescriptorCollection props = 
                            TypeDescriptor.GetProperties(data);

                        // Set the "default" value of the node.
                        newNode.Text = String.Empty;                        

                        // Set the true data-bound value of the TextBox,
                        // if possible.
                        if (props.Count >= 1) {                        
                            if (null != props[0].GetValue(data)) {
                                newNode.Text = 
                                    props[0].GetValue(data).ToString();
                            } 
                        }
                    }

                    Nodes.Add(rvnode);                    
                    
                    if (data.HasChildren) {
                        IHierarchicalEnumerable newEnumerable = 
                            data.GetChildren();
                        if (newEnumerable != null) {                            
                            RecurseDataBindInternal(newNode, 
                                newEnumerable, depth+1 );
                        }
                    }
                    
                    if ( _maxDepth < depth) _maxDepth = depth;
                }
            }
        }
        protected override void Render(HtmlTextWriter writer) {
                        
            writer.WriteLine("<PRE>");                        
            int currentDepth = 1;
            int currentTextLen = 0;
            
            foreach (RootViewNode rvnode in Nodes) {
                if (rvnode.Depth == currentDepth) {
                    string output = "  " + rvnode.Node.Text + "  ";
                    writer.Write(output);
                    currentTextLen = currentTextLen + output.Length;
                }
                else {
                    writer.WriteLine("");
                    // Some very basic white-space formatting
                    int halfLine = currentTextLen / 2;
                    for (int i=0;i<halfLine;i++) {
                        writer.Write(' ');
                    }
                    writer.Write('|');
                    writer.WriteLine("");
                    ++currentDepth; 
                    currentTextLen = 0;
                    for (int j=0;j<halfLine;j++) {
                        writer.Write(' ');
                    }
                    string output = "  " + rvnode.Node.Text + "  ";
                    writer.Write(output);
                    currentTextLen = currentTextLen + output.Length;                    
                }                                                           
            }
            writer.WriteLine("</PRE>");
        }
        
        private class RootViewNode { 
            public TreeNode Node;
            public int Depth;
        }
    }
}
开发者ID:.NET开发者,项目名称:System.Web.UI.WebControls,代码行数:170,代码来源:HierarchicalDataBoundControl


注:本文中的System.Web.UI.WebControls.HierarchicalDataBoundControl类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。