以下是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; ///GridColumnsEditor继承自CollectionEditor,CollectionEditor能够给用户提供一个编辑的界面,并集合大部分的数据类型。/// 构造函数 /// /// 控件类型 public GridColumnsEditor(Type type) : base(type) { types = new Type[] { typeof(BoundField) }; } ////// 获取此集合编辑器可包括的数据类型 /// ///类型集合 protected override Type[] CreateNewItemTypes() { return types; } }}
在构造函数中GridColumnsEditor(Type type)中,仅仅实现了一个BoundField字段,假设须要其它的字段,能够在后面加入。比方
types = new Type[] { typeof(BoundField), typeof(CheckField) };以下看一下BoundField字段的实现
///BoundField继承自GridColumn类,这里也有一个ParseChildren属性,主要是为了嵌套。/// 表格数据绑定列 /// [ToolboxItem(false)] [ParseChildren(true)] [PersistChildren(false)] public class BoundField : GridColumn { }
以下看一下GridColumn的实现
using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Web.UI;namespace AspNetServerControl{ ///GridColumn也继承自ControlBase,所以GridColumn事实上也是一个控件,仅仅只是我们将其嵌套在了Grid中。/// 表格列基类(抽象类) /// [ToolboxItem(false)] [ParseChildren(true)] [PersistChildren(false)] [DefaultProperty("HeaderText")] public class GridColumn : ControlBase { private string _headerText = String.Empty; ////// 标题栏显示的文字 /// [Category(CategoryName.OPTIONS)] [DefaultValue("")] [Description("标题栏显示的文字")] public string HeaderText { get { return _headerText; } set { _headerText = value; } } private string _dataField = String.Empty; ////// 字段名称 /// [Category(CategoryName.OPTIONS)] [DefaultValue("")] [Description("字段名称")] public string DataField { get { return _dataField; } set { _dataField = value; } } }}
在Grid中定义Columns的属性时,我们用的是GridColumnCollection类,而该类是一个GridColumn的集合,代码例如以下。
public class GridColumnCollection : Collection再看GridColumn类中,我们定义了HeaderText和DataField属性,这两个属性就是我们在default.aspx页面中编辑Grid时,给BoundField加入的属性。{ public GridColumnCollection(ControlBase parent) { } }
到此,整个Grid的封装就算完毕了。
假设结合jquerymobile,能够在Grid的Render函数中,根据jquerymobile的表格标记输出。
对于Grid的回发事件处理,请參看《》