天天看點

ASP.NET 2.0 中動态添加 GridView 模闆列

  動态添加列,關鍵是實作 ITemplate.InstantiateIn 方法。下面是一個添加 GridView 模闆列的例子。

  C#代碼 Www^Chinaz^com

<%...@ Page Language="C#" %>

<%...@ Import Namespace="System.Data" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">...

  ICollection CreateDataSource()

  ...{

    DataTable dt = new DataTable();

    DataRow dr;

    dt.Columns.Add(new DataColumn("id", typeof(Int32)));

    dt.Columns.Add(new DataColumn("text", typeof(string)));

    for (int i = 0; i < 6; i++)

    ...{

      dr = dt.NewRow();

      dr[0] = i;

      dr[1] = "清單項目 " + i.ToString();

      dt.Rows.Add(dr);

    }

    DataView dv = new DataView(dt);

    return dv;

  } 

  public class GridViewTemplate : ITemplate

  ...{

    private DataControlRowType templateType;

    private string columnName;

    public GridViewTemplate( DataControlRowType type, string colname )

    ...{

      templateType = type;

      columnName = colname;

    }

    public void InstantiateIn( System.Web.UI.Control container )

    ...{

      switch (templateType)

      ...{

        case DataControlRowType.Header:

          Literal lc = new Literal();

          lc.Text = columnName;         

          container.Controls.Add(lc);         

          break;

        case DataControlRowType.DataRow:

          DropDownList drr = new DropDownList();

          drr.ID = "dropdown"; Www_Chinaz_com

          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;

        default:

         break;

      }

    }

  }

  protected void Page_Load(object sender, EventArgs e)

  ...{

    if (!IsPostBack)

    ...{

      TemplateField customField = new TemplateField();

      customField.ShowHeader = true;

      customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "動态添加列");

      customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "");

      GridView1.Columns.Add(customField);

      GridView1.DataSource = CreateDataSource();

      GridView1.DataBind();

    }

  } 站.長站

  protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e )

  ...{

    if (e.Row.RowType == DataControlRowType.DataRow)

    ...{

      //可以在這裡通路資料庫的其它字段的值,可以設定預設選擇項,具體應用,看自己的發揮了。

      //下面隻是例子,舉一反三,不再費話了

      DataRowView gv = (DataRowView)e.Row.DataItem;

      int itemSeleted = Int32.Parse(gv.Row["id"].ToString()) > 3 ? 0 : Int32.Parse(gv.Row["id"].ToString());

      DropDownList dr = (DropDownList)e.Row.FindControl("dropdown");

      dr.SelectedIndex = itemSeleted;

    }

  }

</script> Chinaz~com

<html xmlns="http://www.w3.org/1999/xhtml">

<head id="Head1" runat="server">

  <title>GridView動态添加模闆列的例子</title>

</head>

<body>

<form id="form1" runat="server">

  <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"

     OnRowDataBound="GridView1_RowDataBound">

    <Columns>

      <asp:BoundField HeaderText="标題"  DataField="text"/>

    </Columns>

  </asp:GridView>

</form>

</body>

</html>