在嵌套列表视图中查找控件

时间:2009-03-09 20:04:22

标签: asp.net

我正在使用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行收到“未设置为对象实例的对象引用”错误。

2 个答案:

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