templatefield 动态_GridView动态创建templateField | 学步园
今天有些時(shí)間,把用cs代碼添加編輯列及動(dòng)態(tài)添加編輯模板作了整理。動(dòng)態(tài)添加編輯列比較簡(jiǎn)單,即
TemplateField tf=new TemplateField(),但難得是 往編輯列里動(dòng)態(tài)添加編輯模版項(xiàng) ItemTemplate。那天上網(wǎng)找了好多資料,才找到解決方法。先創(chuàng)建一個(gè)類(lèi)繼承模板接口 ITemplate,用構(gòu)造函數(shù)實(shí)現(xiàn)返回Template類(lèi)。廢話(huà)不多說(shuō)了,現(xiàn)給出例子,看了就清楚了。例子延續(xù)前面的動(dòng)態(tài)綁定字段列的。
創(chuàng)建Template 的類(lèi) cs:GVItemTemplate.cs
public class GridViewItemTemplate:ITemplate
{
private string obj;? //控件對(duì)象的字符串,以此來(lái)判斷具體創(chuàng)建哪個(gè)控件
private DataControlRowType templateType;? //當(dāng)前行的模板 (Header,item)
private string colName;? //控件要顯示的字符,或是綁定數(shù)據(jù)源的字段列名
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控件的頁(yè)面 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);
}
總結(jié)
以上是生活随笔為你收集整理的templatefield 动态_GridView动态创建templateField | 学步园的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 聚生网管
- 下一篇: mail发送的内容显示为附件的解决办法