VS2005 GridView
模版類(lèi)
public class GridViewTemplate : ITemplate
{
//private DataControlRowType templateType;
//private string columnName;
ListItemType templateType;
string columnName;
//public GridViewTemplate(DataControlRowType type, string colname)
public GridViewTemplate(ListItemType type, string colname)
{
templateType = type;
columnName = colname;
}
public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case ListItemType.Header:
//lc.Text = "<B>" + columnName + "</B>";
//container.Controls.Add(lc);
break;
case ListItemType.Item:
Table Table1 = new Table();
Table1.ID = "Table1";
container.Controls.Add(Table1);
//DropDownList drr = new DropDownList();
//drr.ID = "dropdown";
//drr.AppendDataBoundItems = true;
//drr.Items.Add(new ListItem("-----請選擇------", ""));
//drr.Items.Add(new ListItem("AA", "a"));
//drr.Items.Add(new ListItem("BB", "b"));
//drr.Items.Add(new ListItem("CC", "c"));
//container.Controls.Add(drr);
break;
case ListItemType.EditItem:
//TextBox tb = new TextBox();
//tb.Text = "";
//container.Controls.Add(tb);
break;
case ListItemType.Footer:
//lc.Text = "<I>" + columnName + "</I>";
//container.Controls.Add(lc);
break;
}
}
}
private void Page_Load(object sender, System.EventArgs e)
{
TemplateField field = new TemplateField();
field.HeaderStyle.Wrap = false;
field.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
field.HeaderText = tab.Rows[0]["show_name"].ToString();
//field.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "");
field.ItemTemplate = new GridViewTemplate(ListItemType.Item, "");
this.GridView1.Columns.Add(field);
}
msdn幫助
DataGrid 控件可以包含模板列,在該模板列中,您可以通過(guò)添加控件和文本來(lái)布局列。與綁定列、按鈕列和超級鏈接列相比,模板列提供了更大的靈活性。正如 DataList 控件和 Repeater 控件的模板一樣,您可以動(dòng)態(tài)創(chuàng )建 DataGrid 控件的模板,從而可以在運行時(shí)定義列的內容、布局和數據。
注意 使用動(dòng)態(tài)模板列的過(guò)程與在 Repeater 控件或 DataList 控件中使用動(dòng)態(tài)模板的過(guò)程類(lèi)似。有關(guān)創(chuàng )建動(dòng)態(tài)模板的一般信息,請參見(jiàn)動(dòng)態(tài)創(chuàng )建 Web 服務(wù)器控件模板。
下面是在 DataGrid 控件中使用動(dòng)態(tài)模板與在 Repeater 或 DataList 控件中使用動(dòng)態(tài)模板的區別:
請不要為網(wǎng)格本身創(chuàng )建項模板,而是為網(wǎng)格中的列創(chuàng )建項模板。
DataGrid 列的模板與 Repeater 或 DataList 控件的模板稍有不同。DataGrid 列不包括交替項或分隔符模板。但是,與 DataList 控件類(lèi)似,DataGrid 列確實(shí)包括 EditItem 模板。
創(chuàng )建動(dòng)態(tài)模板列
創(chuàng )建實(shí)現 System.Web.UI 命名空間的 ITemplate 接口的模板類(lèi)。有關(guān)詳細信息,請參見(jiàn)動(dòng)態(tài)創(chuàng )建 Web 服務(wù)器控件模板。
您也可以將值傳遞到類(lèi)的構造函數,類(lèi)可以使用該值來(lái)確定要創(chuàng )建的模板類(lèi)型(ItemTemplate、EditItemTemplate,等等)。
通常,使用 DataGrid 控件中已定義的 ListItemType 枚舉中的值來(lái)傳遞該模板類(lèi)型。
在該類(lèi)中,實(shí)現 InstantiateIn 方法(ITemplate 接口的唯一成員)。此方法提供將文本實(shí)例和控件實(shí)例插入指定容器的方法。
下面的示例顯示動(dòng)態(tài)模板列的模板類(lèi)。構造函數接受兩個(gè)參數:第一個(gè)參數指定要創(chuàng )建的模板類(lèi)型,第二個(gè)參數用于傳入所創(chuàng )建列的名稱(chēng)。由于它是 DataGrid 控件的模板,所以該類(lèi)包括創(chuàng )建包含 Textbox 控件的 EditItem 模板的代碼。
' Visual Basic
Private Class DataGridTemplate
Implements ITemplate
Dim templateType As ListItemType
Dim columnName As String
Sub New(ByVal type As ListItemType, ByVal ColName As String)
templateType = type
columnName = ColName
End Sub
Sub InstantiateIn(ByVal container As Control) _
Implements ITemplate.InstantiateIn
Dim lc As New Literal()
Select Case templateType
Case ListItemType.Header
lc.Text = "<B>" & columnName & "</B>"
container.Controls.Add(lc)
Case ListItemType.Item
lc.Text = "Item " & columnName
container.Controls.Add(lc)
Case ListItemType.EditItem
Dim tb As New TextBox()
tb.Text = ""
container.Controls.Add(tb)
Case ListItemType.Footer
lc.Text = "<I>Footer</I>"
container.Controls.Add(lc)
End Select
End Sub
End Class
// C#
public class DataGridTemplate : ITemplate
{
ListItemType templateType;
string columnName;
public DataGridTemplate(ListItemType type, string colname)
{
templateType = type;
columnName = colname;
}
public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch(templateType)
{
case ListItemType.Header:
lc.Text = "<B>" + columnName + "</B>";
container.Controls.Add(lc);
break;
case ListItemType.Item:
lc.Text = "Item " + columnName;
container.Controls.Add(lc);
break;
case ListItemType.EditItem:
TextBox tb = new TextBox();
tb.Text = "";
container.Controls.Add(tb);
break;
case ListItemType.Footer:
lc.Text = "<I>" + columnName + "</I>";
container.Controls.Add(lc);
break;
}
}
}
在為動(dòng)態(tài)模板列創(chuàng )建類(lèi)后,可以使用它在運行時(shí)將列分配給 DataGrid 控件。
使用動(dòng)態(tài)模板列
創(chuàng )建 TemplateColumn 類(lèi)的實(shí)例。
創(chuàng )建動(dòng)態(tài)模板的實(shí)例,如果合適的話(huà),將一個(gè)項類(lèi)型值傳遞給它。
將該實(shí)例分配給您在第 1 步中創(chuàng )建的 TemplateColumn 對象的模板屬性之一,如 ItemTemplate、EditItemTemplate、HeaderTemplate,等等。
下面的示例顯示如何使用動(dòng)態(tài)模板列將兩個(gè)列添加到 DataGrid 控件中。在此示例中,在將控件綁定到它的數據源之前,在頁(yè)加載期間,將模板實(shí)例化。
' Visual Basic
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim tc1 As New TemplateColumn()
tc1.HeaderTemplate = New _
DataGridTemplate(ListItemType.Header, "Column1")
tc1.ItemTemplate = New DataGridTemplate(ListItemType.Item, _
"Column1")
tc1.EditItemTemplate = New _
DataGridTemplate(ListItemType.EditItem, "Column1")
tc1.FooterTemplate = New _
DataGridTemplate(ListItemType.Footer, "Column1")
DataGrid1.Columns.Add(tc1)
Dim tc2 As New TemplateColumn()
tc2.HeaderTemplate = New _
DataGridTemplate(ListItemType.Header, "Column2")
tc2.ItemTemplate = New _
DataGridTemplate(ListItemType.Item, "Column2")
tc2.EditItemTemplate = New _
DataGridTemplate(ListItemType.EditItem, "Column2")
tc2.FooterTemplate = New _
DataGridTemplate(ListItemType.Footer, "Column2")
DataGrid1.Columns.Add(tc2)
SqlDataAdapter1.Fill(DsCategories1)
DataGrid1.DataBind()
End Sub
// C#
private void Page_Load(object sender, System.EventArgs e)
{
TemplateColumn tc1 = new TemplateColumn();
tc1.HeaderTemplate = new
DataGridTemplate(ListItemType.Header, "Column1");
tc1.ItemTemplate = new
DataGridTemplate(ListItemType.Item, "Column1");
tc1.EditItemTemplate = new
DataGridTemplate(ListItemType.EditItem, "Column1");
tc1.FooterTemplate = new
DataGridTemplate(ListItemType.Footer, "Column1");
DataGrid1.Columns.Add(tc1);
TemplateColumn tc2 = new TemplateColumn();
tc2.ItemTemplate = new
DataGridTemplate(ListItemType.Item, "Column2");
tc2.HeaderTemplate = new
DataGridTemplate(ListItemType.Header, "Column2");
tc2.EditItemTemplate = new
DataGridTemplate(ListItemType.EditItem, "Column2");
tc2.FooterTemplate = new
DataGridTemplate(ListItemType.Footer, "Column2");
DataGrid1.Columns.Add(tc2);
sqlDataAdapter1.Fill(dsCategories1);
DataGrid1.DataBind();
}
請參見(jiàn)
Web 服務(wù)器控件模板 | 動(dòng)態(tài)創(chuàng )建 Web 服務(wù)器控件模板
聯(lián)系客服