2011-08-21 67 views
1

I M具有以下層次結構在我的aspx頁面嵌套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> 

如果我現在點擊Button2的那麼ListView2_ItemCommand事件。

protected void ListView2_ItemCommand(object sender, ListViewCommandEventArgs e) 

處理程序內部e.item爲空,爲什麼?

+0

我當然不是%100,但是處理程序中的'e.CommandName'是什麼(當'e.item = null'時)? – jadarnel27

+0

它是「」,這沒關係,因爲我沒有設置Button2的CommandName –

+0

我認爲Button2是在LayoutTemplate這就是爲什麼我得到e.Item爲空。但我希望它仍然在那裏,而仍然與ListView2進行通信。 –

回答

0

應該有ItemTemplateCommandArgument

例如

<ItemTemplate>  
    <asp:ImageButton ID="ImgBtn" runat="server" CommandName="Select" CommandArgument='<%#Eval("ProductId")%>' />  
</ItemTemplate> 
0

在一般情況下,如果你有嵌套一個ListView lvOuter內一個ListView lvInner,使用handler lvOuter_ItemCommand和ListViewCommandEventArgs的CommandSource財產。

以下爲我工作:

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. 
} 

請注意,在這種情況下lvInner嵌套lvOuter的ItemTemplate模板內。