我有gridview
,其中包含checkbox dropdownlist textbox
等控件。这些控件位于TemplateField
,有些位于gridview中的updatepanel
。有EditTemplateField
有一些控件和button
。当网格处于编辑模式时,现在我必须在button click event
中找到此EditTemplateField中的所有控件。我知道这可以使用foreach循环完成,但不知道如何?
答案 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']");
}