我的aspx文件中有4个网格视图。我可以像下面那样关闭他们的页脚
if (admin == false){
GridView1.ShowFooter = false;
GridView2.ShowFooter = false;
GridView3.ShowFooter = false;
GridView4.ShowFooter = false; }
但我想用“for”或“for each”来做到这一点。谢谢你现在的帮助。
答案 0 :(得分:2)
类似的东西:
void doSomething(Control c)
{
GridView g = c as GridView;
if (g!=null)
{
g.ShowFooter=false;
}
foreach(Control c2 in c.Controls)
{
doSomething(c2);
}
}
请注意,我没有编译上面的内容。这个想法是你通过某个容器中的所有控件(你的页面应该很好),找到GridViews,使用gridview做一些事情(例如将Showfooter设置为false),然后通过该控件的Controls数组进行递归。
旁注:有人指出他们不理解
的重要性GridView g = c as GridView;
与常规的typecase不同
GridView g = (GridView)c;
如果转换无效,“as”关键字将返回null - 即控件不是GridView。
修改强> 另一种(非常易读)检查类型的方法:
if (c is GridView) g = c as GridView;
答案 1 :(得分:0)
将此代码与ztech的方法结合起来
if (g.GetType() == typeOf(GridView))
{
(GridView)c.ShowFooter = false;
}
这种方法的工作量应该少一些,因为它不会尝试在页面上转换每个控件,只有那些类型为GridView的控件。
答案 2 :(得分:0)
您的页面有一个Controls集合,其中包含您网页上的所有顶级控件。在这些下,每个控件都有一个Controls集合,所以一个非常天真的实现可能如下所示:
private void FindGridView()
{
foreach (Control ctrl in Page.Controls)
{
GridView gv = ctrl as GridView;
if (gv == null)
{
ParseCollection(ctrl);
}
else
{
gv.ShowFooter = false;
}
}
}
private void ParseCollection(Control parentCtrl)
{
if (gv.Controls == null || gv.Controls.Count == 0)
return;
foreach (Control ctrl in parentCtrl.Controls)
{
GridView gv = ctrl as GridView;
if (gv == null)
{
ParseCollection(ctrl);
}
else
{
gv.ShowFooter = false;
}
}
}