Doppia dropdownlist in una datagrid

venerdì 11 agosto 2006 - 10.38

motogpdesmo16 Profilo | Senior Member

Salve a tutti. E' il mio primo post e la mia prima richiesta in questo forum. Veniamo subito al problema.
Ho inserito il controllo dropdownlist nella mia datagrid. Tutto funziona perfettamente solo che ho la necessità di inserire due dropdownlist che funzionino con la modalità "Regione-Provincia". Mi spiego meglio: seleziono un valore dalla prima dropdownlist e nella seconda mi devono essere caricati tutti i valori che facciano capo al valore della prima dropdownlist. Nell'esempio da me citato, se selezionassi "Puglia" nella prima DDL, dovrei ottenere "Bari", "Brinidisi", "Foggia", "Lecce", "Taranto" nella seconda.
E' possibile fare una cosa del genere?
Grazie.

motogpdesmo16 Profilo | Senior Member

Salve coach e grazie per la risposta. La dropdownlist l'ho creata mediante "Template Column" e compagnia.
Come posso fare ad accedere all'evento che mi hai detto riferito alla dropdownlist che, di fatto, è "virtuale"?
Grazie.

bluland Profilo | Guru

<Salve a tutti. E' il mio primo post e la mia prima richiesta in questo forum. Veniamo subito al problema.
<Ho inserito il controllo dropdownlist nella mia datagrid. Tutto funziona perfettamente solo che ho la necessità di inserire due <dropdownlist che funzionino con la modalità "Regione-Provincia". Mi spiego meglio: seleziono un valore dalla prima dropdownlist e <nella seconda mi devono essere caricati tutti i valori che facciano capo al valore della prima dropdownlist. Nell'esempio da me <citato, se selezionassi "Puglia" nella prima DDL, dovrei ottenere "Bari", "Brinidisi", "Foggia", "Lecce", "Taranto" nella seconda.

<E' possibile fare una cosa del genere?
<Grazie.

devi fare un array di regioni:

Dim arrayRegioni as string() = {"Campania", "Lazio", "Marche" , "Puglia"}

poi potresti caricarti degli array per ogni regione ad esempio per Puglia fai :

Dim arrayPuglia as string() = {"Bari", "Brinidisi", "Foggia", "Lecce", "Taranto"}

poi devi sfruttare la proprieta' autopostbac offerta dalla droplist, e porre degli if else in questo modo

droplist1.datasource = arrayRegioni
droplist1.databind()

e poi in proprieta' autopostback = true

POI

if droplist1.selecteditem.value = "Puglia" then

droplist2.datasource = arrayPuglia
droplist2.databind()

elseif droplist1.selecteditem.value = "Campania" then

droplist2.datasource = arrayCampania
droplist2.databind()


etc...

e' questo cio' che chiedevi?


bluland Profilo | Guru

come non detto!!

motogpdesmo16 Profilo | Senior Member

Dato che i valori devo estrapolarli da due tabelle del database, la procedura potrebbe comunque andare bene, vero?
HO sfruttato l'esempio Regione-Provincia giusto per far capire quello che ho intenzione di fare. In realtà si tratta di servizi offerti al pubblico e dettagli. Ad esempio ho come servizio "Camera" e tra i dettagli avrò "Camera per 2 adulti", "Camera per 2 adulti + 2 Bambini" ecc ecc
Spero di essere stato chiaro.
Ti ringrazio comunque per la soluzione proposta.

edit: riguardando meglio la soluzione devo dire che non va molto bene poichè l'elenco dei servizi è assolutamente variabile e non ha un numero predefinito di elementi come potrebbero essere le regioni e le province....come pensate si possa tentare di risolvere il problema??
Un'altra cosa...al cambio di valore della combo in modalità modifica ho notato che non avviene il reload della pagina che è un evento di cui avrei assoluto bisogno per far popolare la seconda combo in relazione al valore della prima.

bluland Profilo | Guru

ma se carichi la ddl da tabella cosa importa se sono variabili o meno??
c'e qualcosa che non mi e' chiaro?

motogpdesmo16 Profilo | Senior Member

>ma se carichi la ddl da tabella cosa importa se sono variabili
>o meno??
>c'e qualcosa che non mi e' chiaro?

