Aggiungere voci a dropdownlist databound

martedì 20 marzo 2007 - 19.53

fabiogvn Profilo | Newbie

Avrei la necessità di aggiungere una voce manualmente ad un controllo dropdownlist associato ai dati (è la voce "tutti" di un elenco di scelte) che mi deve restituire come valore 0.
Ho provato ad inserire il seguente codice:

Dim itm As New ListItem itm.Text = "tutte" itm.Value = 0 cmbFasce.Items.Add(itm)

nel page_init, dove inizializzo il dataasource associato all'elenco, ma poi non mi ritrovo la voce a pagina finita. Sbaglio qualcosa o non si può fare?

amelix Profilo | Expert

>Avrei la necessità di aggiungere una voce manualmente ad un controllo
>dropdownlist associato ai dati (è la voce "tutti" di un elenco
>di scelte) che mi deve restituire come valore 0.
>Ho provato ad inserire il seguente codice:
>
> Dim itm As New ListItem
> itm.Text = "tutte"
> itm.Value = 0
> cmbFasce.Items.Add(itm)
>
>nel page_init, dove inizializzo il dataasource associato all'elenco,
>ma poi non mi ritrovo la voce a pagina finita. Sbaglio qualcosa
>o non si può fare?
L'operazione è corretta.... E' il momento che è sbagliato.
Ogni oggetto quando chiama il metodo DataBind "svuota" i dati e poi li riempie.
Quindi l'operazione va fatta dopo il DataBind.

Ti consiglio di usare, al posto dell' Add, l'Insert:
Dim itm As New ListItem itm.Text = "tutte" itm.Value = 0 cmbFasce.Items.Insert(0, itm)
In questo modo lo avrai in testa alla tua drop down list.
Andrea
http://www.MelisWeb.eu/

fabiogvn Profilo | Newbie

Speravo fosse qualcosa del genere, ma qual'è a questo punto l'evento più adatto che segue il databinding in cui inserire il codice?

amelix Profilo | Expert

Come esegui il databind della drop down list?

Andrea
http://www.MelisWeb.eu/

fabiogvn Profilo | Newbie

Utilizzo come fonte dati per il binding un oggetto sqldatasource (nell'esempio riportato DSFasce) associato alla proprietrà DataSource della dropdownlist ed eseguo il binding da codice nell'evento Page_Init:

DSFasce.ConnectionString = MySes.SqlConnection DSFasce.SelectCommand = "..." DSFasce.DataBind()

amelix Profilo | Expert

Non mi ricordo esattamente l'ordine degli eventi....
Ma, secondo me, nel page_load dovrebbe essere già stata popolata la ddl.
Andrea
http://www.MelisWeb.eu/

fabiogvn Profilo | Newbie

Facendo un pò di prove ho trovato che nell'evento savestatecomplete la ddl è già "piena" per cui ho inserito lì la mia voce aggiuntiva.
Uso da poco asp.net e trovo non poche difficoltà nel capire cosa persiste durante i postback e cosa è da reinizializzare ogni volta, e soprattutto "quando" avvengono i vari eventi! Alla fine nonostante la pila di libri e manuali sulla scrivania la cosa migliore è sempre sbatterci il naso facendo mille prove :-)
Grazie per l'aiuto
Ciao
Fabio

amelix Profilo | Expert

Guarda... io ho la faccia da pugile...
Andrea
http://www.MelisWeb.eu/

fabiogvn Profilo | Newbie

Aggiungo una cosa che ho appena scoperto in merito all'argomento del post e che potrebbe essere utile ad altri: abilitando la proprietà AppendDataBoundItems della DropDownList è possibile aggiungere items manualmente nell'evento Load del controllo (solo se Page.IsPostback=false altrimenti vengono aggiunte ogni volta) senza che il successivo binding cancelli gli elementi già presenti

gae58 Profilo | Senior Member

ciao,

mi trovo nella stessa situazione ed anch'io ho usato l'AppendaDataBoundItems, ma il problema che ho è che la scelta può essere anche vuota, però se associo il valore zero a lla scritta nessuna scelta mi ritorna questo errore:
SelectedValue in 'ddlCaCiComune' non valido, poiché non è incluso nell'elenco di elementi.
Nome parametro: value

Qualche suggerimento?

grazie

Gaetano

pozzoli.samuele Profilo | Senior Member

Attenzione... Per risolvere... infilate un buon Trace="True" nella direttiva <@ page...

Viene scritto l'elenco di tutti gli eventi della pagina, in fondo... E se nel codice scrivete un trace. write("Sono qui") tra l'elenco degli eventi vedete la vostra scritta!

Usate questo metodo per verificare qual'è l'effettivo susseguirsi degli eventi e per eventalmente indagare se i dati sono già stati caricati o meno... (per esempio nettendo nell'on-load un "trace.write(ddl.items.count)"...

E' uno strumento di una potenzialità infinita!

Anche se dopo un mese di uso, si è imparato il corretto ordine degli eventi, quindi serve un po' meno... hihihi

gae58 Profilo | Senior Member

ti irngrazio della risposta.

Ho insterito il trace.

ho inserito il trace.write in page_Load, ma quando scrivo l'ID della ddl, non me la trova.
La dropDownList ce l'ho in una formView ed ho inserito nell'evento dataBound il trace, ma anche qui non mi trova l'ID della ddl.

Qualche suggerimento?

grazie

Gaetano
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