Gridview控件的RowDataBound事件使用中 无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型
无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型
使用GridView的时候,相信很多朋友都遇到过“无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为...类型”
在一次项目中我在TemplateField列中加入一个imagebutton控件,在RowDataBound事件中使用(( System.Web.UI.WebControls.ImageButton)e.Row.Cells[2].Controls[0]).Style.Add("FILTER", "gray");
结果编译时 报上述错误
后改成:((System.Web.UI.WebControls.ImageButton)e.Row.Cells[2].FindControl("btnLocat")).Style.Add("FILTER", "gray");编译通过!
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
2 {
3 if (e.Row.RowType == DataControlRowType.DataRow)
4 {
5 if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)
6 {
7 ((LinkButton )e.Row.Cells[10].FindControl ("LinkButton3")).Attributes.Add("onclick", "javascript:return confirm('你确认要删除作物:" + e.Row.Cells[1].Text + "的相关信息吗?')");
8 }
9 }
10 }
这里的区别是:Controls[0]和FindControl(id) 。.NET智能提示:
Controls[0]为System.Web.UI.ControlCollection 类,是UI层次结构中服务器控件的子控件。
FindControl()的功能是在当前命名容器中搜索指定ID的服务器控件。
这样就非常清楚了两者的作用,因为TemplateField中添加的控件是GridView这个容器中的控件而非子控件,而buttonfield则是属于子控件。但是当buttonfield强制转换为TemplateField列后就不再是子控件了。
最新文章
- 【6年开源路】FineUI家族今日全部更新(FineUI + FineUI3to4 + FineUI.Design + AppBox)!
- 使用CSS隐藏HTML元素的4种常用方法
- js 对闭包的理解
- table中设置border的问题
- Linux system log avahi-daemon[3733]: Invalid query packet
- swift 创建单例模式
- Visual Studio 启动修复命令
- HTML、html
- idea 文件名乱码问题的解决
- [wikioi]传纸条
- VS2013服务器资源管理器添加Mysql数据源
- 自行搭建私有云ownCloud,启用SSL,其他配置
- hdu 3974 线段树 将树弄到区间上
- Tomcat访问路径去掉发布项目的项目名称
- Flask 系列之 Migration
- 菜鸡学C语言之寻根溯源
- 通过设置ie的通过跨域访问数据源,来访问本地服务
- Codeforces 797B - Odd sum
- Java编程的逻辑 (47) - 堆和PriorityQueue的应用
- java 内存分析之堆栈空间