由于GridView如果动态添加模版列的话,在页面做其他事件时GridView又变为初始状态,所以需要在页面On_InIt里动态绑定上
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Web.UI.WebControls; using System.Web.UI; namespace ZJXTWEB.Public { public class GridViewTemplate : ITemplate { public delegate void EventHandler(object sender, EventArgs e); private DataControlRowType templateType; private string columnName; private string controlID; public GridViewTemplate(DataControlRowType type, string colname) { templateType = type; columnName = colname; } public GridViewTemplate(DataControlRowType type, string controlID, string colname) { templateType = type; this.controlID = controlID; 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: if (this.controlID == "序号") { Label lb = new Label(); lb.ID = this.controlID; lb.DataBinding += new System.EventHandler(lb_DataBinding); container.Controls.Add(lb); } else if (this.columnName == "钻前资料提交内容") { Button btn = new Button(); btn.ID = this.controlID; btn.Text = "请选择钻前资料提交内容"; btn.CommandName = "请选择钻前资料提交内容"; btn.DataBinding += new System.EventHandler(btn_DataBinding); container.Controls.Add(btn); } else { TextBox tb = new TextBox(); tb.ID = this.controlID; if ((this.controlID != "地区或区块") &&(this.controlID != "油井/新井") &&(this.controlID != "水井/老井") &&(this.controlID != "建成能力万吨") &&(this.controlID != "备注")) { tb.Attributes.Add("onfocus", "set_Date(this)"); } tb.Width = 100; tb.DataBinding += new System.EventHandler(tb_DataBinding); container.Controls.Add(tb); } break; default: break; } } void btn_DataBinding(object sender, EventArgs e) { Button btn = sender as Button; if (btn != null) { GridViewRow container = btn.NamingContainer as GridViewRow; if (container != null) { object dataValue = DataBinder.Eval(container.DataItem, "序号"); if (dataValue != DBNull.Value) { btn.CommandArgument = dataValue.ToString(); } } } } void lb_DataBinding(object sender, EventArgs e) { Label lb = sender as Label; if (lb != null) { GridViewRow container = lb.NamingContainer as GridViewRow; if (container != null) { object dataValue = DataBinder.Eval(container.DataItem, columnName); if (dataValue != DBNull.Value) { lb.Text = dataValue.ToString(); } } } } void tb_DataBinding(object sender, EventArgs e) { TextBox tb = sender as TextBox; if (tb != null) { GridViewRow container = tb.NamingContainer as GridViewRow; if (container != null) { object dataValue = DataBinder.Eval(container.DataItem, columnName); if (dataValue != DBNull.Value) { tb.Text = dataValue.ToString(); } } } } } }
其中包括值绑定和动态的为TextBox添加JS事件
protected override void OnInit(EventArgs e) { Init_Table(); #region 初始化GridView for (int i = 0; i < Gvd_Table.Columns.Count; i++) { TemplateField customField = new TemplateField(); customField.ShowHeader = true; customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, Gvd_Table.Columns[i].ColumnName); GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, Gvd_Table.Columns[i].ColumnName, Gvd_Table.Columns[i].ColumnName); customField.ItemTemplate = gvt; GridView1.Columns.Add(customField); } #endregion base.OnInit(e); }
C#后台OnInit里去调用上面那个类,为GridView动态添加值