忽然发现不知道该写点什么了,记得当初作模版控件的时候遇到一个问题,这一篇文章就介绍一下模版控件的开发吧。
我想分两块来说:1、给现有的标准数据控件(如:Repeater )建立动态模版,2、建立能够使用模版的控件。
1、给现有的标准数据控件(如:Repeater )建立模版
一、首先建立一个模版类:在这个模版中,咱们要显示人员的姓名;而且人员的姓名是一个LinkButton,能够点击。
- /// <summary>
- /// Repeater模版
- /// </summary>
- internal class PersonTemplate : Control, ITemplate
- {
- string _Code;
- string _Name;
-
- public PersonTemplate(string Code, string Name)
- {
- _Code = Code;
- _Name = Name;
- }
-
- void ITemplate.InstantiateIn(Control container)
- {
-
- LinkButton linkButton1 = new LinkButton();
- linkButton1.ID = "lkbutton";
- linkButton1.CommandName = "SelectPerson";
- linkButton1.CausesValidation = false;
- linkButton1.DataBinding += new EventHandler(this.LinkButtonBindData);
- container.Controls.Add(new LiteralControl("<br/>"));
- container.Controls.Add(linkButton1);
- }
- void LinkButtonBindData(object sender, System.EventArgs e)
- {
- LinkButton lButton1 = sender as LinkButton;
- lButton1.CommandArgument = DataBinder.Eval(lButton1.NamingContainer, "DataItem." + _Code).ToString();
- lButton1.Text = DataBinder.Eval(lButton1.NamingContainer, "DataItem." + _Name).ToString();
- }
- }
二、而后建立一个Panel,用于存放模版
- internal class BasicPanel : Panel, INamingContainer
- {
- public BasicPanel()
- {
- }
- }
三、控件部分:
MyRepeater这个控件就到此为止了,须要在包含控件的页面中绑定一个数据源给它,例如
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- DataTable dt = new DataTable();
-
- dt.Columns.Add("Code");
- dt.Columns.Add("Name");
-
- DataRow dr = dt.NewRow();
-
- dr[0] = "001";
- dr[1] = "张三";
-
- dt.Rows.Add(dr);
-
- DataRow dr1 = dt.NewRow();
-
- dr1[0] = "002";
- dr1[1] = "李四";
-
- dt.Rows.Add(dr1);
-
- DataRow dr2 = dt.NewRow();
-
- dr2[0] = "003";
- dr2[1] = "王五";
-
- dt.Rows.Add(dr2);
-
- MyRepeater1.DataSource = dt;
-
- }
- }
2、建立能够使用模版的控件
我发现要想作好一件事,真的很难。最近因疲于工做,不多有时间研究技术,很长时间写不了多少。
我想这一部分就介绍一个最简单的模版控件了,我实在太懒了,只是贴点代码。
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Text;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
-
- namespace VeryCodes.Controls.Web
- {
- [DefaultProperty("Text")]
- [ToolboxData("<{0}:TemplateTest runat=server></{0}:TemplateTest>")]
- public class TemplateTest : WebControl, INamingContainer//必须实现接口INamingContainer
- {
- private ITemplate _itemTemplate;
-
- //属性
- [Browsable(false)]
- [TemplateContainer(typeof(TemplateTest))]
- [PersistenceMode(PersistenceMode.InnerProperty)]
- public ITemplate ItemTemplate
- {
- get { return _itemTemplate; }
- set { _itemTemplate = value; }
- }
-
- protected override void CreateChildControls()
- {
- _itemTemplate.InstantiateIn(this);//建立模版控件
- }
- }
- }
有空再看看吧