posts - 5,comments - 2,trackbacks - 0
    最近在用GridView的时候用到FindControl()在TemplateField中发现总是Find不到,在网上搜索了一下,发现很多朋友跟我遇到的问题一样,而且网上很多人的解决方法不是很好,我自己总结了一下:
    对于在RowDataBound中Find,可以用if (e.Row.RowType == DataControlRowType.DataRow)来限制Find的范围,因为Find默认是在HeaderTemplate中找,如果不限定范围,在HeaderTemplate中找不到,自然就返回null,然后就出错了,DataControlRowType枚举中的DataRow确定是数据行.
    另一个是在RowCommand中,我发现遇到这个问题的朋友貌似比上一个要多,在RowCommand中,如果使用GridView默认的模式,e.CommandArgument自动棒定为该行的Index,这时候只要指定gridview1.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("xxx")就可以了,但是如果转化为Template,e.CommandArgument并不会自动绑定任何值,需要手动绑定,可以在<ItemTemplate></ItemTemplate>手动写CommandArgument="<%# ((GridViewRow) Container).RowIndex %>",把这个行的 Index绑定绑定到该e.CommandArgument就可以了.很多初学者在这里不明白为什么要这么做,其实我也是初学者,简单的说一下,就是行是根据数据循环的,每一行都有同样的控件,如果不指定行的Index,简单的写gridview1.findcontrol("xxx"),IDE并不知道要找哪个控件所以要指定行号.
posted on 2008-07-07 15:47 FrostX 阅读(186) 评论(0)  编辑 收藏 所属分类: .NET技术

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-09 22:40 编辑过