GridView - jak zavolat funkci pomoci onclick   zodpovězená otázka

ASP.NET WebForms

Dobrý den,

Řešim načtení dat z databaze do textovych polí při kliknutí na řádek v GridView. Z řádku na který kliknu, zjistim ID a pomoci něj pak načtu z databaze údaje vybraneho záznamu. Jenže... Jak mohu udělat v kódu to, že mi onclick na řádek zavolá funkci?

Již mne napadlo řešit to takto:

    Protected Sub Grid_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles Grid.RowCreated
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes.Add("onclick", "window.location.href='PracovniDoba.aspx?id=" & e.Row.DataItem("ID").ToString & "'")
        End If
    End Sub

Tímto ke každému řádku v kterém jsou data přidám onclick, který pak znovu zavolá stránku a předá ID. Já pak musím po každém načtení vychytávat podmínku, zda hlavička atribut ID obsahuje nebo ne.

Nezdá se mi to ale zrovna ideální a chtěl bych se zeptat, zda by nešlo přímo zavolat nějakou mou vytvořenou funkci?

Představoval bych si něco takového:

 e.Row.Attributes.Add("onclick", NactiRadek(e.Row.DataItem("ID")))

To ale bohužel nejde. Děkuji za odpověď.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tady je potřeba rozlišit kód v javascriptu, který běží v prohlížeči, a kód v .NETu, který běží na serveru. Z javascriptu nemůžeme jen tak prostě zavolat funkci na serveru.

To, co potřebujete, se dá elegantní udělat pomocí technologie ASP.NET AJAX, ale jde to i bez ní.

Pro začátek zkuste do GridView přidat nový sloupeček typu TemplateField a do něj vložte komponentu LinkButton. Do její vlastnosti CommandName dejte nějaké slovo (má to být vlastní název příkazu, dejte tam třeba Test) a do vlastnosti CommandArgument nalijte dotyčné ID:

... CommandArgument='<%#Eval("ID")%>' ...

Pak můžete zareagovat na serveru na událost Click té komponenty LinkButton. ID zjistíte tímto řádkem uvnitř té události:

Dim id As String = CType(sender, LinkButton).CommandArgument

Nemusíte tedy složitě šaškovat s URL adresou. Jak to udělat, aby to fungovalo na kliknutí na řádek, to už je složitější a z hlavy to nevím.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji, ale pomoci LinkButtonu jsem to už dělal. Také jsem do něj byl schopen vložit přímo onclick="" a do něj funkci, kterou jsem chtěl zavolat. A to je právě to co mne inspirovalo k tomuto nápadu. Říkám si, že když to jde přes LinkButton, musí to i nějak jít pro celý řádek.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Já také nemluvím o onclicku v javascriptu, mám na mysli serverový OnClick, který se spouští na serveru. Stačí na LinkButton ve Visual Studiu poklepat myší a vygeneruje se událost OnClick.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ano, vím jaký je rozdíl mezi JavaScriptem, pracujícím u klienta a ASP.NETem zpracovávajícím úlohy na servru. Vím, že jsem jako příklad uvedl právě JavaScriptový onclick, jenže já ho uvedl jen jako jediné východisko, které mne napadlo. Jako náhradu serverového onclicku, na který nemůžu a nemůžu přijít. Existuje tedy serverova událost pro onclick řádku v GridViewu?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

No, GridView vlastně umí vybírat jednotlivé řádky kliknutím na ně, takže by tam serverová událost být měla (ale těžko říct). Z hlavy to teď nevím.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za pomoc. Budu tedy dále hledat. Pokud najdu, vložím to tady.

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