2011-08-02 5 views
6

私はリピータコントロールを使用して自分のページにデータを表示しています。asp.netリピータコントロールでアイテムのクリックイベントを取得するには?

リピータアイテムテンプレートには、イメージとラベルフィールドがあります。

画像をクリックすると、自分のデータ項目のIDフィールドを含むイベントが表示されます。

どうすればこの問題を解決できますか?

実際に画像をクリックすると、別のページに行きたいと思って、自分のデータ項目の詳細情報をリピーターに表示したいのですが、ちょっとした情報しか表示されません。

<asp:Repeater ID="itemRepeater" runat="server" OnItemCreated="itemRepeater_ItemCreated" > 

      <ItemTemplate> 
       <tr> 
        <td colspan="2"> 
         <asp:Image ID="phImage" runat="server" ImageUrl='<%#"~/ImageHandler.ashx?id=" + DataBinder.Eval(Container.DataItem, "PhotoID")%>' /> 
        </td> 
        <td> 
         <asp:Label ID="lblImageName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' /> 
        </td> 
       </tr> 
      </ItemTemplate> 
</asp:Repeater> 

私は画像をクリックすると、イベントにPhotoIDを取得したい:

私のリピータは、このようになります。

私の写真のクラスは、次のようになります。

public class PhotoDC 
    {  
     public byte[] ImagebyteArray { get; set; }  
     public string Name { get; set; } 
     public int PhotoID { get; set; } 
    } 

私はWinフォームのプログラミングだけで始まったウェブをやっている、多分それは簡単ですが、私は解決策を見つけるのに苦労メートル。

私は何とか画像にカーソルを合わせるとハンドカーソルを表示することができました。

答えて

11

これを試してみてください:

<asp:Repeater ID="itemRepeater" runat="server" OnItemCreated="itemRepeater_ItemCreated" >  
    <ItemTemplate> 
     <tr> 
     <td colspan="2"> 
      <asp:ImageButton ID="phImage" runat="server" ImageUrl='<%#"~/ImageHandler.ashx?id=" + DataBinder.Eval(Container.DataItem, "PhotoID")%>' OnCommand="Image_Click" CommandName="ImageClick" CommandArgument='<%# Eval("PhotoID") %>' /> 
     </td> 
     <td> 
      <asp:Label ID="lblImageName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' /> 
     </td> 
     </tr> 
    </ItemTemplate> 
</asp:Repeater> 

protected void Image_Click(object sender, CommandEventArgs e) 
{ 
    if (e.CommandName == "ImageClick"){ 
     //e.CommandArgument --> photoid value 
     //Do something 
    } 
} 
0

個人的には、このようなことを処理する最も簡単な方法は、コードビハインドではなく、通常のhtmlリンクを生成するために単にItemTemplateを使用することです。このような何か:

<asp:Repeater ID="itemRepeater" runat="server" OnItemCreated="itemRepeater_ItemCreated" > 

     <ItemTemplate> 
      <tr> 
       <td colspan="2"> 
        <a href="/Details.aspx?id=<%=DataBinder.Eval(Container.DataItem, "PhotoID")%>"> 
        <asp:Image ID="phImage" runat="server" ImageUrl='<%#"~/ImageHandler.ashx?id=" + DataBinder.Eval(Container.DataItem, "PhotoID")%>' /> 
        </a> 
       </td> 
       <td> 
        <asp:Label ID="lblImageName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' /> 
       </td> 
      </tr> 
     </ItemTemplate> 

私は、これは厳密にあなたが尋ねた質問ではないですけど、私見タスクを達成するための最良の方法です。

3

あなたはこのようにリピータ制御 のItemCommandを使用することができます -

protected void itemRepeater_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     if (e.CommandName == "img_Click") // check command is cmd_delete 
      { 
      // get you required value 
      int CustomerID = Convert.ToInt32(e.CommandArgument); 

      //Write some code for what you need 

      } 
     } 
} 
関連する問題