27 messaggi dal 07 gennaio 2008
Ciao a tutti.

Ho un problema.

Ho un campo testo con un Buttone. Inserisco una data (01/01/2008) nel campo testo. Premo il bottone. Scatta il postback della pagina. Nel Page_Load creo una GridView a runtime. I dati teoricamente vengono filtrati dal campo data.
Dico teoricamente, perchè questo avviene solo nel passaggio successivo, ed è un bel problema .

Ma a questo a voi non interessa, perchè tra un po' chiederò se c'è un modo di capire chi o cosa ha fatto scattare un evento da page_load. Ma prima, preferisco darvi una visione generale del problema, qualora qualcuno mi volesse chiedere a cosa mi serva avere un informazione del genere. )

Questa è la situazione:

    protected void Page_Load(object sender, System.EventArgs e)
    {
...
        PreparaStrutturaGriglia();
...
        {
            CreaFormatoGriglia();
        }
    }

    protected void Bottone_Click(object sender, System.EventArgs e)
    {
            CreaFormatoGriglia();
    }


In verità sono io che ho creato il problema... perchè la soluzione è:

    protected void Page_Load(object sender, System.EventArgs e)
    {
...
        PreparaStrutturaGriglia();
...
        {
            // NON RICHIAMO PIU' IL METODO: CreaFormatoGriglia();
        }
    }

    protected void Bottone_Click(object sender, System.EventArgs e)
    {
            CreaFormatoGriglia();
    }


e il gioco è fatto (ihihihi).

Il mio capo però vuole che la griglia abbia, tra i suoi campi, un campo di tipo link che faccia scattare un dato evento.

    protected void Page_Load(object sender, System.EventArgs e)
    {
...
        PreparaStrutturaGriglia();
...
        {
            // NON RICHIAMO PIU' IL METODO: CreaFormatoGriglia();
        }
    }

    void CreaFormatoGriglia()
    {
            //... gestione del link button della griglia
            //... associazione l'evento LinkCampoGriglia_Click al link button
    }

    protected void Bottone_Click(object sender, System.EventArgs e)
    {
            CreaFormatoGriglia();
    }

    protected void LinkCampoGriglia_Click(object sender, System.EventArgs e)
    {
            //... apro una popup
    }


Ora, per come stanno le cose, se qualcuno volesse far click sul campo della griglia, l'evento non scatterebbe mai!

Al postback scattato dal click del link button, la griglia costruita a runtime al primo caricamento della pagina, viene nuovamente ricostruita.
Ma, come potete vedere, il riferimento all'evento viene perso, e in questo modo il popup non viene aperto poichè non entra nel metodo LinkCampoGriglia_Click(...).

Soluzione: Decommentare CreaFormatoGriglia() nel Page_Load
Nuovo Problema: Il filtro non mi funziona più.

Come vedete, mi sono incastrato per bene!!!

La soluzione che ora sto cercando io, è quella di capire per quale motivo il tutto viene filtrato al post successico... il problema non risulta banale e, considerando che non è mio il codice... e neanche chi lo ha sviluppato ha una vaga idea di cosa non va nel giro che si fa, è chiaro che ci vorra moooolto tempo prima che si risolva. Putroppo il sistema è molto complesso... parliamo dell'ordine di 1500 righe di codice.

Quello che chiedo a voi, è ben diverso.

    protected void Page_Load(object sender, System.EventArgs e)
    {
...
        PreparaStrutturaGriglia();
...
        if( /* E' stato cliccato il link button? */ )
        {
            CreaFormatoGriglia();
        }
    }

    void CreaFormatoGriglia()
    {
            //... gestione del link button della griglia
            //... associazione l'evento LinkCampoGriglia_Click al link button
    }

    protected void Bottone_Click(object sender, System.EventArgs e)
    {
            CreaFormatoGriglia();
    }

    protected void LinkCampoGriglia_Click(object sender, System.EventArgs e)
    {
            //... apro una popup
    }


C'è un modo, per l'appunto, di capire chi ha fatto scattare l'evento da page_load, perchè fatto questo, intanto metto una "TOPPA" al problema, e con più calma, provo a riparere il problema principale.

Il Dio di questa gente ha mostrato loro con milioni di azioni di non rispettare alcuno dei comandamenti della Bibbia. Egli li viola uno per uno, adulterio e tutto il resto.

(Mark Twain)
dai un occhiata allo #576

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
27 messaggi dal 07 gennaio 2008
Marco, una parola... MITICOOOOOOOOOOOOOOOOOO

Ti dico ceh intanto la storia ora ha la sua TOPPA...
Ma per curiosità: ho il button... metto nella pagina il metodo di override, ma Request.Form["__EVENTTARGET"] mi torna ""... mi sfugge qualcosa?

PS: Sto lavorando all'interno di un ASCX

Il Dio di questa gente ha mostrato loro con milioni di azioni di non rispettare alcuno dei comandamenti della Bibbia. Egli li viola uno per uno, adulterio e tutto il resto.

(Mark Twain)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.