找了很多資料,對動態模板列的創建有一定的瞭解,集合了下網上的一些精華。
繼承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);
}