這個範例有點小麻煩,我是寫來給本書讀者當作補充的。
我的書裡面有五章(約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.台灣 ........