如何在Gridview中找到所有控件?

时间:2011-05-11 11:27:48

标签: c# asp.net gridview

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

4 个答案:

答案 0 :(得分:4)

您可以使用网格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 :(得分:2)

如果您在代码中表示可以这样做:

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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

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

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

例如

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