在GRIDVIEW中获取控件的编辑模板中的值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[1])).Text.ToString()
和((Label)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString()
的区别
在GRIDVIEW设计器那里,编辑模板,发现它有五个template:
●ItemTemplate-----常态模板
●AlternatingItemplate-----交互变换模板
●EditItemplate---------编辑状态模板
●HeaderTemplate------头文本模板
●FooterTemplate-----脚文本模板
其中前三项是与rows[].cells[]中的controls有关的。因为ItemTemplate 、AlternatingItemplate、EditItemplate 这三个模板是放在同一个单元格内的,所以这三个模板的所有控件同属于一个controls 集。并且它们的索引的优先顺序就是1.ItemTemplat 2.AlternatingItemplate 3.EditItemplate。
一般情况下,在ItemTemplate有一个label控件,AlternatingItemplate 没有控件。在EditTemplate中有一个TextBox控件。于是Controls集内有两个控件:Label排行第一,索引为0,TextBox排第二,索引为1。
于是在获取编辑模板的值时用:
((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[1])).Text.ToString() 在使用boundfield字段时,内容的显示不是以label控件形式表示,而是直接非控件形式表示,boundfield字段只有在编辑状态下才使用TextBox控件。所以,它使用GridView1.Rows[e.RowIndex].Cells[1].Controls[0]来表示,编辑状
态时的TextBox控件。
而对于由boundfield字段转成的Itemtemplate字段,它将内容以label控件的形式来显示,于是Controls[0]是表示这个在非编辑状态下的label控件,而不是编辑状态下的TextBox控件。
对于itemtemplate 来说,每个单元格内的三种状态模板,只在对应的状态下它的visible才是true其它状态下都是false;这样的最终效果是,编译后,在网页上有些控件是不存在了,但是这不代表那些在网页上不存在的元素,在服务器端,它就不存在的,它在服务器端,是存在的,只是看不见而已。所以,这也是为什么.net要引入controls这个集合的重要原因之一吧?(