我正在使用Matt Berseth的例子构建一个可折叠的分组网格 mattberseth.com/blog/2008/01/building_a_grouping_grid_with.html
它有一个内部列表视图“lvInner”嵌套在外部列表视图“lvOuter”中。 我正在尝试使用
访问lv_Inner中的文本框Protected Sub lvInner_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles lvInner.ItemDataBound
If e.Item.ItemType = ListViewItemType.DataItem Then
Dim tb As TextBox = TryCast(e.Item.FindControl("lvOuter").FindControl("lvInner").FindControl("TextBox1"), TextBox)
' Do something to TextBox1
End If
EndSub
我在Dim tb行收到“未设置为对象实例的对象引用”错误。
答案 0 :(得分:0)
你需要简单地做e.Item.FindControl(“textbox”),e.Item已经作用于正确的listView。
Protected Sub lvInner_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) Handles lvInner.ItemDataBound
If e.Item.ItemType = ListViewItemType.DataItem Then
Dim tb As TextBox = TryCast(e.Item.FindControl("TextBox1"), TextBox)
' Do something to TextBox1
End If
EndSub
答案 1 :(得分:0)
FindControl很方便,但不是递归的。
如果您在页面上深度嵌套控件,则可能需要递归搜索页面的控件层次结构以找到所需的控件。
编写自己的方法......
C#示例:(使用任何免费的VBtoC#在线工具进行转换)
public static System.Web.UI.Control FindControlFromTop(System.Web.UI.Control start, string id, System.Web.UI.Control exclude)
{
System.Web.UI.Control foundControl;
if (start != null && id != null)
{
foundControl = start.FindControl(id);
if (foundControl != null)
if(foundControl.ID.Equals(id))
return foundControl;
foreach (System.Web.UI.Control control in start.Controls)
{
if (control != exclude)
foundControl = FindControlFromTop(control, id, null);
if (foundControl != null)
if (foundControl.ID.Equals(id))
return foundControl;
}
}
return null;
}