Il mio discorso sulla variabilità degli elementi era relativo alla situazione proposta precedentemente la quale aveva un numero fisso di regioni e province e quindi era possibile effettuare la valorizzazione dell'array.
Adesso sono riuscito ad agganciare la prima combo alla tabella avendo inserito il tutto nell'evento "ItemDataBound".
Fin qui nessun problema...Come e dove devo inserire il codice per poter valorizzare la seconda dropdown in relazione al valore della prima? (ammesso che riesca a farlo perchè al cambio di valore della prima drop non viene effettuato il refresh.....)

bluland Profilo | Guru

beh a dire la verita' anche io avevo lo stesso problema, ma in mancanza di tempo ho risolto aggirandolo, cioe' :

avevo il datagrid con un BUtton template che quando lo digitavo sulla sinistra mi appariva un piccolo form che mi riportava in vari textbox i campi del record selezionato, in tal modo avevo la possiblita' di modificare la riga selezionata, poi trami un button effettuavo l'edit ed il refresh del datagrid.....

motogpdesmo16 Profilo | Senior Member

quindi mi converrebbe mettere due textbox e due dropdownlist (ho bisogno di aggiornare solo 4 campi: due campi data e due dropdown appunto) e poi effettuare il refresh...Dopo essermi fatto il "mazzo" per sistemare l'evento "modifica" della griglia!
Grazie comunque per l'aiuto!

bluland Profilo | Guru

di niente, cmq me lo devo studiare questo fatto!! (appena ho tempo)

motogpdesmo16 Profilo | Senior Member

già..perchè non sempre si può ricorrere all'aggirare il problema con una form di appoggio.
Spero comunque si possa risolvere il problema....il fatto strano è che comunque, al cambio di valore, non mi refresha la griglia.

bluland Profilo | Guru

beh non e' un fatto strano e' normale, solo che devi richiamare la griglia, ad esempio usando

try

effettui la query di modifica

catch

finally

query per visualizzare la griglia

end try

bluland Profilo | Guru

ho trovato questo link che sembra interessante a prima vista fammi sapere!!

http://dotnetjunkies.com/Article/B8550E4B-B8F5-4446-B065-0B19F4C739BC.dcik

http://aspnet.4guysfromrolla.com/articles/080702-1.aspx

motogpdesmo16 Profilo | Senior Member

io son ancora nell' "ItemDataBound". Non faccio query di modifica in quella fase...oppure non ho capito bene cosa intendevi dire con il "try...catch...finallly"

edit: sembrano due link veramente interessanti. Oggi pomeriggio me li guardo con più calma. Grazie comunque per la disponibilità dimostrata.

bluland Profilo | Guru

>il fatto strano è che comunque, al cambio di valore, non mi refresha la griglia.

scusa intendevi che quando effettui la modifica da form poi non ti compare nel datagrid la relativa modifica del record selezionato?

motogpdesmo16 Profilo | Senior Member

scusa tu mi sono spiegato sicuramente male..intendevo dire che quando sono in modalità modifica, ho ovviamente la possibilità di modificare le textbox e cambiare il valore della dropdownlist (quella che sono riuscito ad agganciare al database). Al cambiamento del valore della suddetta dropdownlist non viene effettuato il refresh della pagina (o della griglia???)...spero di essermi spiegato questa volta...

bluland Profilo | Guru

aspetta facciamo ordine:

allora, tu stai utilizzando per la modifica la via che ti avevo indicato??
cioe' una volta dig un button su una riga del datagrid a destra o sinistra ti compare un form con i dati della riga dgt , in questo form ci sono alcune txtbox e ddl che puoi modificare a piacere, poi una volta effettuata la modifica la dovrai salvare, con un button magari o altro e cosi o diversamente??

motogpdesmo16 Profilo | Senior Member

no non sto utilizzando ancora la via che mi hai suggerito tu.
Ero ancora con il mio metodo: griglia normale, alla pressione del link "Modifica" i campi della griglia si trasformano in textbox e dropdownlist.

bluland Profilo | Guru

postami il codice che hai usato per l'itemdatabound, ah ma hai visto quei due link soprattutto il secondo mi sembra molto utile!

motogpdesmo16 Profilo | Senior Member

