這個範例有點小麻煩,我是寫來給本書讀者當作補充的。

我的書裡面有五章(約250頁)討論 GridView的各種變化,讀者可以把這個範例,

當成第十一章的補充教材。....有點小難....

第十一章的部份範例,已經有公開過,都是「初學者不宜」的範例。

 -------------------------------------------------------------------------------------------------------------

先看看執行結果吧。

最右邊的 DropDownList,是程式動態加上去的。

而且是以「樣版列(Template Row / 模版列)」的方式附加上去

 

關於本範例, 微軟這篇文章,講得很詳細:

http://msdn.microsoft.com/zh-tw/library/cc438020(VS.71).aspx 

-------------------------------------------------------------------------------------------------------------

HTML畫面設計,先作一個簡單的 GridView + SqlDataSource

完成後,我們在 GridView最後面的一行......透過程式「動態」新增一列,而且裡面包含了一個Web控制項

 

關於這個程式,使用到 ITemplate Interface,可以參閱微軟的中文說明:http://msdn.microsoft.com/zh-tw/library/system.web.ui.itemplate.aspx

 -------------------------------------------------------------------------------------------------------------

後置程式碼(C#)如下:

    public class Add_GridViewTemplate : ITemplate
    {
        private DataControlRowType u_Type;
        private string column_title;

        public Add_GridViewTemplate(DataControlRowType type, string colname)
        {
            u_Type = type;
            column_title = colname;
        }

        public void InstantiateIn(System.Web.UI.Control container)
        {  // ITemplate只有一個 InstantiateIn()方法,此方法需要輸入一個控制項
            // 當實作Class時,定義子控制項和樣板所屬的 Control 物件。這些子控制項依次定義在內嵌樣板內。

            switch (u_Type)
            {
                case DataControlRowType.Header:  // GridView表頭
                    Literal literal1 = new Literal();
                    literal1.Text = column_title;
                    container.Controls.Add(literal1);
                    break;

                case DataControlRowType.DataRow:  // Gridview資料列
                    DropDownList ddl = new DropDownList();  //動態加入 DropDownList
                    ddl.ID = "DropDownList_Add";
                    ddl.Items.Add(new ListItem("-----請選擇------", ""));
                    ddl.Items.Add(new ListItem("子選項A", "a"));    // 左邊是Text,右邊是Value
                    ddl.Items.Add(new ListItem("子選項B", "b"));
                    ddl.Items.Add(new ListItem("子選項C", "c"));
                    container.Controls.Add(ddl);
                    break;

                default:
                    break;
            }
        }
    }


protected void Page_Load(object sender, EventArgs e)
    {
        TemplateField temp_f = new TemplateField();
        temp_f.ShowHeader = true;
        temp_f.HeaderTemplate = new Add_GridViewTemplate(DataControlRowType.Header, "<font color=yellow>動態加入的</font>");
        temp_f.ItemTemplate = new Add_GridViewTemplate(DataControlRowType.DataRow, "");
        GridView1.Columns.Add(temp_f);
    }

-------------------------------------------------------------------------------------------------------------

若要改成VB語法,請注意,修改的地方如下:

     Public Class Add_GridViewTemplate
        Implements ITemplate

        Private dcrType As DataControlRowType
        Private column_title As String

        Public Sub New(ByVal r_type As DataControlRowType, ByVal col_name As String)
            dcrType = r_type
            column_title = col_name
        End Sub

      ............................
    End Class

 

 

2008/12/25補充:

 

本範例有一些 Bug,我會在下一篇文章進行補救

請看:GridView密技#5---(修改/補強版)使用ITemplate介面,動態新增「GridView樣版列(Template Row/模版列)」

 

 

 


 

 

......  寄信給我    mis2000lab (at) 雅虎.com.台灣 ................................................................................................................
ASP.NET專題實務  (文魁出版,VB版 P8187 / C#版P09027

              下集已經出版囉~~~ASP.NET專題實務II:範例應用與4.0新功能

.............................................................................................................. 寄信給我    mis2000lab (at) 雅虎.com.台灣 ........