Asp.net - 如何在我的文档中查找所有gridview

时间:2009-10-25 22:24:06

标签: asp.net gridview

我的aspx文件中有4个网格视图。我可以像下面那样关闭他们的页脚

if (admin == false){
  GridView1.ShowFooter = false;
        GridView2.ShowFooter = false;
        GridView3.ShowFooter = false;
        GridView4.ShowFooter = false; }

但我想用“for”或“for each”来做到这一点。谢谢你现在的帮助。

3 个答案:

答案 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;
    }
  }
}