Dropdownlist - non cambia il valore selezionato

domenica 27 agosto 2006 - 16.39

acsp Profilo | Newbie

buonasera a tutti... sto usando visual studio e vb.net e ho il seguente problema con una dropdownlist di nome comboannoaccademico che popolo con la seguente funzione da me creata:

Public Function popolaCombo(ByVal oggetto As DropDownList, ByVal proc As String) As String Dim strConnectionString As String = "..." 'apro il data adapter Dim dataSet As DataSet = New DataSet Dim conn As New SqlClient.SqlConnection(strConnectionString) Dim adapter As New SqlClient.SqlDataAdapter Dim procedura As New SqlClient.SqlCommand(proc, conn) procedura.CommandType = CommandType.StoredProcedure adapter.SelectCommand = procedura adapter.Fill(dataSet) 'inserisco le righe contenute nel dataset nel combo oggetto Dim thisTable As DataTable Dim li As ListItem For Each thisTable In dataSet.Tables ' For each row, print the values of each column. Dim myRow As DataRow For Each myRow In thisTable.Rows Dim myCol As DataColumn For Each myCol In thisTable.Columns li = New ListItem li.Text = myRow(myCol).ToString li.Selected = False oggetto.Items.Add(li) Next myCol Next myRow Next thisTable End Function

richiamata nel seguente modo:

.popolaCombo(ComboAnnoAccademico, "select_all_annoacc")
dove select_all_annoacc è la stored procedure che seleziona i dati. i dati nella dropdownlist sono visualizzati correttamente.
di default, deve essere visualizzato l'anno accademico attuale, quindi:

ComboAnnoAccademico.SelectedValue = "05/06"
e anche qui tutto ok, visualizza correttamente il valore che gli passo.
il problema sta nel recupero del valore selezionato. ho impostato la proprietà autopostback a true e, la routine di gestione del combo è la seguente

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

quando carico la pagina, l'indirizzo è

.../ElencoProgetti.aspx

e, qualsiasi valore clicco nella dropdownlist, ho sempre selezionato il valore "05/06"

/ElencoProgetti.aspx?anno=05/06

perché nella query string ho sempre lo stesso valore?? ho provato a metterlo in sessione, a metterlo in una label nascosta ma il valore selezionato è sempre 05/06. perché?

bluland Profilo | Guru

da quello che ho capito qualunque cosa scegli al refresh della pagina ti trovi sempre lo stesso valore caricato??

ma dove hai messo questo codice in quale funzione?

ComboAnnoAccademico.SelectedValue = "05/06"

saluti
ENzo

acsp Profilo | Newbie

>da quello che ho capito qualunque cosa scegli al refresh della
>pagina ti trovi sempre lo stesso valore caricato??
>

esatto

>ma dove hai messo questo codice in quale funzione?
>
>ComboAnnoAccademico.SelectedValue = "05/06"
>

al caricamento della pagina:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
>saluti
>ENzo
ciao e grazie x la risposta tempestiva

totti240282 Profilo | Guru

hai gestito i postback ???
C'è solo un capitano !!!!!!

micto27 Profilo | Senior Member

totti240282 intende dirti che il caricamento del controllo DropDownList lo devi invocare
solo nella condizione ..

If Not Me.IsPostBack Then
... caricamento combo
End If

