【问题标题】:How to find all controls in Gridview?如何在 Gridview 中找到所有控件?
【发布时间】:2011-05-11 11:27:47
【问题描述】:

我有一个gridview,其中包含checkbox dropdownlist textbox 等控件。这些控件位于TemplateField 中,有些位于gridview 中的updatepanel 中。有一个EditTemplateField,它有一些控件和一个button。当网格处于编辑模式时,现在我必须在 button click event 的 EditTemplateField 中找到所有控件。我知道这可以使用 foreach 循环来完成,但不知道怎么做?

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    您可以使用网格 EditIndex 来查找包含处于编辑模式的控件的行。从那里您可以使用控件 ID 获取控件。

    TextBox txtItem = (TextBox)Grid1.Rows[Grid1.EditIndex].FindControl("txtItem");
    

    要查找所有控件,请尝试以下操作:

    foreach(Control c in Grid1.Rows[Grid1.EditIndex].Controls)
    {
        // do stuff in here.
    
    }
    

    如果您在行中有容器控件,并且需要在其中查找内容,那么您需要做一些事情来递归到它们的控件中。

    我不明白为什么你需要循环遍历控件,通常编辑模板中的控件将被修复,并且你知道它们是什么,所以直接使用 Findcontrol 访问它们是要走的路。

    【讨论】:

    • +1 @Chris Mullins:我必须找到所有控件,而不仅仅是文本框。所以我需要运行一个循环。
    • 我为你更新了我的答案。詹姆斯的回答也有一个很好的方法来获得某种类型的控件。
    【解决方案2】:

    如果你的意思是在代码中,你可以这样做:

    foreach ( GridViewRow row in MyGridView.Rows )
    {
        TextBox myTextBox = (TextBox)row.FindControl("myTextBox");
    }
    

    【讨论】:

      【解决方案3】:

      这是一个漂亮的实用方法。它是递归的,所以它会找到嵌套的东西,例如

      var listOfControls = Utility.FindControlsOfType<TextBox>(yourGridRow);
      

      如果您不知道嵌套控件的确切类型,请改用 FindControlsOfType

      public static class Utility
      {    
          public static List<T> FindControlsOfType<T>(Control ctlRoot)
          {
              List<T> controlsFound = new List<T>();
      
              if (typeof(T).IsInstanceOfType(ctlRoot))
                  controlsFound.Add((T)(object)ctlRoot);
      
              foreach (Control ctlTemp in ctlRoot.Controls)
              {
                  controlsFound.AddRange(FindControlsOfType<T>(ctlTemp));
              }
      
              return controlsFound;
          }
      }
      

      【讨论】:

        【解决方案4】:

        使用 Firebug 获取生成的 html 并使用 http://jsfiddle.net 您可以包含 jquery 并使用 html。

        将事件处理程序添加到编辑按钮,如

        例如

        function edit(this)
        {
           var textboxID = $(this).parent().find("[id$='textBoxId']");
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-10
          • 2011-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多