在这里都注册了快一年了,还没写过任何文章。今天开写吧,以后有什么心得以及学习笔记之类的,都记下来。
有朋友在使用AjaxControl Toolkit里的Tab控件,他刚刚问怎么实现在cs里动态添加TabPanel项。我建了一个项目试了一下。主要问题是TabPanel里如何创建ContentTemplate。
<ajaxToolkit:TabContainer>控件使用方法比较简单,直接拖到页面上,添加TabPanel,然后直接输入TabPanel的内容就可以了,控件完全支持设计时的WYSIWYG,非常方便。TabPanel里的内容是通过<contenttemplate></contenttemplate>来指定的。这个对应于TabPanel的ContentTemplate属性,VS里intellisense显示它的类型是ITemplate,这是一个接口,我试着在intellisense里找找有没有类实现了这个接口,但一无所获。找不到这个类,就没有办法给ContentTemplate赋值。于是查看了一下Tab控件的源码,又查阅了MSDN,终于把问题解决了。
问题关键就在于这个实现了ITemplate接口的类,我找不到,只好自己写了一个。也不知道有没有别的方法,希望有知道的朋友告诉我。全部代码如下:
很多控件,如GridView、Repeat等都使用了Template,应该也都可以按这种方法来实现动态设置模板了。
BTW,另外还有一种方法动态设置模板,就是使用Page.LoadTemplate("template.ascx"),如tab1.ContentTemplate=Page.LoadTemplate("template.ascx")
有朋友在使用AjaxControl Toolkit里的Tab控件,他刚刚问怎么实现在cs里动态添加TabPanel项。我建了一个项目试了一下。主要问题是TabPanel里如何创建ContentTemplate。
<ajaxToolkit:TabContainer>控件使用方法比较简单,直接拖到页面上,添加TabPanel,然后直接输入TabPanel的内容就可以了,控件完全支持设计时的WYSIWYG,非常方便。TabPanel里的内容是通过<contenttemplate></contenttemplate>来指定的。这个对应于TabPanel的ContentTemplate属性,VS里intellisense显示它的类型是ITemplate,这是一个接口,我试着在intellisense里找找有没有类实现了这个接口,但一无所获。找不到这个类,就没有办法给ContentTemplate赋值。于是查看了一下Tab控件的源码,又查阅了MSDN,终于把问题解决了。
问题关键就在于这个实现了ITemplate接口的类,我找不到,只好自己写了一个。也不知道有没有别的方法,希望有知道的朋友告诉我。全部代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using AjaxControlToolkit;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TabContainer tabContainer1 = new TabContainer();
TabPanel tab1 = new TabPanel();
tab1.HeaderText = "标签1";
tabContainer1.Tabs.Add(tab1);
TabPanel tab2 = new TabPanel();
tab2.HeaderText = "标签2";
tabContainer1.Tabs.Add(tab2);
//建立第一个Tab里的内容
Panel panel1 = new Panel();
Label label1 = new Label();
label1.Text = "这是第一个Tab";
panel1.Controls.Add(label1);
//创建一个Template
TabContentTemplate temp1 = new TabContentTemplate();
//添加子控件
temp1.SetTemplate(panel1);
tab1.ContentTemplate = temp1;
this.form1.Controls.Add(tabContainer1);
}
}
public class TabContentTemplate : ITemplate
{
private Control _template;
public void SetTemplate(Control templateControl)
{
_template = templateControl;
}
ITemplate Members
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using AjaxControlToolkit;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TabContainer tabContainer1 = new TabContainer();
TabPanel tab1 = new TabPanel();
tab1.HeaderText = "标签1";
tabContainer1.Tabs.Add(tab1);
TabPanel tab2 = new TabPanel();
tab2.HeaderText = "标签2";
tabContainer1.Tabs.Add(tab2);
//建立第一个Tab里的内容
Panel panel1 = new Panel();
Label label1 = new Label();
label1.Text = "这是第一个Tab";
panel1.Controls.Add(label1);
//创建一个Template
TabContentTemplate temp1 = new TabContentTemplate();
//添加子控件
temp1.SetTemplate(panel1);
tab1.ContentTemplate = temp1;
this.form1.Controls.Add(tabContainer1);
}
}
public class TabContentTemplate : ITemplate
{
private Control _template;
public void SetTemplate(Control templateControl)
{
_template = templateControl;
}
ITemplate Members
}
很多控件,如GridView、Repeat等都使用了Template,应该也都可以按这种方法来实现动态设置模板了。
BTW,另外还有一种方法动态设置模板,就是使用Page.LoadTemplate("template.ascx"),如tab1.ContentTemplate=Page.LoadTemplate("template.ascx")