asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

asp.net利用NamingContainer属性获取GridView行号的方法


发布日期:2019年09月26日
 
asp.net利用NamingContainer属性获取GridView行号的方法
在最近的一个项目中用到在GridView模板列中添加有DropDownList控件并开启其AutoPostback属性当发生SelectedIndexChanged事件时想同时获取其所在的行号从而获取相应的行信息由于DropDoweList与button不同无法指定其CommandName所以也就没办法通过常规的方法捕获所在行的索引颇费了些周折后来找到用NamingContainer属性解决了问题
先来看看微软对该属性的解释

获取对服务器控件的命名容器的引用此引用创建唯一的命名空间以区分具有相同 ControlID 属性值的服务器控件
ASPNET  Web 应用程序的每一页均包含控件的层次结构此层次结构与控件是否生成用户可见的 UI  无关给定控件的命名容器是层次结构中该控件之上的父控件此父控件实现 INamingContainer  接口实现此接口的服务器控件为其子服务器控件的 ID 属性值创建唯一的命名空间
当针对列表 Web 服务器控件(如 Repeater 和  DataList  服务器控件)进行数据绑定时为服务器控件创建唯一的命名空间尤其重要当数据源中的多个项创建服务器控件的多个实例且该服务器控件是重复控件的子级 时命名容器确保这些子控件的每个实例具有不沖突的 UniqueID 属性值页的默认命名容器是请求该页时生成的 Page 类的实例
可以使用此属性确定特定服务器控件所在的命名容器

特别是最后一句话
下面是SelectedIndexChanged事件的代码摘要
复制代码 代码如下:
DropDownList ddl = (DropDownList)sender;
GridViewRow gvr = (GridViewRow)ddlNamingContainer;
int id = intParse(GridViewDataKeys[gvrRowIndex][]ToString());
int num = intParse(ddlText);
第一句用来获取触发事件的DropDownList控件
第二句就利用该控件的NamingContainer属性获取其容器也就我想要的GridViewRow对象
有了这个其它的都是常规用法问题迎刃而解               

上一篇:ASP.NET中MD5与SHA1加密的几种方法

下一篇:asp.net JSON序列化与反序列化使用