忽然發現不知道該寫點什麼了,記得當初作模版控件的時候遇到一個問題,這一篇文章就介紹一下模版控件的開發吧。
我想分兩塊來說: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);//建立模版控件
- }
- }
- }
有空再看看吧