1、页面代码
1: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
2:
3: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4: <html xmlns="http://www.w3.org/1999/xhtml">
5: <head runat="server">
6: <title>GridView控件中动态添加模板列</title>
7: </head>
8: <body>
9: <form id="form1" runat="server">
10: <div align="center">
11: <table border="1" cellpadding="0" cellspacing="0">
12: <tr>
13: <td style="font-weight: bold">
14: GridView控件中动态添加模板列
15: </td>
16: </tr>
17: <tr>
18: <td>
19: <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4"
20: Font-Size="10.5pt" ForeColor="#333333">
21: <Columns>
22: <asp:BoundField HeaderText="标题" DataField="text" />
23: </Columns>
24: <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
25: <RowStyle BackColor="#E3EAEB" />
26: <EditRowStyle BackColor="#7C6F57" />
27: <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
28: <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
29: <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
30: <AlternatingRowStyle BackColor="White" />
31: </asp:GridView>
32: </td>
33: </tr>
34: <tr>
35: <td style="font-size: 9pt; height: 26px;">
36: 请选择要添加的模板列数:<asp:DropDownList ID="DropDownList1" runat="server">
37: <asp:ListItem>1</asp:ListItem>
38: <asp:ListItem>2</asp:ListItem>
39: <asp:ListItem>3</asp:ListItem>
40: <asp:ListItem>4</asp:ListItem>
41: <asp:ListItem>5</asp:ListItem>
42: <asp:ListItem>6</asp:ListItem>
43: <asp:ListItem>7</asp:ListItem>
44: <asp:ListItem>8</asp:ListItem>
45: <asp:ListItem>9</asp:ListItem>
46: <asp:ListItem>10</asp:ListItem>
47: <asp:ListItem>15</asp:ListItem>
48: <asp:ListItem>20</asp:ListItem>
49: </asp:DropDownList>
50: <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="添加模板列" Font-Size="10pt" />
51: </td>
52: </tr>
53: </table>
54: </div>
55: </form>
56: </body>
57: </html>
2、执行代码:
1: using System;
2: using System.Data;
3: using System.Web.UI;
4: using System.Web.UI.WebControls;
5: using System.Collections;
6:
7: public partial class _Default : System.Web.UI.Page
8: { 9: protected void Page_Load(object sender, EventArgs e)
10: { 11: }
12: /// <summary>
13: /// Creates the data source.
14: /// 利用ICollection接口定义一个CreateDataSource()方法,用来将数据填充到数据集中,并返回一个数据集视图。
15: /// </summary>
16: /// <returns></returns>
17: ICollection CreateDataSource()
18: { 19: DataTable dt = new DataTable();
20: DataRow dr;
21: dt.Columns.Add(new DataColumn("id", typeof(Int32))); 22: dt.Columns.Add(new DataColumn("text", typeof(string))); 23: for (int i = 0; i < 6; i++)
24: { 25: dr = dt.NewRow();
26: dr[0] = i;
27: dr[1] = "列表" + i.ToString();
28: dt.Rows.Add(dr);
29: }
30: DataView dv = new DataView(dt);
31: return dv;
32: }
33: /// <summary>
34: /// 通过ITemplate接口的InstantiateIn(Contrl Container)方法定义要添加的模版列和头和内容
35: /// </summary>
36: public class GridViewTemplate : ITemplate
37: { 38: private DataControlRowType dcrType;
39: private string columnName;
40: public GridViewTemplate(DataControlRowType type, string colname)
41: { 42: dcrType = type;
43: columnName = colname;
44: }
45: public void InstantiateIn(System.Web.UI.Control container)
46: { 47: switch (dcrType)
48: { 49: case DataControlRowType.Header:
50: Literal literal = new Literal();
51: literal.Text = columnName;
52: container.Controls.Add(literal);
53: break;
54: case DataControlRowType.DataRow:
55: DropDownList ddl = new DropDownList();
56: ddl.ID = "dropdownlist";
57: ddl.AppendDataBoundItems = true;
58: ddl.Items.Add(new ListItem("-----请选择------", "")); 59: ddl.Items.Add(new ListItem("AA", "a")); 60: ddl.Items.Add(new ListItem("BB", "b")); 61: ddl.Items.Add(new ListItem("CC", "c")); 62: container.Controls.Add(ddl);
63: break;
64: default:
65: break;
66: }
67: }
68: }
69: /// <summary>
70: /// Handles the Click event of the Button1 control.
71: /// </summary>
72: /// <param name="sender">The source of the event.</param>
73: /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
74: protected void Button1_Click(object sender, EventArgs e)
75: { 76: for (int index = 1; index < GridView1.Columns.Count; index++)
77: { 78: GridView1.Columns[index].Visible = false;
79: }
80: for (int i = 0; i < Convert.ToInt32(DropDownList1.SelectedValue); i++)
81: { 82: TemplateField tf = new TemplateField();
83: tf.ShowHeader = true;
84: tf.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "动态添加列");
85: tf.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "");
86: GridView1.Columns.Add(tf);
87: GridView1.DataSource = CreateDataSource();
88: GridView1.DataBind();
89: }
90: }
91: }