bluland il link lo leggo fra non molto...
il codice che ho usato per valorizzare (correttamente) la prima DDL è il seguente:
Dim valore1 As String Dim cn As New OleDb.OleDbConnection(setCnString) If e.Item.ItemType = ListItemType.EditItem Then Dim DRV1 As DataRowView = CType(e.Item.DataItem, DataRowView) Dim CurrentTipo As String = DRV1("nome") Dim DDL1 As DropDownList = CType(e.Item.Cells(3).Controls(1), DropDownList) Dim sqlRuolo As String = "SELECT id,nome FROM Tipo where cdruoli=" & Session("idruolo") Dim DA1 As New OleDb.OleDbDataAdapter(sqlRuolo, cn) Dim DS1 As New DataSet Dim item As ListItem DA1.Fill(DS1, "Tipo") DDL1.DataSource = DS1.Tables("Tipo").DefaultView DDL1.DataTextField = "Nome" DDL1.DataValueField = "Id" DDL1.DataBind() item = DDL1.Items.FindByValue(CurrentTipo) If Not item Is Nothing Then item.Selected = True valore1 = DDL1.SelectedItem.Value.ToString End If

motogpdesmo16 Profilo | Senior Member

sempre nell'ambito di questo problema, ho provato a settare la proprietà autopostback=true da codice html. Forse son io che non riesco a capirla bene...al cambiamento del valore nella prima dropdown (quella che sono riuscito a valorizzare correttamente) vorrei mostrare con un semplice response.write(____) il suo stesso valore.
Tale visualizzazione avviene quando entro in modifica della riga ma al cambiamento non viene visualizzato nulla. Dove sbaglio?

bluland Profilo | Guru

devi mettere il response.write(droplist.selecteditem.value)

nell'evento selectedindexchanged della droplist, infatti se da modalità design/progettazione clicchi due volte sulla ddl ti appare questa sub ed è li che metti l'evento response.write e tutto cio' che deve accadere al cambiamento di tale ddl, inoltre la proprietà di autopostback, la potevi settare anche da design/progettazione basta che selezionavi la ddl e con il destro andavi su proprietà e li trovi autopostback e la poni = true ....


fammi sapere!!

saluti

Enzo

motogpdesmo16 Profilo | Senior Member

>devi mettere il response.write(droplist.selecteditem.value)
>
>nell'evento selectedindexchanged della droplist, infatti se da
>modalità design/progettazione clicchi due volte sulla ddl ti
>appare questa sub ed è li che metti l'evento response.write e
>tutto cio' che deve accadere al cambiamento di tale ddl, inoltre
>la proprietà di autopostback, la potevi settare anche da design/progettazione
>basta che selezionavi la ddl e con il destro andavi su proprietà
>e li trovi autopostback e la poni = true ....
>
>
>fammi sapere!!
>
>saluti
>
>Enzo
Ciao Enzo. Fin qui ci sono arrivato tant'è che questa metodologia l'ho già usata per altre esigenze.
Il codice che ho postato precedentemente è inserito nel "Griglia_ItemDataBound(_____)"
Pertanto le Dropdown a cui faccio riferimento son quelle contenute nella griglia quando clicco su modifica. Non sono due "normali" dropdown piazzate sulla webform.
Spero di essermi spiegato almeno questa volta...

bluland Profilo | Guru

BEH allora ritorniamo all'inizio[:o, il mio problema era proprio questo e cioè come fare scattare l'evento selectedindexchanged della ddl in una griglia ed era per questo che ti ho suggerito di aggirare il problema con un form esterno, cmq anche io me lo sto studiando questo caso appena uno dei due ha una soluzione magari la dice

motogpdesmo16 Profilo | Senior Member

ah ok. quindi entrambi vertevamo verso la medesima soluzione.
Magari qualche guru passa di qui, si incuriosisce riguardo la problematica e ci aiuta
grazie comunque

bluland Profilo | Guru

il problema che quasi tutti sono in vacanza (beati loro) !!

motogpdesmo16 Profilo | Senior Member

già. Non è che siam solo noi due a lavorare ad agosto???
Speriamo che comunque qualcuno dedichi attenzione.

motogpdesmo16 Profilo | Senior Member

Nessuna idea oltre a quella espressa da blueland e cioè di riportare a parte le due dropdownlist??
Grazie.
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5