Repeater - přístup ke komponentám (2)   zodpovězená otázka

ASP.NET WebForms

Dobrý den,

rád bych poprosil o pomoc ...

Mám následující "Repeater" , ve kterém mám na každém řádku tlačítko ID="IButtonItemAdd" s událostí OnClick="IButtonItemAdd_Click" ...

<asp:Repeater ID="Repeater2" runat="server" DataSourceID="SqlDataSource2">
  <ItemTemplate> 
  <tr>
  <td style="width:30px; text-align:center;"><asp:ImageButton ID="IButtonItemAdd" runat="server" ImageUrl="~/images/ico_nk.jpg" OnClick="IButtonItemAdd_Click" /></td>
  <td style="width:40px; text-align:left;"><asp:TextBox ID="txt_AddKs" runat="server" Width="20px" Text="1" CssClass="TextBox_02" MaxLength="3"></asp:TextBox>&nbsp;<asp:RequiredFieldValidator ID="txt_AddKsRequired" runat="server" ControlToValidate="txt_AddKs">*</asp:RequiredFieldValidator><asp:RegularExpressionValidator ID="txt_AddKsRegular" runat="server" ControlToValidate="txt_AddKs" ValidationExpression="^[1-9]+[0-9]?">?</asp:RegularExpressionValidator></td>
  <td style="width:100px;"><asp:Label ID="lbl_ObjKod" runat="server" Text='<%# Eval("ObjKod") %>'></asp:Label></td>
  <td style="width:100px; text-align:left;"><asp:Label ID="lbl_KodSortimentu" runat="server" Text='<%# Eval("KodSortimentu") %>'></asp:Label></td>
  <td style="width:280px; text-align:left;"><asp:Label ID="lbl_Sortiment" runat="server" Text='<%# Eval("Sortiment") %>'></asp:Label></td>  
  <td style="width:80px; text-align:right;"><asp:Label ID="lbl_AktCena" runat="server" Text='<%# Eval("AktCena","{0:C}") %>'></asp:Label></td>
  <td style="width:50px; text-align:right;"><asp:Label ID="lbl_SumCena" runat="server" Text='<%# Eval("SazbaDPH") %>'></asp:Label></td>
  <td style="width:80px; text-align:right"><asp:Label ID="lbl_SazbaDPH" runat="server" Text='<%# Eval("AktCenaDPH","{0:C}") %>'></asp:Label></td>  
  </tr>    
  </ItemTemplate>    
  </asp:Repeater>

A nyní bych potřeboval v té události

Protected Sub IButtonItemAdd_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
        
End Sub

pracovat s hodnoto lbl_ObjKod.Text toho řádku, ve kterém jsem kliknul na tlačítko ID="IButtonItemAdd"

Děkuji za pomoc

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Každá položka Repeateru je tzv. naming container - část stránky, v níž komponenty musí mít unikátní ID.

Stačí tedy parametr sender přetypovat na Button, čímž dostanete tlačítko, které událost vyvolalo. Podíváte se do jeho vlastnosti NamingContainer, což je dalo by se říci instance šablony ItemTemplate pro konkrétní řádek. Na tomto NamingContaineru, který je typu Control, zavoláte FindControl s ID toho labelu a přetypujete si to na Label.

Anebo můžete tlačítku nastavit CommandName na nějaký název (třeba "MyCommand"), CommandArgument na hodnotu toho labelu (klasickým Eval bindingem) a chytat místo události Click tlačítka událost ItemCommand repeateru. Tam si otestujete e.CommandName, jestli je rovno CommandName toho tlačítka a pokud ano, z e.CommandArgument dostanete hodnotu v labelu nebo to, co si do toho argumentu nabindujete.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji moc,

s pomocí toho článku (na který upozorňuje kolega) jsem dal dohromady tu první variantu a funguje to.

Zde je funkční kód pro případné zájemce:

Protected Sub IButtonItemAdd_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
        Dim Btn As ImageButton = CType(sender, ImageButton)
        Dim ObjKod As String = CType(Btn.NamingContainer.FindControl("lbl_ObjKod"), Label).Text
    End Sub

Ještě jednou díky i za upozornění na ten článek - bez něho bych to asi nedal dohromady.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jen bych doplnil že tahle věc se i řešila v článku: Píšeme webovou aplikaci v ASP.NET krok za krokem (část 4), http://www.vbnet.cz/clanek--114-zaciname...

Sice je to tam pro komponentu GridView ale tak přepsat to není snad problém.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback