linq 查找页面某一类型控件

问题描述

如何用linq查找页面某一类型的控件,以前看到过,很简洁。

解决方案

解决方案二:

解决方案三:
this.Controls.Cast<Control>.Where(x=>xisTextBox).ToList().ForEach(x=>MessageBox(x.Text));

解决方案四:
确实很简洁的不过一直不太习惯linq
解决方案五:
在你的一个publicstatic类中写下这个代码publicstaticIEnumerable<Control>FindAllControls(thisControlctrl){foreach(Controlcinctrl.Controls)yieldreturnc;foreach(Controlcinctrl.Controls)foreach(ControlccinFindAllControls(c))yieldreturncc;}

注意,linq是使用迭代器的,也就是它根本不会去把一堆控件先装到内存里的什么List<Control>,而是会一个一个迭代搜索。所以它占用内存资源少。比如你要在一个GridView中搜寻所有cssClass为noem的LinkButton,并且它所在的行中一定有一个Label控件或者是一个LiteralControl控件的Text值包含着namo这个单词(注意即使所搜索的控件是在用户控件等GridViewItem.FindControl方法找不到的地方),假设我们要把这些LinkButton的color统一设置为red,可以这样写:varquery=fromLinkButtonbtninthis.GridView1.FindAllControls()wherebtn.CssClass=="noem"letrow=btn.NamingContainerasDataGridItemletsubquery=fromcinrow.FindAllControls()where(cisLabel&&((Label)c).Text.Contains("namo"))||(cisLiteralControl&&((LiteralControl)c).Text.Contains("namo"))selectcwheresubquery.Any()selectbtn;foreach(varcinquery)c.ForeColor=Color.Red;

虽然linq有无以伦比的“迭代”特性,也不要滥用它。可以直接使用一条FindControl指令的地方,尽量不要去使用这个查询方法。这个查询方法是使用宽度优先搜索去自顶向下遍历所有控件,而FindControl方法是按照asp.net控件的INamingContainer范围去搜索(并且有内部优化的索引表),后者要小得多,而且快得多。通常我只是在自动化测试程序中才去这样查找控件。
解决方案六:
哦,少了一个判断,重新修改一下:publicstaticIEnumerable<Control>FindAllControls(thisControlctrl){if(ctrl==null)yieldbreak;foreach(Controlcinctrl.Controls)yieldreturnc;foreach(Controlcinctrl.Controls)foreach(ControlccinFindAllControls(c))yieldreturncc;}

解决方案七:
当然,你要理解有关扩展方法的概念,也要知道Linq,还要知道asp.net控件的嵌套层次概念,还要知道树的遍历的概念。最后,要知道为什么应该使用FindControl而不是这类遍历方法,还要知道FindControl到底是怎么查询的(不是这样查询的)。
解决方案八:
mark
解决方案九:
IEnumerable<ListBox>listBoxs=this.Controls.Cast<Control>().Where(c=>c.GetType()==typeof(ListBox)).Select(c=>(ListBox)c);foreach(varvinlistBoxs)MessageBox.Show(v.Text);

解决方案十:
该回复于2011-10-20 13:58:21被版主删除
解决方案十一:
那么久了还没解决?上面都解决不了?

时间: 2024-09-15 14:57:24

linq 查找页面某一类型控件的相关文章

可输入文字查找ajax下拉框控件 ComBox的实现方法_jquery

GooFunc.js文件 //获取一个DIV的绝对坐标的功能函数,即使是非绝对定位,一样能获取到 function getElCoordinate(dom) { var t = dom.offsetTop; var l = dom.offsetLeft; dom=dom.offsetParent; while (dom) { t += dom.offsetTop; l += dom.offsetLeft; dom=dom.offsetParent; }; return { top: t, lef

asp.net页面master页面与ascx用户控件传值的问题_实用技巧

aspx 页面与ascx用户控件传值的问题 1.建立ascx控件 2.给ascx加上属性 3.将控件拖入aspx中 4.在aspx的代码中按控件ID访问属性 如: <uc3:left_Repassword ID="left_Repassword1" runat="server" /> left_Repassword1.HighLight = value; 也同样适用于master页面访问ascx ASP.Net访问母版页(MasterPage)控件.属性

只读 jsp-jsp页面怎么控制所有控件只读

问题描述 jsp页面怎么控制所有控件只读 /// /// 设置当前页面上的所有可输入和选择的控件为只读属性 /// /// public static void SetControlReadOnly(Page page) { foreach (Control ctrl in page.Controls) { SetControlReadOnly(ctrl); } } //递归调用.设置控件只读. public static void SetControlReadOnly(Control ctr)

javascript-在JS写的页面使用active x控件问题

问题描述 在JS写的页面使用active x控件问题 问题是这样:我做了一个active x控件暂时叫A吧(A是基于mfc做的一个复杂的图形界面),A嵌入到我们公司网站的一个页面上这个页面叫W(JJavaScript写的).在ie浏览器打开W后再关闭再打开A,A不能正常显示(也不是所有浏览器都不能正常显示),根据调试情况可以推断是关闭W时,没有释放掉A对象,DLL模块没有卸载,重新打开W时,A所依赖的Dll模块没有重新加载,在新的界面线程调用afxGetThread返回都是空,也就是mfc机制在

我在页面上创建TreeView控件,但是为什么找不到所创建的TreeView控件,在线等哦哦~~~

问题描述 我在页面上创建TreeView控件,但是为什么找不到所创建的TreeView控件页面上已经显示TreeView出来,但是找不到它的ID//创建TreeviewTreeViewtv_root=newTreeView();//创建Treeviewtv_root.Attributes.Add("runat","server");tv_root.Attributes.Add("ShowLines","True");strin

默认让页面的第一个控件选中的javascript代码_表单特效

当页面上面显示了一个表单后,通常焦点 并不是放在第一个控件上面,只需要一点通常的脚本就可以实现这个效果 . document.forms[0].elements[0].focus(); 如果页面的第一个控件是隐藏字段,或是不支持focus() 上面这段javascript 可能就会出现错误 ! 复制代码 代码如下: var formutil = new Object; formutil.focusOnfirst = function() { if(document.forms.length>0)

请问我在.aspx页面中定义的控件,比如&amp;amp;lt;asp:label&amp;amp;gt;等,在.aspx.cs页面中去不能引用,运行老是报错,请高手指点是怎么回事,小弟很着急!

问题描述 请问我在.aspx页面中定义的控件,比如<asp:label>等,在.aspx.cs页面中去不能引用,运行老是报错,请高手指点是怎么回事,小弟很着急! 解决方案 解决方案二:1新建一个网站(VS2005),在设计图中拖入一个Label控件放上去;2在后台.cs文件中,this.Label1.Text="test",即可运行;注:放入的控件会按次序命名为,控件后加编号,如第一个Label就是Label1;

ajax获取php页面的返回参数,控件赋值的方法_AJAX相关

js页面 $.ajax({ type : "get", url : "", //跳转页面 data :"m=content&c=favorite&a=del_favorite&shoucangId="+_id,//传递的参数 datatype : "html", async:'false', success : function(data) //返回值 { if(data !=null) { var s

ajax获取php页面的返回参数,控件赋值的方法

js页面 $.ajax({ type : "get", url : "", //跳转页面 data :"m=content&c=favorite&a=del_favorite&shoucangId="+_id,//传递的参数 datatype : "html", async:'false', success : function(data) //返回值 { if(data !=null) { var s