GridView動態創建模板列templateField

 找了很多資料,對動態模板列的創建有一定的瞭解,集合了下網上的一些精華。

繼承ITemplate類,動態創建textbox,checkbox,dropdownlist等,並動態綁定數據

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;

                        case "dropdownlist":

 
                    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:
                            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();

                   //cbox.Text = ((DataRowView) row.DataItem)[colName].ToString(); 
                    break;
            }

        }

 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
148 
149     {
150 
151         if (e.Row.RowType == DataControlRowType.DataRow)
152 
153         {
154 
155             //可以在這裏訪問數據庫的其它字段的值,可以設置默認選擇項,具體應用,看自己的發揮了。
156 
157             //下面只是例子,舉一反三

158 
159             DataRowView gv = (DataRowView)e.Row.DataItem;
160 
161             int itemSeleted = Int32.Parse(gv.Row["id"].ToString()) > 3 ? 0 : Int32.Parse(gv.Row["id"].ToString());
162 
163             DropDownList dr = (DropDownList)e.Row.FindControl("dropdown");
164 
165             dr.SelectedIndex = itemSeleted;
166 
167         }
168 
169     }

    }

 

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);

 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章