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的表格标记输出。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。