2011-08-02 18 views
6

Sayfamdaki bazı verileri göstermek için tekrarlayıcı kontrolü kullanıyorum.Asp.net tekrarlayıcı denetiminde madde tıklama olayı nasıl alınır?

Tekrarlayıcı öğesi şablonunda bir görüntü ve bir etiket alanı vardır.

Görüntüyü tıklattığımda, veri öğemdeki kimlik alanını içeren bir olay alıyorum.

Bunu nasıl başarabilirim?

Aslında resme tıkladığımda başka bir sayfaya gitmek istiyorum ve veri sayfamın ayrıntılı bilgilerini görmek istiyorum, tekrarlayıcıda sadece kısa bilgiler gösteriyorum.

Benim tekrarlayıcı şöyle görünür:

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

Ben görüntüyü tıkladığımda olay PhotoID almak istiyorum.

Fotoğrafım sınıfı şöyle görünür:

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

ben yeni başladım web winform programlama yapıyor belki kolaydır ama ben bir çözüm bulmak için mücadele ediyorum.

Görüntüyü aldığımda el imlecini göstermeyi bir şekilde başardım.

cevap

11

bu deneyin:

<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

Şahsen böyle bir şeyle başa çıkmanın en basit yolunun, kodun arkasında herhangi bir şey yapmak yerine, düzenli bir html bağlantısı oluşturmak için ItemTemplate'u kullanması olduğunu düşünüyorum. Böyle bir şey:

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

Bu kesinlikle sen sorulan soru değil biliyorum ama IMHO görevi başarmak için en iyi yaklaşımdır.

3

Böyle tekrarlayıcı kontrol ait ItemCommand kullanabilirsiniz -

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 

      } 
     } 
} 
İlgili konular