zoukankan      html  css  js  c++  java
  • Asp.Net服务器控件开发的Grid实现(三)列编辑器

    下面是GridColumnsEditor的实现代码:

    GridColumnsEditor.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.Design;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web.UI.WebControls;
    
    namespace AspNetServerControl
    {
        public class GridColumnsEditor : CollectionEditor
        {
            private Type[] types;
    
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="type">控件类型</param>
            public GridColumnsEditor(Type type)
                : base(type)
            {
                types = new Type[] { 
                    typeof(BoundField)
                };
            }
    
            /// <summary>
            /// 获取此集合编辑器可包含的数据类型
            /// </summary>
            /// <returns>类型集合</returns>
            protected override Type[] CreateNewItemTypes()
            {
                return types;
            }
        }
    }
    
    GridColumnsEditor继承自CollectionEditor,CollectionEditor可以给用户提供一个编辑的界面,并集合大部分的数据类型。

    在构造函数中GridColumnsEditor(Type type)中,只实现了一个BoundField字段,如果需要其他的字段,可以在后面添加。比如

    types = new Type[] { 
                    typeof(BoundField),
    		typeof(CheckField)
                };
    下面看一下BoundField字段的实现

     /// <summary>
        /// 表格数据绑定列
        /// </summary>
        [ToolboxItem(false)]
        [ParseChildren(true)]
        [PersistChildren(false)]
        public class BoundField : GridColumn
        {
    
        }
    BoundField继承自GridColumn类,这里也有一个ParseChildren属性,主要是为了嵌套。

    下面看一下GridColumn的实现

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Text;
    using System.Web.UI;
    
    namespace AspNetServerControl
    {
        /// <summary>
        /// 表格列基类(抽象类)
        /// </summary>
        [ToolboxItem(false)]
        [ParseChildren(true)]
        [PersistChildren(false)]
        [DefaultProperty("HeaderText")]
        public class GridColumn : ControlBase
        {
            private string _headerText = String.Empty;
            /// <summary>
            /// 标题栏显示的文字
            /// </summary>
            [Category(CategoryName.OPTIONS)]
            [DefaultValue("")]
            [Description("标题栏显示的文字")]
            public string HeaderText
            {
                get
                {
                    return _headerText;
                }
                set
                {
                    _headerText = value;
                }
            }
    
    
            private string _dataField = String.Empty;
            /// <summary>
            /// 字段名称
            /// </summary>
            [Category(CategoryName.OPTIONS)]
            [DefaultValue("")]
            [Description("字段名称")]
            public string DataField
            {
                get
                {
                    return _dataField;
                }
                set
                {
                    _dataField = value;
                }
            }
        }
    }
    
    GridColumn也继承自ControlBase,所以GridColumn其实也是一个控件,只不过我们将其嵌套在了Grid中。

    在Grid中定义Columns的属性时,我们用的是GridColumnCollection类,而该类是一个GridColumn的集合,代码如下。

    public class GridColumnCollection : Collection<GridColumn>
        {
            public GridColumnCollection(ControlBase parent)
            {
    
            }
        }

    再看GridColumn类中,我们定义了HeaderText和DataField属性,这两个属性就是我们在default.aspx页面中编辑Grid时,给BoundField添加的属性。

    到此,整个Grid的封装就算完成了。

    如果结合jquerymobile,可以在Grid的Render函数中,依据jquerymobile的表格标记输出。

    对于Grid的回发事件处理,请参看《Asp.Net服务器控件开发的Grid实现(四)回发事件



  • 相关阅读:
    tomcat源码springboot搭建的跑包含websocket的项目
    tomcat源码ant编译
    职责链设计模式最简单的实例
    完美解决asp.net core 3.1 两个AuthenticationScheme(cookie,jwt)共存在一个项目中
    基于领域驱动设计(DDD)超轻量级快速开发架构(二)动态linq查询的实现方式
    Html5 在手机端 input 默认弹出英文键盘
    Html Table 表格 画斜线
    多个单列索引和联合索引的区别
    springboot常用功能
    前端代码评审(Code Review)
  • 原文地址:https://www.cnblogs.com/sparkleDai/p/7604983.html
Copyright © 2011-2022 走看看