Textbox e dropdownlist

lunedì 27 ottobre 2008 - 10.55

bolla111 Profilo | Senior Member

è possibile selezionare un valore della dropdownlist e inserire il suo valore in una textbox?

rossimarko Profilo | Guru

Ciao,

si è possibile, dipende se ti serve che venga fatto lato server (quindi agganciando l'evento SelectedIndexChanged della DropDownList) oppure lato client.

Per farlo lato server basta inserire la proprietà AutoPostBack="true" sulla dropDownList e ogni volta che verrà modificato l'elemento selezionato viene agganciato l'evento lato server e li potrai inserire il codice che popola la tua text box

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bolla111 Profilo | Senior Member

ok grande...funziona...mi mancava l'autopostback a true...
ancora una cosa adesso mettiamo che invece di prendere il valore che prendo dalla ddl e inserirlo nella textbox, io voglia prendere i valori che compongono il record di quel determinato valore e inserirle in altrettante textbox...
cioè nella ddl visualizzo vari nomi...io alla selezione voglio inserire il nome in una textbox e l'ID in un altra...posso?

rossimarko Profilo | Guru

Dipende quanti sono i valori.. Nella drop down puoi salvare solo un valore e una descrizione associata (quindi 2 campi). Nel caso in cui sia popolata attraverso un DataSource il valore viene prelevato dal campo DataValueField e il testo dal campo specificato nel DataTextField
<asp:DropDownList id="ddl" runat="server" DataValueField="IDColonna" DataTextField="TestoColonna" />

Da codice il valore lo puoi prelevare con:
ddl.SelectedValue
mentre il testo con
ddl.SelectedItem.Text

Se invece ti servono altri valori (tipo un'altro campo) allora ti consiglio di ricaricare i dati da db in base alla chiave del record.
Supponiamo che nella dropdown visualizzi i dati caricati da una tabella TipiUtente così composta:
- IDTipoUtente (chiave)
- Descrizione
- Campo1
- Campo2

Nella dropdown metterai IDUtente come valore e Descrizione come testo. Quando viene scatenato l'evento SelectedIndexChanged carichi da db il record del tipoUtente selezionato (l'id è nel selectedvalue della dropdown) e poi avrai il valore degli altri campi associati al record.

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bolla111 Profilo | Senior Member

nel mio coso ho bisogno di 3 valori da inserire in 3 textbox.
ho fatto come hai detto tu: ho assegnato l'ID al value e la descrizione al testo... ma per prelevare il terzo valore?

rossimarko Profilo | Guru

Allora nel tuo caso devi caricare i dati da db. In base all'id fai una select, prelevi tutti i dati di quel record e li associ alle textbox.

L'alternativa è inserire come Valore una stringa con i dati concatenati (es: "ID|Campo1"), ma dal punto di vista della gestione generale non è molto pulita come soluzione
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bolla111 Profilo | Senior Member

non mi è molto chiaro...la select la devo fare tramite codice nell eventoselectedindexchange, o devo farla quando vado a "popolare" il ddl?
ho provato a farla ma non mi funziona...

rossimarko Profilo | Guru

Nell'evento eventoselectedindexchange. Una volta che hai l'id puoi caricare il record giusto?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bolla111 Profilo | Senior Member

ho problemi a recuperare il valore che mi serve dalla select fatta nel codice...
mi sono connesso al database,
in una variabile string ho messo la mia query "SELECT CAMPO FROM TABELLA WHERE ID=@ID",
ho creato l'sqlcommand a cui ho passato il mio id:
Cmd.Parameters.Add("ID", SqlDbType.Decimal)
Cmd.Parameters("ID").Value = CInt(TextID.Text)
ma ora come recupero il valore del campo che mi occorre?

rossimarko Profilo | Guru

Se carichi una sola colonna allora puoi sfruttare il metodo ExecuteScalar del command che ti ritorna il valore della prima colonna della prima riga del resultset che viene restituito: http://msdn.microsoft.com/it-it/library/system.data.sqlclient.sqlcommand.executescalar.aspx

Se però devi popolare altri campi legati sempre a quella riga allora devi usare un datareader (http://msdn.microsoft.com/it-it/library/system.data.sqlclient.sqlcommand.executereader.aspx) oppure popoli un dataset o una datatable con la riga che ti viene ritornata: http://msdn.microsoft.com/en-us/library/ms171919.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bolla111 Profilo | Senior Member

perfetto...hai centrato in pieno...grande
curiosità: se non caricavo un solo campo e x esempio mi serviva il secondo?
ultima domanda: voglio inserire nella ddl un campo che si chiama "seleziona il prodotto" e fare in modo che sia questa la prima che venga visualizzata (al posto del primo record). ho provato ad inserire un altro campo (oltre ad averlo già associato alla tabella di un db) ma non me lo prendeva in considerazione...puoi aiutarmi?

rossimarko Profilo | Guru

Se vuoi due campi allora devi usare un datareader o una datatable. Nel post di prima ti ho messo un paio di link con la documentazione (ho aggiornato dopo il messaggio).

Se vuoi inserire una voce in testata devi impostare la proprietà AppendDataBoundItems che ti consente di non cancellare gli elementi presenti nella dropdownlist quando fai il databind:

<asp:DropDownList ID="ddl" runat="server" AppendDataBoundItems="true"> <asp:ListItem Value="-1" Text="Seleziona Prodotto"></asp:ListItem> </asp:DropDownList>
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bolla111 Profilo | Senior Member

ok...mi mancava il settaggio dell'opzione appendbounddataitems
grazie 1000...6 sempre un master...
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