GridView动态添加模版列

由于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动态添加值

posted @ 2012-08-20 16:56  xiaoxu1987  阅读(184)  评论(0编辑  收藏  举报