ASP.NET 2.0 中动态添加 GridView 模板列的例子

mac2022-07-01  22

动态添加列,关键是实现 ITemplate.InstantiateIn 方法。下面是一个添加 GridView 模板列的例子。

C#代码

<% ... @ 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";          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 > < 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 >

转载于:https://www.cnblogs.com/spark_wu/archive/2009/03/24/1420396.html

相关资源:25个经典网站源代码
最新回复(0)