Problema editmode con dropdown

lunedì 05 giugno 2006 - 09.44

zseven Profilo | Senior Member

Ciao Ragazzi,
ho un problema che non riesco a risolvere.
Ho un datagrid che quando mi va in editmode per alcuni campi deve mostrarmi il dropdown. E fin qui tutto a posto.
Il problema sta nei valori del dropdown.
Questi devono dipendere dal valore della prima dropdown.
Quindi in pratica devo fare una query recuperando l'id della prima dropdown.
Io questo ID lo recupero nell'evento OnITemDataBound, ma purtroppo non riesco a portarmelo nella query in cui popolo la seconda dropdown.
Vi posto un pò di codice:

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

Spero riusciate a darmi una mano.
Grazie


zseven Profilo | Senior Member

Grazie per la risposta, ma ancora nonriesco...
il viewstate no nl'ho mai utilizzato, e cercando un pò in giro ho provato a fare una cosa del genere... ma ovviamente non funziona.
Nell' ONITEMBOUND ho assegnato l'id così:

ViewState(ID_sup_cat) = DDLTemp.SelectedItem.Value
dove ID_sup_Cat è dichiarata per tutta la pagina come integer

Quindi nella Sub POPOLADDL() ho fatto così la query così:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Però non funziona correttamente.
In pratica la prima volta che clicco sul pulsante EDIT mi dice che il valore di ID_sup_cat è vuoto.
Dalla seconda in poi mi restituisce il valore della riga precedente...

In cosa ho sbagliato?
Grazie

zseven Profilo | Senior Member

scusa ma non ho capito il tuo ultimo mess...

zseven Profilo | Senior Member

Dunque il valore c'è nel momento in cui lo assegno alla Viewstate.
Ho fatto la prova così:

'SEMPRE NELL'ONITEMBOUND

ViewState(ID_sup_cat) = DDLTemp.SelectedItem.Value lblerrore.Text = ViewState(ID_sup_cat)

Poi però in pratica la query è come se avesse un click di ritardo.
Al primo click non carica niente.
Al secondo click carica in base all'id da cui provieni, e così via per il terzo etc etc...

io credo che sia perchè l'evento ONEDITCOMMAND si verifica dopo ONITEMBOUND, e quindi la prima volta non gli passo nessun valore, ma dalla seconda in poi recupera quello precedente.
Giusto?

Però non so come risolvere...
ho provato associando la query per popolare la dropdown all'ONITEMBOUND invece che all'ONEDIT, ma mi da errore e dice che la connessione è già aperta...

Cosa sto sbagliando?

zseven Profilo | Senior Member

Cerco di spiegarmi meglio, perchè mi sto perdendo e rischio di non capirci piu niente.

Ho un datagrid.
La prima colonna mi visualizza le SUPERCATEGORIE, la seconda colonna le CATEGORIE.
Quando clicco sul pulsante associato all'ONEDITCOMMAND sia le SUPERCATEGORIE che le CATEGORIE diventano DropDown, e mi mostrano il valore che era visualizzato nel datagrid in visualizzazione normale.
Siccome CATEGORIE è un campo correlato a SUPERCATEGORIE, vorrei che l'elenco dei valori della Drop Down di CATEGORIE sia limitato alla SUPERCATEGORIA selezionato.
Es:
1)
SUPERCATEGORIA SELEZIONATA: Fornitori
CATEGORIE correlate a fornitori: ITALIANI, ESTERI
e quindi mi deve mostrare sia ITALIANI che ESTERI

2)
SUPERCATEGORIA SELEZIONATA: Clienti
CATEGORIE correlate a clienti: ITALIANI
e quindi mi deve mostrare solo ITALIANI.

Attualmente invece mi mostra sempre tutto l'elenco delle CATEGORIE, senza basare la query sull'ID della SUPERCATEGORIA SELEZIONATA.

Spero di essermi spiegato meglio questa volta.
Grazie per la pazienza.

zseven Profilo | Senior Member

E mica lo facevi intutti e due gli eventi?
Io l'itemcommand non ce l'ho nemmeno come evento.

Ho provato a spostare il codice che avevo nell'ONITEMDATABOUND nell'ONEDITCOMMAND, ma continuo a non avere nessun risultato:

'QUESTO STA NELLA SUB DELL'ONEDITCOMMAND

If e.Item.ItemType = ListItemType.EditItem Then Dim DDLTemp As DropDownList DDLTemp = CType(e.Item.FindControl("DDLSupCat"), DropDownList) DDLTemp.SelectedIndex = DDLTemp.Items.IndexOf(DDLTemp.Items.FindByText(Sup_Cat_sel)) Session("ID_sup_cat") = DDLTemp.SelectedItem.Value lblerrore.Text = Session("ID_sup_cat") End If

Non so più assolutamente cosa tentare...

zseven Profilo | Senior Member

La modifica dopo il selectedindexchanged l'avevo già realizzata.
Il problema sta proprio nel caricarlo insieme.

Ma se io lo conosco il valore del primo, perchè non posso farlo?
In fondo si tratta di assegnare il valore che prima dell'ONEDITCOMMAND e' associato alla Label che diventerà poi una dropdown.
Il valore io lo recupero, ma soltanto dopo aver popolato la seconda dropdown.
In pratica devo riuscire a fare questa operazione prima, soltanto che non riesco....

zseven Profilo | Senior Member

Alla fine ho risolto!!
Certo il metodo non è pulitissimo ma funziona.

Quando carico il datagrid, carico anche una colonna invisbile che contiene una label con il valore dell'id che mi serve per la query
Quando vado inedit mode riesco a recuperare quel valore tranquillamente cercandolo con e.item.cell.

Non è pulitissima come soluzione, ma alla fine funziona!

Ed era una cosa che non potevo transcurare. Non posso certo dare la possibilità di modificare una sottocategoria inserendo dei valori che non trovano corrispondenza nella categoria di provenienza.

Grazie lo stesso!!!

*************************************
E' SORTO UN ALTRO PROBLEMA!!
Adesso il problema è relativo all' OnSelectedIndexChanged del drop down inEditMode che mi deve far ricaricare i valori nel secondo dropdown.

Ho provato a recuperare l'ID del DropDown in questo modo, ma ottengo un errore:

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

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

e mi dice questo:
System.NullReferenceException: Object variable or With block variable not set

Sapresti dirmi se ho sbagliato metodo per recuperare id, o indicarmi quale errore ho commesso?
Grazie mille!

p.s. volevo scrivere un altro messaggio, ma non mi dava la possibilità di continuare questo 3d se non modificando il mio ultimo mess.
Spero di non aver fatto cretinate.
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