现在的位置: 首页 > 综合 > 正文

GridView动态创建templateField

2013年10月08日 ⁄ 综合 ⁄ 共 3342字 ⁄ 字号 评论关闭

 今天有些时间,把用cs代码添加编辑列及动态添加编辑模板作了整理。动态添加编辑列比较简单,即

TemplateField tf=new TemplateField(),但难得是 往编辑列里动态添加编辑模版项 ItemTemplate。那天上网找了好多资料,才找到解决方法。先创建一个类继承模板接口 ITemplate,用构造函数实现返回Template类。废话不多说了,现给出例子,看了就清楚了。例子延续前面的动态绑定字段列的。

创建Template 的类 cs:GVItemTemplate.cs

public class GridViewItemTemplate:ITemplate
    {
        private string obj;  //控件对象的字符串,以此来判断具体创建哪个控件
        private DataControlRowType templateType;  //当前行的模板 (Header,item)
        private string colName;  //控件要显示的字符,或是绑定数据源的字段列名
        public GridViewItemTemplate(DataControlRowType rtype, string controlStr, string colN)
        {
            templateType = rtype;
            colName = colN;
            obj = controlStr;
        }
        public GridViewItemTemplate(DataControlRowType rtype, string colN)
        {
            templateType = rtype;
            colName = colN;
            obj = "TextBox";
        }
        public void InstantiateIn(System.Web.UI.Control container)
        {
            switch (templateType)
            {
                case DataControlRowType.Header:  
                            Literal headlt = new Literal();
                            headlt.Text = colName;
                            container.Controls.Add(headlt);
                            break;

                 case DataControlRowType.DataRow:
                    switch (obj.ToLower())
                    {
                        case "htmlcheckbox":
                            HtmlInputCheckBox cbkeys = new HtmlInputCheckBox();
                            cbkeys.ID = "cb_keys";
                            cbkeys.DataBinding += new EventHandler(this.CheckBoxDataBinding);
                            container.Controls.Add(cbkeys);
                            break;
                        default:
                            TextBox myTextBox = new TextBox();
                            myTextBox.DataBinding += new EventHandler(this.TextBoxDataBinding);
                            container.Controls.Add(myTextBox);
                            break;

                    }
                    break;
                default:
                    break;
            }
        }
        private void TextBoxDataBinding(Object sender, EventArgs e)
        {

            TextBox myTextBox = (TextBox)sender;
            GridViewRow row = (GridViewRow)myTextBox.NamingContainer;
            myTextBox.Text = System.Web.UI.DataBinder.Eval(row.DataItem, colName).ToString();

        }
        private void CheckBoxDataBinding(Object sender, EventArgs e)
        {
            GridViewRow row=null;
            switch (obj.ToLower())
            {
                case "htmlcheckbox":
                    HtmlInputCheckBox hcbox = (HtmlInputCheckBox)sender;
                    row= (GridViewRow)hcbox.NamingContainer;
                    hcbox.Value = System.Web.UI.DataBinder.Eval(row.DataItem, colName).ToString();
                    break;
                default:
                    CheckBox cbox = (CheckBox)sender;
                    row = (GridViewRow)cbox.NamingContainer;
                    cbox.Text = System.Web.UI.DataBinder.Eval(row.DataItem, colName).ToString();
                    break;
            }

        }
    }

 

使用GridView控件的页面 cs代码:TestGridView.aspx.cs

void BindFields(int tbid)
 {
        TemplateField tf = new TemplateField();
         tf.ItemTemplate = new GridViewItemTemplate(DataControlRowType.DataRow, "htmlcheckbox", "dataKey");
         tf.HeaderTemplate = new GridViewItemTemplate(DataControlRowType.Header, "htmlcheckbox", "");
         tf.HeaderStyle.CssClass = "cbox";
         this.gv_Data.Columns.Add(tf);

 }

抱歉!评论已关闭.