WEB开发网
开发学院软件开发C语言 C#动态生成控件以及添加事件处理 阅读

C#动态生成控件以及添加事件处理

 2009-04-01 08:21:45 来源:WEB开发网   
核心提示: 这几天忙,好久没上来了,C#动态生成控件以及添加事件处理(4),今天项目基本完了,可以轻松下了,BTW,另外还有一种方法动态设置模板,明天周末,呵呵

这几天忙,好久没上来了,今天项目基本完了,可以轻松下了。明天周末,呵呵。

我项目中遇到的是动态创建Tab选项卡和Gridview,按下面的方法可以,创建它们当然在page_load里了,有时,它会引起你页面上其它的按钮用不了,这时,你可以把它们不放在page_load里,而放在page_init里,这样就不会有问题了,我不知其它的Ajax控件会不会有这样的问题,我创建TabPanel时,就出现异常。我把它们放在Page_Init里就不会这样了。

动态添加AjaxControl Toolkit的Tab控件及设置模板

有朋友在使用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#region ITemplate Members

    public void InstantiateIn(Control container)
    {
        container.Controls.Add(_template);
    }

    #endregion
}

很多控件,如GridView、Repeat等都使用了Template,应该也都可以按这种方法来实现动态设置模板了。

BTW,另外还有一种方法动态设置模板,就是使用Page.LoadTemplate("template.ascx"),如tab1.ContentTemplate=Page.LoadTemplate("template.ascx") 

上一页  1 2 3 4 

Tags:动态 生成 控件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接