程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#動態生成控件以及添加事件處理(4)

C#動態生成控件以及添加事件處理(4)

編輯:關於C語言

這幾天忙,好久沒上來了,今天項目基本完了,可以輕松下了。明天周末,呵呵。

我項目中遇到的是動態創建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. 下一頁:
Copyright © 程式師世界 All Rights Reserved