Událost buňky v dynamicky vytvořené tabulce   zodpovězená otázka

ASP.NET WebForms, WinForms

Zdravím,

Chtěl bych se zeptat.Mám dynamicky vytvořenou tabulku.Chtěl bych,po kliknutí na buňku,zavolat událost aniž bych musel do každé buňky přidávat dynamicky button.Myslím,že existuje přidat atribut onClick,ale nechci to řešit přes JavaScript.Tedy pro pochopení.Kliknu na jakoukoliv buňku,zavolá se událost(např uložení ID)a např. v Labelu se zobrazí ID právě kliknuté buňky.Mohl bych poprosit o radu,jak to řešit?díky

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

Pokud tabulku vytváříte dynamicky,tak přiřaďte ke každé buňce handler a máte hotovo.

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

A jak se ten handler přidává k té buňce a jak se s ním poté pracuje? Dík

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

Kliknutí na buňku se musí řešit pomocí javascriptu, jinak to nejde. Odeslat stránku na server bez skriptu umí jen <input type="submit"... nebo <input type="image"..., tedy komponenty Button nebo ImageButton. Jakýkoliv jiný způsob (třeba i blbý LinkButton) už javascript vyžaduje, i když ho třeba nemusíte psát ručně. Ale interně se použije, to jen tak pro informaci.

Záleží, co přesně chcete při kliknutí na buňku udělt, ale pokud to jde, řešte to pomocí javascriptu. Třeba opsání ID do labelu je s jQuery sranda na dva řádky. Dělat kvůli tomu postback na server je naprosto zbytečné a uživetele to bude jenom otravovat, přenese se víc dat atd.

Pokud chcete dělat po kliknutí na buňku něco sofistikovanějšího, tak to bude trochu problém, ve zkratce se to dělá takhle (píšu z hlav,y třídy nebo rozhraní se možná jmenují trochu jinak):

1. Vytvoříte třídu, která dědí z TableCell a implementuje IPostBackEventHandler a INamingContainer.

2. Při renderování té buňky do atributu onclick vygenerujete javascript, dělá se to metodou GetPostBackEventReference, například v metodě AddAttributesToRender.

3. Do třídy přidáte public event EventHandler Click a protected virtual void OnClick(EventArgs e), která zkontroluje, jestli Click je null a když ne, tak zavolá Click(this, e).

4. V metodě, kterou předepisuje rozhraní IPostBackEventHandler, vyvoláte událost Click, kterou si do té třídy dáte taky spolu s metodou OnClick, která ji vyvolá.

5. Tabulku pak místo klasických TableCell naplníte instancemi třídy, kterou jste právě napsal, a přidáte obsluhy pro událost Click.

Až se budete vztekat, proč to nefunguje, tak si zkontrolujte, že při každém postbacku tabulku vygenerujete už v události Load nebo dřív, a že je strom komponent vždycky naprosto stejný. Jinak to nebude fungovat.

nahlásit spamnahlásit spam 3 / 3 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