2015-09-24 2 views
0

У меня есть простая страница aspx, содержащая 2 вложенных репитера. У каждого из них есть кнопки на них. Когда пользователь нажимает кнопку на внешнем ретрансляторе, я могу захватить ItemCommand в моем коде, но когда пользователь нажимает на внутренний, я не могу его захватить.ItemCommand на вложенном репитере

Я читал в других тонах о необходимости прикрепить событие вручную к внутреннему ретранслятору, но не могу это обработать.

Может ли кто-нибудь помочь?

Асп. Я использую код 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 

я поставил точку останова на stophere, и он никогда не получает удар.

Извините, ребята, я действительно путают :(

+0

Является ли это реальный код, который вы используете Там, кажется, нет подписки на повторитель ItemCommand события внешней по – Andrei

+0

The itemcommend находится на кнопках родительского ретранслятора, и я могу захватить их в коде. Однако я не могу захватить команду item на внутренних кнопках ретранслятора. –

+0

Зачем вам когда-либо захотеть захватить это в коде? Что не так с помощью ' '? – Andrei

ответ

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 
+0

Я преобразовал это в VB.net и попробовал его, однако я все еще не могу захватить itemcommand на кнопках внутреннего ретранслятора. Это то, что он стал 'Protected Sub ParentRepeater_ItemCreated (отправитель As Object, е Как RepeaterItemEventArgs) Dim childRepeater Как Repeater = TryCast (e.Item.FindControl ("childrepeater"), повторитель) AddHandler childRepeater.ItemCreated, AddressOf Childrepeater_ItemCommand End Sub Private Sub childrepeater_ItemCommand (источник As Object, е Как System.Web.UI.WebControls.RepeaterItemEventArgs) Dim stophere As String = "" End Sub' –

+0

Извините, я заплачу за свою ошибку в C# , Позвольте мне получить этот ответ за вас. – thewisegod

+0

Извините, я не могу получить код для форматирования в своем комментарии. Я ненавижу web dev lol (кроме того, что он платит мои счета!) –