嵌套中继器上的ItemCommand

时间:2015-09-24 10:50:50

标签: asp.net vb.net repeater

我有一个简单的aspx页面,其中包含2个嵌套的中继器。每个都有按钮。当用户点击外部转发器上的按钮时,我可以在我的代码隐藏中捕获ItemCommand,但是当用户点击内部转发器时,我无法捕获它。

我已经在其他主题中阅读了有关需要手动将事件附加到内部转发器的信息,但是无法解决这个问题。

有人可以帮忙吗?

这是aspx。我正在使用vb.net代码

<asp:Repeater runat="server" ID="ParentRepeater">
   <ItemTemplate>
        <li id="P<%#DataBinder.Eval(Container, "DataItem.id")%>">
            <%#DataBinder.Eval(Container, "DataItem.name")%>
            <asp:Button runat="server" ID="adedit" Text="Edit" CommandName='<%#DataBinder.Eval(Container, "DataItem.id")%>'
                class="pages-edit" />
            <asp:Button runat="server" ID="addel" Text="Delete" CommandName='<%#DataBinder.Eval(Container, "DataItem.xid")%>'
                class="pages-delete" />
            <ul class="page-section sub innerdrag">
                <asp:Repeater runat="server" ID="childrepeater">
                    <ItemTemplate>
                        <li id="<%#DataBinder.Eval(Container, "DataItem.id")%>,">
                            <%#DataBinder.Eval(Container, "DataItem.name")%><asp:Button runat="server" ID="ad_edit"
                                Text="Edit" CommandName='<%#DataBinder.Eval(Container, "DataItem.id")%>' class="pages-edit" />
                            <asp:Button runat="server" ID="ad_del" Text="Delete" CommandName='<%#DataBinder.Eval(Container, "DataItem.xid")%>'
                                class="pages-delete" />
                        </li>
                    </ItemTemplate>
                </asp:Repeater>
            </ul>
        </li>
    </ItemTemplate>
</asp:Repeater>

仍然没有开火所以我也把更新的VB放在这里

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim DBFunctions As New DBFunctions.Functions
            Dim dstmp As New DataSet
            Dim dstmp2 As New DataSet
            dstmp = DBFunctions.SQLDataSet("SELECT id,name, 'x'+cast(id as varchar(50)) as xid from pages where parent = 0 and coalesce(active,1)=1 order by orderby asc", "data")
            dstmp2 = DBFunctions.SQLDataSet("SELECT id,name , 'x'+cast(id as varchar(50)) as xid,parent from pages where parent >0 and coalesce(active,1)=1 order by orderby asc", "data2")
            Dim allData As New DataSet
            allData.Tables.Add(dstmp.Tables(0).Copy)
            allData.Tables.Add(dstmp2.Tables(0).Copy)
            allData.Relations.Add(New DataRelation("Children", allData.Tables(0).Columns("ID"), allData.Tables(1).Columns("parent")))
            ParentRepeater.DataSource = allData
            ParentRepeater.DataBind()
            sdhfunctions.Close()
        End If
    End Sub

    Protected Sub repMenu1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles ParentRepeater.ItemDataBound
        Dim dv As DataRowView = TryCast(e.Item.DataItem, DataRowView)
        If dv IsNot Nothing Then
            Dim repSubMenu As Repeater = TryCast(e.Item.FindControl("childrepeater"), Repeater)
            If repSubMenu IsNot Nothing Then
                AddHandler repSubMenu.ItemCommand, AddressOf childrepeater_ItemCommand
                repSubMenu.DataSource = dv.CreateChildView("Children")
                repSubMenu.DataBind()
            End If
        End If

    End Sub
    Protected Sub ParentRepeater_ItemCreated(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles ParentRepeater.ItemCreated
        Dim dv As DataRowView = TryCast(e.Item.DataItem, DataRowView)
        If dv IsNot Nothing Then
            Dim repSubMenu As Repeater = TryCast(e.Item.FindControl("childrepeater"), Repeater)
            If repSubMenu IsNot Nothing Then
                AddHandler repSubMenu.ItemCommand, AddressOf childrepeater_ItemCommand
                repSubMenu.DataSource = dv.CreateChildView("Children")
                repSubMenu.DataBind()
            End If
        End If

    End Sub

    Protected Sub childrepeater_ItemCommand(ByVal source As Object, ByVal e As RepeaterCommandEventArgs)
        Dim stophere As String = ""
    End Sub

我在一个地方放了一个断点,它永远不会受到打击。

对不起,伙计们,我真的很困惑:(

1 个答案:

答案 0 :(得分:0)

试试这个:

Protected Sub ParentRepeater_ItemCreated(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) Handles ParentRepeater.ItemCreated
    Dim childRepeater As Repeater = DirectCast(e.Item.FindControl("childrepeater"), Repeater)
    AddHandler childRepeater.ItemCommand, AddressOf childrepeater_ItemCommand
    childRepeater.DataSource = "the data source for childRepeater"
    childRepeater.DataBind()
End Sub

Protected Sub childrepeater_ItemCommand(ByVal source As Object, ByVal e As RepeaterCommandEventArgs)

End Sub