templatefield 动态_动态添加 GridView 的模板列

声明式数据绑定中介绍了 GridView 的模板,但这种模板都是在 .aspx 中定义好了的,如何利用程序动态制定模板呢?

其实不复杂,首先要创建一个字段类。

public class MyTemplate : System.Web.UI.ITemplate

{

public MyTemplate()

{

}

public void InstantiateIn(System.Web.UI.Control container)

{

System.Web.UI.LiteralControl lc = new System.Web.UI.LiteralControl();

lc.DataBinding += new EventHandler(Item_DataBinding);

container.Controls.Add(lc);

}

private void Item_DataBinding(object sender, System.EventArgs e)

{

System.Web.UI.LiteralControl lc = (System.Web.UI.LiteralControl)sender;

System.Web.UI.WebControls.GridViewRow gvr = (System.Web.UI.WebControls.GridViewRow)lc.NamingContainer;

lc.Text = Convert.ToString(System.Web.UI.DataBinder.Eval(gvr.DataItem, "CategoryName"));

}

}

然后,动态添加模板。

System.Web.UI.WebControls.TemplateField tf = new System.Web.UI.WebControls.TemplateField();

tf.ItemTemplate = new MyTemplate();

GridView1.Columns.Add(tf);

//GridView1.Columns.Insert(0, tf);

问题

那不是每个字段都要建立一个类?不嫌麻烦吗?

其实不必,我们可以改变 MyTemplate 的构造函数,传入我们想要的参数,实现我们想要的功能。

TemplateField 和 TemplateColumn 有什么区别?

TemplateField 适用于 GridView 和 DetailsView,而 TemplateColumn 仅适用 DataGrid。

除了 TemplateField,其他字段的名字是什么?比如命令字段。

BoundField、ButtonField、CheckBoxField、CommandField、HyperLinkField、ImageField、TemplateField 等。

我想动态添加一个按钮列,支持事件吗?

要让程序响应这个按钮事件,我还没找到方法,因为 InstantiateIn 是在 GridView 的 DataBind 之后执行的,我曾试图在外面建立一个按钮并设置好事件,然后通过 MyTemplate 构造函数,传进去,结果仍然不行。我在网上找了很多资料,都没找到解决方案。有两篇说他成功了,但说很模糊,并且我照他说的做,却没成功。

相关阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值