Gridview, PageIndexChanged e Javascript

mercoledì 28 ottobre 2009 - 15.19

LuxSkyWalker Profilo | Junior Member

Ciao a tutti...

Ho un problema: al click sul cambiamento di pagina di una gridview, ho bisogno che mi appaia una popup di conferma con un messaggio del tipo:"Cambiando pagina perdi le modifiche: sei sicuro? [S/N]".

So che devo farlo con uno script, ma le mie conoscenze di javascript sono molto limitate e non riesco...

Qualcuno può aiutarmi, magando postando un po' di codice simile?

Grazie...
LuxSkyWalker
Junior Developer .NET

martinez Profilo | Senior Member

Ciao
forse potrebbe bastare il seguente codice ??? oppure intendevi altro?

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Antonio

Gluck74 Profilo | Guru

anche io credo che sia una soluzione prettamente JavaScript.
La cosa più semplice l'ha già detta Martinez.

Viceversa ci sono delle librerie o controlli che ti permettono di customizzare le popUp per renderle più appetibili in pratica sono dei div html che appaiono al tuo comando), ma se sei proprio a digiuno di javascript, lascerei stare.
comunque sarebbero:
http://www.mootools.net/
http://jquery.com/
http://www.asp.net/ajax/AjaxControlToolkit/Samples/

ciao ciao

LuxSkyWalker Profilo | Junior Member

Innanzitutto,
grazie per avermi risposto.

Nel codice postato si fa riferimento ad un button, mentre invece il codice javascript dev'essere richiamato al click sul cambio pagina della gridview.
Ma su questo non c'è problema...aggiungo alla gridview l'evento OnPageIndexChanging="GridView1_PageIndexChanging" (sul codice aspx), e richiamo poi il javascript sulla pagina di codice (aspx.cs).
Correggetemi se sbaglio, perchè sono parecchio inesperto sul javascript.
Definisco un metodo javascript sulla pagina aspx, metodo che al click dell'indice della pagina mi apre una popup con la domanda "Vuoi cambiare pagina?" e 2 button SI o NO. Giusto???
Ho bisogno di sapere come gestisco il click sul SI o il click sul NO.
Se avete capito il problema e se potete, postatemi un pezzetto di codice che sono parecchio in difficoltà!!!

Grazie...
LuxSkyWalker
Junior Developer .NET

martinez Profilo | Senior Member

Buongiorno!

se il tuo problema è quello di gestire soltanto la richiesta di conferma se cambiare più o meno pagina ... Io che non sono un grande esperto in javascript ti propongo sempre la soluzione di cui al precedente post ... che agisce sul pulsante ... e quindi sul pulsante inserito nel pager ...

il pager di una griglia può essere modificato e personalizzato come tantissime altre cosette della fantastica griglia ... lo facciamo utilizzando il <PagerTemplate> della griglia:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

fatto questo andiamo a gestire gli eventi generati dai pulsanti del pager nell'evento RowCommand della tua griglia che qui ho nominato gwNews:

protected void gwNews_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Prima") { gwNews.PageIndex = 0; } if (e.CommandName == "Precedente") { gwNews.PageIndex --; } if (e.CommandName == "Successiva") { gwNews.PageIndex ++; } if (e.CommandName == "Ultima") { gwNews.PageIndex = gwNews.PageCount - 1; } }

ho praticamente messo in atto il giochino della conferma da parte dell'utente ... gli eventi ok ed annulla della popup sono gestiti automaticamente se la risposta è ok esegue il comando altrimenti no!

Scusa se l'esempio è "infantile"... ma l'ho fatto per rendere chiare le cose i tuoi pulsanti ad esempio possono avere una grafica migliore ed a tuo piacimento!!!

spero di essere stato d'aiuto

Antonio

LuxSkyWalker Profilo | Junior Member

Ringrazio anche te...

Ho parzialmente risolto il problema...nel senso che ora, al click del cambio pagina mi si presenta la popup con la domandina e la scelta di premere OK o ANNULLA (cosa dovrei cambiare per avere SI o NO???).

Ora si tratta di gestire il click sui pulsanti.

Se clicco su annulla, non succede nulla...rimane sulla pagina corrente della griglia.
Se clicco su OK, mi deve richiamare il metodo ASP.NET salva, creando nel code-behind...so che javascript è client-side mentre asp.net è server-side e quindi direttamente non si riesce (Framework 2.0!). Ma mi è stato detto che con un controllo hidden, una scappatoia la si trova...

Potete aiutarmi?
Come devo fare?

LuxSkyWalker
Junior Developer .NET

martinez Profilo | Senior Member

>Ringrazio anche te...
>
prego figurati!

>Ho parzialmente risolto il problema...nel senso che ora, al click
>del cambio pagina mi si presenta la popup con la domandina e
>la scelta di premere OK o ANNULLA (cosa dovrei cambiare per avere
>SI o NO???).
Scusa ma non credo si possa fare ... magari qualcuno sa cosa suggerire ...
l'unico sistema per avere SI/NO e che ti crei una funzione tua personalizzata e la richiami

>Ora si tratta di gestire il click sui pulsanti.
>Se clicco su annulla, non succede nulla...rimane sulla pagina
>corrente della griglia.
>Se clicco su OK, mi deve richiamare il metodo ASP.NET salva,
>creando nel code-behind...so che javascript è client-side mentre
>asp.net è server-side e quindi direttamente non si riesce (Framework
>2.0!). Ma mi è stato detto che con un controllo hidden, una scappatoia
>la si trova...

se clicchi ok ... userei l'evento: OnClick="btnSalva_Click" del pulsante che hai creato ... se stai usando il metodo suggerito da me ....

A questo punto però ... nasce una domanda spontanea ??? se vuoi ????

