DataList包DataList中建立子DataList的ItemCommand事件

DataList包DataList此種用法最常見的如部落格文章的回應功能。頁面中使用DataList來Show出多筆文章,文章的DataList中再套入Datalist來顯示多筆回應內容。如此形成兩層DataList的情況後,我們在實作時首先會發現在Vistual Studio中找不到子DataList的事件選項供自己選擇。

遇到此種情況便需要我們自己來手動建立子DataList事件了。在網路上你可以找到不只一種建立子DataList的方法,在此我將個人認為最簡單的建立事件方法記錄如下。

方法:
手動建立Public Sub後,在子DataList中指定OnItemCommand事件並觸發Public Sub。我們需要作的事是在DataList2中手動輸入OnItemCommand=" Plublic Sub事件名稱 " (如程式第10行)。

Test.aspx
   1: <asp:DataList ID="DataList1" runat="server" DataKeyField="拜訪編號" 
   2:     DataSourceID="SqlDataSource1">
   3:     <ItemTemplate>
   4:         <font color="red">
   5:             拜訪編號:
   6:             <asp:Label ID="拜訪編號Label" runat="server" Text='<%# Eval("拜訪編號") %>' />
   7:             <asp:Button ID="Button1" runat="server" Text="按鈕1" CommandName="TestButton" />
   8:         </font>
   9:         <asp:DataList ID="DataList2" runat="server" 
  10:         DataSourceID="SqlDataSource2" OnItemCommand="DataList2_ItemCommand">
  11:         <ItemTemplate>
  12:             拜訪目的:
  13:             <asp:Label ID="拜訪目的Label" runat="server" Text='<%# Eval("拜訪目的") %>' />
  14:             <asp:Button ID="Button1" runat="server" Text="按鈕2" CommandName="TestButton2" />
  15:         </ItemTemplate>
  16:         </asp:DataList>
  17:         <br />
  18:     </ItemTemplate>
  19: </asp:DataList>

在Test.aspx.vb中建立Public Sub,其名稱為OnItemCommand事件指定呼叫的名稱。

Test.aspx.vb


   1: Public Sub DataList2_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs)
   2:     If e.CommandName = "TestButton2" Then
   3:         Response.Write("This is DataList2")
   4:     End If
   5: End Sub

在我們按下按鈕2後便可以正確觸發子DataList的ItemCommand事件
2010-04-03_105109

0 意見:

張貼留言