• Asp.Netserver控件开发的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.Netserver控件开发的Grid实现(四)回发事件



  • 相关阅读:
    ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
    ASP.NET CORE 使用Consul实现服务治理与健康检查(1)——概念篇
    Asp.Net Core 单元测试正确姿势
    如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch
    Asp.Net Core2.2 源码阅读系列——控制台日志源码解析
    使用VS Code 开发.NET CORE 程序指南
    .NetCore下ES查询驱动 PlainElastic .Net 升级官方驱动 Elasticsearch .Net
    重新认识 async/await 语法糖
    EF添加
    EF修改部分字段
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4274580.html
Copyright © 2020-2023  润新知