Ma scusa come è possibile perdere i dati inseriti se cambi pagina ???? e poi perchè utilizzi un metodo tuo personalizzato per il salvataggio dei dati ????

hai un DataSource in questa griglia ??? mi spieghi meglio cosa stai facendo???

>
>Potete aiutarmi?
>Come devo fare?
>
ci sto provando a dare una mano

>LuxSkyWalker
>Junior Developer .NET

Ciao, ciao

LuxSkyWalker Profilo | Junior Member

Grazie ancora per l'attenzione...proverò ad essere un po' più chiaro...

Ho una gridview paginata, con la paginazione automatica...ci sono i pulsantini predefiniti in basso per cambiare pagina, non la gestisco io...quindi, al click sull'indice della pagina che si vuole vedere, ho scatenato l'evento OnPageIndexChanging...

Ecco come è definita la mia gridView...
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Al click dunque, si presenta la popup OK/CANCELLA...vi posto l'evento...
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

dove Conferma() è un metodo javascript cosi definito nel aspx:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

In pratica, se dalla popup scelgo OK, deve richiamarmi il metodo salva, scritto nel cs.Ma dal momento che ovviamente javascript è client e aspx è server, non posso chiamarlo direttamente.E allora ho dovuto usare un hidden al cui value_changed, mi richiama il metodo nel cs.

protected void HiddenField1_ValueChanged(object sender, EventArgs e) { btnSalva_Click(this, e); }
Questo mio modo di procedere è l'unico che ho trovato su internet, e allora ho provato ad adottarlo...ma mi va in errore sul js perchè mi dice che dopo
var tmp = document.getElementsById('HiddenField1');

tmp è null...perchè non riesco ad intercettare l'oggetto?Dove sbaglio?C'è una soluzione migliore per il mio problema?Che devo fare?

Grazie...
LuxSkyWalker
Junior Developer .NET

martinez Profilo | Senior Member

>Grazie ancora per l'attenzione...proverò ad essere un po' più
>chiaro...

Prego figurati !!!!

>Ho una gridview paginata, con la paginazione automatica...ci
>sono i pulsantini predefiniti in basso per cambiare pagina, non
>la gestisco io...quindi, al click sull'indice della pagina che
>si vuole vedere, ho scatenato l'evento OnPageIndexChanging...
>
>Ecco come è definita la mia gridView...

bene mi fermo qui al commento ... dal codice si nota che utilizzi un ObjectDataSource ... WOW!!! ... allora mi chiedo ancora ... perchè perdi i dati se cambi pagina ??? e soprattutto perchè non lasci gestire gli evetni update delete e select dall'ObjectDataSource?

ossia se hai un metodo update all'interno del DataSource vedrai che alla pressione del tasto OK ... l'aggiornamento dei dati avviene automaticamente ... se ne occupa lui ... o per meglio dire il metodo che hai scritto per l'aggiornamento ...

sono stato chiaro?

scusa se non ho letto tutto il tuo codice ... ma forse è meglio capirci prima

ad esempio io uso griglie, ObjectDataSource e Sql ... in questo modo:

1) mi definisco una classe di accesso ai dati (connessione, adapter, reader, command eccetera)
2) mi definisco una classe per ogni oggetto (o meglio entità oppure tabella) del mio DB ed all'interno della quale inserisco (almeno) i metodi per select, insert, update e delete
3) aggancio il datasource alla griglia la personalizzo ... fine del discorso da questo momento in poi fa tutto da sola ...

oppure non ci ho capito n'accipicchia di nulla?

Antonio

LuxSkyWalker Profilo | Junior Member

Mmh...diciamo che è un progetto pensato un po' con i piedi...lo devo fare al lavoro, e l'analista funzionale diciamo che è un po' un cane...

Io ho un'analisi funzionale da seguire...mi è stata richiesta questa popup di conferma al cambio pagina, e cosi devo fare...ho inoltre avuto 3 giorni per svilupparlo e testarlo (domani è l'ultimo) e quindi non ho potuto riflettere sulla soluzione migliore...in pratica è una semplice pagina che mi presenta una gridview come quella che ho postato...questa grid contiene una lista di nominativi read-only e un checkbox (il template) modificabile...true o false...poi ho un button salva che salva i dati presenti...e fino a qui è tutto ok...i miei problemi sono semplicemente come fare a richiamare l'evento server "btnSalva_Click()" dal click sull'ok della popup client javascript che mi appare al click sul onpagechanging della gridview...e poi sono a posto...come scrivevo, mi hanno consigliato un hidden che vado a popolare dal codice javascript e al onvaluechanging dell'hidden, richiamo il "btnSalva_Click()" che serve a me...ma non funziona e non capisco il perchè...è per questo che ho postato il codice nel post precedente...

...cmq di solito io uso i SqlDataSource...questa volta ho dovuto usare gli ObjectDataSource perchè trovo più pratico accedere ai dati run-time!

Ciao,
grazie
LuxSkyWalker
Junior Developer .NET

martinez Profilo | Senior Member

Ciao!
allora visto che funziona così ... e basta ... io userei una soluzione come quella da me proposta ... tanto hai accesso alla griglia, ne modifichi il pager della stessa come descritto nei miei post precedenti e colleghi ogni pulsante del pager al tuo evento per salvare i dati ... Io credo che in 5 minuti il lavoro sia finito, testao e pronto per essere consegnato!

Antonio

LuxSkyWalker Profilo | Junior Member

Mmh...domani mattina proverò a riflettere su tutto quanto hai detto, e poi vedo se sono in grado e se soprattutto faccio in tempo...domani sarà una di quelle giornate lavorative stile "Panino al volo mentre continuo a lavorare"...grazie, domani sera ti aggiorno su quanto ho fatto...

LuxSkyWalker
Junior Developer .NET
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5