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列后就不再是子控件了。

转载于:https://www.cnblogs.com/865145116/p/9987738.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值