自定义控件是ASP.NET中很重要的一部分,使用它可以提高程序代码的重用性,即一个自定义控件在网页、自定义控件或控件的内部都可以再次使用。本实例创建的复选框控件列CheckBoxColumn自定义控件也可以在网站的任何地方再次使用。
本实例介绍如何在ASP.NET中创建自定义控件、如何使用自定义控件,以及如何在自定义控件中定义公开属性和方法的实现方法。
1.创建新ASP.NET应用程序
在Visual Studio .NET 2003集成开发环境中创建新的ASP.NET Web应用程序,命名为Example_12_5。
2.创建自定义控件CheckBoxColumn
在应用程序Example_12_5中添加文件CheckItem.cs和文件 CheckColumn.cs。其中第一个文件定义类CheckBoxItem实现CheckBox控件;第二个文件定义类CheckBoxColumn 实现DataGrid控件中的CheckBoxColumn列。类CheckBoxItem继承于接口ITemplate,并在其中定义了标识控件名称的属性Name、标识控件数据域的属性DataField、标识控件是否为只读的属性ReadOnly、标识控件是否提交回传的属性 AutoPostBack和绑定控件数据的事件BindData()、当控件的选择项改变时触发的事件OnCheckChanged等。类 CheckBoxItem的程序代码如下:
internal class CheckBoxItem : ITemplate { // <summary> // CheckBoxItem的构造函数 // </summary> // <param name="editable">控件是否为可编辑</param> public CheckBoxItem(bool editable,string Name) { name = Name; readOnly = (editable==true)?false:true; } // <summary> // 实例化CheckBox控件,并添加到容器中 // </summary> // <param name="container">添加控件的容器</param> void ITemplate.InstantiateIn(Control container) { //创建CheckBox控件 CheckBox box = new CheckBox(); //设置控件的属性和事件 box.ID = name; box.DataBinding += new EventHandler(this.BindData); box.AutoPostBack = autoPostBack; box.CheckedChanged += new EventHandler(this.OnCheckChanged); container.Controls.Add(box); } // <summary> //定义控件的事件CheckChanged // </summary> public event EventHandler CheckedChanged;
// <summary> // 设置控件的事件OnCheckChanged // </summary> private void OnCheckChanged(object sender, EventArgs e) { if (CheckedChanged != null){CheckedChanged(sender, e);} } // <summary> //定义控件的属性Name // </summary> private string name; public string Name { get{return(name);} set{name = value;} } // <summary> // 定义控件的属性DataField // </summary> private string dataField; public string DataField { get{return dataField;} set{dataField=value;} } // <summary> // 定义控件的属性AutoPostback // </summary> private bool autoPostBack = false; public bool AutoPostBack { set{autoPostBack = value;} get{return autoPostBack;} } // <summary> // 定义控件的数据绑定函数BindData() // </summary> private void BindData(object sender, EventArgs e) { //找到CheckBox控件 CheckBox box = (CheckBox) sender; DataGridItem container = (DataGridItem) box.NamingContainer; box.Checked = false; box.Enabled = (readOnly == true) ? false:true; //获取数据 string data = ((DataRowView) container.DataItem)[dataField].ToString(); //获取数据类型 Type t = ((DataRowView)container.DataItem).DataView.Table.Columns[ dataField].DataType; if (data.Length>0) { switch (t.ToString()) { //设置控件的值 case "System.Boolean": if(( data == "True")||(data == "true")){box.Checked = true;} break; default:break; } } }
|
// <summary> // 定义控件的属性readOnly // </summary> private bool readOnly = true; } |