2011-08-01 9 views
0

次のリピーターがあると仮定します。リピーターフッターからコントロールイベントを処理する

<asp:Repeater ID="MyRepeater" runat="server" onitemdatabound="MyRepeater_ItemDataBound"> 
    <FooterTemplate> 
     </table> 
     <asp:Button ID="btnPrevious" runat="server" Text="<" /> 
     <asp:Label ID="lblCurrentPage" runat="server" Text="<%# PagingStatus() %>" /> 
     <asp:Button ID="btnNext" runat="server" Text=">" /> 
    </FooterTemplate> 
</asp:Repeater> 

どのように私はbtnPreviousbtnNextからのクリックイベントを処理することができますか?

私は次のことを試してみました:

protected void MyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    Button btnPrevious = (Button)e.Item.FindControl("btnPrevious"); 
    Button btnNext = (Button)e.Item.FindControl("btnNext"); 

    if (btnPrevious != null) 
     btnPrevious.Click += btnPrevious_Click; 
    if (btnNext != null) 
     btnNext.Click += btnNext_Click; 
} 

しかし、これは(イベントが発生されることはありません)失敗した。..

答えて

3

をあなたは、通常のボタンのイベントハンドラを使用するのと同じ方法でそれらを使用することができます例えば:

HTML:

<asp:Button ID="btnNext" runat="server" CommandArgument="<%=Id%>" onclick="Button_OnClick" Text=">" /> 

コード:

protected void Button_OnClick(object sender, EventArgs e) 
{ 
    Button button = sender as Button; 
    if(button != null) 
    { 
     string commandArg = button.CommandArgument; 
     //Do Work 
    } 
} 

コマンド引数を使用して、クリックされたボタンを見つけることができます。
これが役に立ちます。

2

リピーターのItemCommandイベントを使用することをお勧めします。あなたはまだあなたのボタンにコマンドを追加する必要があります。このように:

<asp:Button ID="btnPrevious" runat="server" Text="<" CommandName="Previous"/> 

protected void MyRepeater_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    if(e.CommandName.ToLower().Equals("previous")) { 
     //go back 
    } 
    else 
    { 
     //go forward 
    } 
}