diversamente (ripopolando ad ogni Load) ripartirai sempre dalla situazione
iniziale e il fatto che tu abbia selezionato un elemento del combo sarà ignorato
(l'evento SelectedIndexChanged non sarà mai scatenato).

Un'altra piccola cosa:
ho visto nel codice che hai postato che effettui il caricamento del combo utilizzando un
ciclo che scansiona la tabella dati da riportare nel combo.
Ovviamente funziona comunque potevi far fare tutto all'oggetto DropDownList
utilizzando il metodo DataBind (dopo aver popolato il Dataset):

oggetto.DataSource = dataset.Tables(0)
oggetto.DataTextField = "nome della colonna da mostrare come Text"
oggetto.DataValueField = "eventuale nome della colonna da associare al Value di ogni elemento esposto"
oggetto.DataBind()

anzichè

For Each thisTable In dataSet.Tables
' For each row, print the values of each column.
Dim myRow As DataRow
For Each myRow In thisTable.Rows
Dim myCol As DataColumn
For Each myCol In thisTable.Columns
li = New ListItem
li.Text = myRow(myCol).ToString
li.Selected = False
oggetto.Items.Add(li)
Next myCol
Next myRow
Next thisTable

Ciao, Michele

bluland Profilo | Guru

esatto proprio cosi non hai gestito il postback!

acsp Profilo | Newbie

>totti240282 intende dirti che il caricamento del controllo DropDownList
>lo devi invocare
>solo nella condizione ..
>
>If Not Me.IsPostBack Then
> ... caricamento combo
>End If
>
>diversamente (ripopolando ad ogni Load) ripartirai sempre dalla
>situazione
>iniziale e il fatto che tu abbia selezionato un elemento del
>combo sarà ignorato
>(l'evento SelectedIndexChanged non sarà mai scatenato).
>

grazie... ora provo... ma qualcuno mi sa spiegare cosa è questo ispostback che lo nominano tutti?

>Un'altra piccola cosa:
>ho visto nel codice che hai postato che effettui il caricamento
>del combo utilizzando un
>ciclo che scansiona la tabella dati da riportare nel combo.
>Ovviamente funziona comunque potevi far fare tutto all'oggetto
>DropDownList
>utilizzando il metodo DataBind (dopo aver popolato il Dataset):
>
> oggetto.DataSource = dataset.Tables(0)
>oggetto.DataTextField = "nome della colonna da mostrare come
>Text"
>oggetto.DataValueField = "eventuale nome della colonna da associare
>al Value di ogni elemento esposto"
> oggetto.DataBind()
>

si, lo sapevo, ma su un altro combo ho la necessità di inserire delle date. il problema è che nel databaseho data + ora e a me la data nn serve quindi ho risolto facendo:

For Each thisTable In dataSet.Tables
' For each row, print the values of each column.
Dim myRow As DataRow
For Each myRow In thisTable.Rows
Dim myCol As DataColumn
For Each myCol In thisTable.Columns
li = New ListItem
li.Text = myRow(myCol).ToString.Substring(0,10) <--------- qui
li.Selected = False
oggetto.Items.Add(li)
Next myCol
Next myRow
Next thisTable


so che è un metodo rozzo ma è semplice e funziona.. tanto le date mi servono solo come stringhe, nn come date... cmq grazie x il consiglio, proverò tutto e vi faccio sapere

>Ciao, Michele
ciao ciao e grazie, sara

micto27 Profilo | Senior Member

>
>grazie... ora provo... ma qualcuno mi sa spiegare cosa è questo
>ispostback che lo nominano tutti?
>

La proprietà IsPostBack ti consente di distinguere se la pagina viene caricata a fronte di un
GET o di un POST (se IsPostBack = True si tratta di un post).

Se digiti l'url di una pagina in un browser dai lougo ad una GET che carica la pagina, se poi
clicchi ad esempio su un controllo (Button, LinkButton, ImageButton, ...) che invia il form al server
dai luogo ad un POST.

Ciao, Michele

acsp Profilo | Newbie

>>
>>grazie... ora provo... ma qualcuno mi sa spiegare cosa è questo
>>ispostback che lo nominano tutti?
>>
>
>La proprietà IsPostBack ti consente di distinguere se la pagina
>viene caricata a fronte di un
>GET o di un POST (se IsPostBack = True si tratta di un post).
>
>Se digiti l'url di una pagina in un browser dai lougo ad una
>GET che carica la pagina, se poi
>clicchi ad esempio su un controllo (Button, LinkButton, ImageButton,
>...) che invia il form al server
>dai luogo ad un POST.
>
>Ciao, Michele

spiegazione da 110 e lode... grazie mille.. funziona tutto
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