今天有些时间,把用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);
}