2011-08-21 5 views
1

i m ayant la hiérarchie suivante dans ma page aspxcontrôle Nested ListView

<asp:ListView ID="ListView1" DataSourceID="SqlDataSource1" runat="server"> 
    <ItemTemplate> 
     ... 

     <asp:ListView ID="ListView2" DataKeyNames="statusID" runat="server" 
      DataSourceID="SqlDataSource2" 
      ItemPlaceholderID="pl" 
      OnItemCommand="ListView2_ItemCommand"> 
       <LayoutTemplate> 
         <asp:PlaceHolder ID="pl" runat="server"/> 
         ... 
         <asp:Button ID="Button2" runat="server" Text="Post"/> 
       </LayoutTemplate> 

       <ItemTemplate> 
         ... 
       </ItemTemplate> 
     </asp:ListView> 
    </ItemTemplate> 
</asp:ListView> 

maintenant si je clique alors Bouton2 événement ListView2_ItemCommand est tiré.

protected void ListView2_ItemCommand(object sender, ListViewCommandEventArgs e) 

à l'intérieur du gestionnaire e.item est null, pourquoi?

+0

Je ne suis pas encore sûr à 100%, mais qu'est ce que 'e.CommandName' dans le gestionnaire (quand' e.item = null')? – jadarnel27

+0

c'est "" et c'est ok parce que je n'ai pas mis le CommandName de Button2 –

+0

je pense que Button2 est dans LayoutTemplate thats pourquoi je reçois e.Item comme nulle. Mais je veux qu'il soit là tout en communiquant avec ListView2. –

Répondre

0

il devrait y avoir ItemTemplate avec CommandArgument

Par ex

<ItemTemplate>  
    <asp:ImageButton ID="ImgBtn" runat="server" CommandName="Select" CommandArgument='<%#Eval("ProductId")%>' />  
</ItemTemplate> 
0
  1. Comment se lient-vous que les contrôles? Vérifiez que ListView2 n'est plus lié après PostBack. Si c'est à nouveau lié, la commande sera annulée. Pourquoi utilisez-vous une vue liste imbriquée? Avez-vous envisagé d'utiliser les groupes http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.groups.aspx?

+0

effectivement je dois accéder aux données de deux tables différentes, donc j'ai utilisé listview imbriqué .. –

0

En général, si vous avez un lvInner ListView niché dans un ListView lvOuter, utilisez le gestionnaire lvOuter_ItemCommand et la propriété CommandSource des ListViewCommandEventArgs.

Ce qui suit a fonctionné pour moi:

protected void lvOuter_ItemCommand(object sender, ListViewCommandEventArgs e) 
{ 
    ListView lvInner = (ListView)e.Item.FindControl("lvInner"); 
    lvInner.SelectedIndex = lvInner.Items.IndexOf((ListViewDataItem)e.CommandSource); 
    int innerID = (int)lvInner.SelectedDataKey["InnerID"]; 
    // etc. 
} 

S'il vous plaît noter que dans ce cas lvInner est imbriqué dans l'ItemTemplate lvOuter.