Asp.Net服务器控件开发的Grid实现(三)列编辑器

54 篇文章 14 订阅
本文详细介绍了ASP.NET服务器控件中的GridColumnsEditor类的实现,包括其构造函数、创建新项类型的方法以及BoundField类的实现。同时,解释了GridColumn类作为基类的作用,以及如何在Grid中定义Columns属性。最后,提到结合jQueryMobile进行渲染的可能性,并提供了关于Grid回发事件处理的链接。
摘要由CSDN通过智能技术生成

下面是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实现(四)回发事件



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值