404 messaggi dal 09 maggio 2012
Ciao ragazzi, è arrivata l'ora di gestire l'eliminazione multipla di elementi items in ListView. Ho pensato a qualcosa del genere (ovviamente accetto pareri e suggerimenti migliori):

Premesso che il listView è incorporato in un UpdatePanel.

Al clic del primo items (che ad esempio cambia BG) invoco una sub che:

- crea una sessione o un hiddenfield
- inserisce l'id dell'item selezionato che passo tramite argomento

Se clicco sullo stesso item:

- verifico che l'id sia presente nella sessione o nell'hidden
- se presente lo elimino altrimenti lo aggiungo

Se clicco su un nuovo e quindi secondo etcc item:

- aggiungo l'id dell'item selezionato alla sessione

e cosi via.


Cliccando poi sul button "elimina selezionati" invoco una sub che:

- preleva tutti gli ID presenti nella sessione o nell'hidden
- avvia un ciclo per il delete dalla rispettiva tabella
- aggiorna l'update panel e il listView

Che ne pensate?
3.939 messaggi dal 28 gennaio 2003
Ti dico solo come faccio io.
1)non uso Ajax.net (UpdatePanel) se non in casi realmente necessari.
2)Nel ListView metto una colonna con un checkbox per riga per selezionare gli elementi da cancellare.
3)una volta che l'utente seleziona le righe (i checkbox) da cancellare, un pulsante, o link, fa partire la procedura lato server.
4) i check box sono di tipo html con name sempre identico ma value=id che voglio cancellare

<input name="check_delete" id="check_delete_<%#Eval("id")%>" type="checkbox" value="<%#Eval("id")%>" />

La procedura che si occupa della cancellazione non fa altro che recuperare la variabile form ricevuta che sarà una cosa del genere:

Dim keys As String = l.RequestParams("check_delete")

Keys contiene gli id da cancellare separati da , tipo "4,8,99,...,147"

e finalmente la query di cancellazione, semplice semplice

Sql = String.Format("DELETE FROM [tabella] WHERE [ID] in ({0}) ", keys)


alla fine aggiorno il ListView col comando

Me.BindData()

ps. nota che è più facile implementarlo che spiegarlo bene!
1.495 messaggi dal 27 dicembre 2005
pietro09 ha scritto:
Ti dico solo come faccio io.
1)non uso Ajax.net (UpdatePanel) se non in casi realmente necessari.
2)Nel ListView metto una colonna con un checkbox per riga per selezionare gli elementi da cancellare.
3)una volta che l'utente seleziona le righe (i checkbox) da cancellare, un pulsante, o link, fa partire la procedura lato server.
4) i check box sono di tipo html con name sempre identico ma value=id che voglio cancellare

<input name="check_delete" id="check_delete_<%#Eval("id")%>" type="checkbox" value="<%#Eval("id")%>" />

La procedura che si occupa della cancellazione non fa altro che recuperare la variabile form ricevuta che sarà una cosa del genere:

Dim keys As String = l.RequestParams("check_delete")

Keys contiene gli id da cancellare separati da , tipo "4,8,99,...,147"

e finalmente la query di cancellazione, semplice semplice

Sql = String.Format("DELETE FROM [tabella] WHERE [ID] in ({0}) ", keys)


alla fine aggiorno il ListView col comando

Me.BindData()

ps. nota che è più facile implementarlo che spiegarlo bene!


Cosi però li recupera tutti anche quelli non flaggati giusto ?
3.939 messaggi dal 28 gennaio 2003
Cosi però li recupera tutti anche quelli non flaggati giusto ?


No! sbagliato.

Qui comanda sempre il semplice html.
Un elemento <input type="checkbox" /> viene trasmesso al server solo se ha un name (non id) e se è selezionato. Se più checkbox hanno lo stesso name e diverso value, viene trasmessa al server una stringa name di valore valore1,valore2,valore3.......

del resto, è meglio che non ti fidi. Fatti una pagina html. Mettici dentro alcuni checkbox con lo stesso name e value diversi, dentro un form. Mettici un pulsante di submit e fai in modo che l'action del form sia una pagina aspx.
Nella pagina aspx recuperi quello che è stato spedito. Così fai la verifica e ti togli ogni dubbio.

ciao
1.495 messaggi dal 27 dicembre 2005
pietro09 ha scritto:
Cosi però li recupera tutti anche quelli non flaggati giusto ?


No! sbagliato.

Qui comanda sempre il semplice html.
Un elemento <input type="checkbox" /> viene trasmesso al server solo se ha un name (non id) e se è selezionato. Se più checkbox hanno lo stesso name e diverso value, viene trasmessa al server una stringa name di valore valore1,valore2,valore3.......

del resto, è meglio che non ti fidi. Fatti una pagina html. Mettici dentro alcuni checkbox con lo stesso name e value diversi, dentro un form. Mettici un pulsante di submit e fai in modo che l'action del form sia una pagina aspx.
Nella pagina aspx recuperi quello che è stato spedito. Così fai la verifica e ti togli ogni dubbio.

ciao


Ok mi ero dimenticato che trasmetteva solo se è flaggata.
Se usa lo stesso name non viene creata una matrice invece che una stringa ?
3.939 messaggi dal 28 gennaio 2003
quando usi Request.Form(nome) oppure Request.QueryString(nome), il risultato va in una stringa.

Ma ti ripeto ancora: prova. Non c'è altro mezzo per andare tranquilli.
404 messaggi dal 09 maggio 2012
E' che non mi piaceva l'idea della checkbox ... volevo creare qualcosa di più carino, un pò come il delete in stile Android per intenderci. Quindi devo necessariamente "inventare" qualcosa di diverso ...
404 messaggi dal 09 maggio 2012
Mi spiegheresti per cortesia questa stringa ?

Sql = String.Format("DELETE FROM [tabella] WHERE [ID] in ({0}) ", keys)

ovvero...qui non stai facendo nessun ciclo ? la parte che mi incuriosisce è questa "WHERE [ID] in ({0}) ", keys)".

- Il numero tra parentisi graffe cosa indica?
- basta questa stringa per cancellare tutti gli item con gli ID contenuti in "keys" ?

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.