DropDownList e valori di default

lunedì 28 gennaio 2008 - 10.34

gae58 Profilo | Senior Member

salve,

ho una dorpDownList collegata ad una tabella MS Sql. In fase d'inserimento di un nuovo movimento, vorrei inserire in automatico dei valori di default.

Per un campo textBox ho scritto questa linea di codice:
TextBox DataCarico = (TextBox)FormView1.FindControl("DataCaricoTextBox");
DataCarico.Text = DateTime.Now.ToShortDateString();
e funziona

Per il dropDownList ho provato a scrivere la stessa linea di codice, ma non trovo la proprietà
DropDownList EnteCo = (DropDownList)FormView1.FindControl("ddlEnteComune");
EnteCo.selectedText = "NAPOLI"

Ho provato con quest'altra sintassi, ma funziona solo se gli do' il progressivo e non il comune:
Così funziona:
((DropDownList)(FormView1.FindControl("ddlEnteComune"))).SelectedValue = "213";
Così non funziona:
((DropDownList)(FormView1.FindControl("ddlEnteComune"))).SelectedValue = "NAPOLI";

Ho letto che c'è anche la proprietà SelectedText, ma non riesco ad utilizzarla.

Qualche consiglio?

grazie


Gaetano

PEPE Profilo | Senior Member

Ciao,
ecco a te.

tuaDropdown.Items.FindByText("tuonome").Selected=True

Ciao,
Luca.

alx_81 Profilo | Guru

>salve,
Ciao!

>Ho letto che c'è anche la proprietà SelectedText, ma non riesco
>ad utilizzarla.
La SelectedText è semplicemente una proprietà che ti torna il testo selezionato nella cella del combo. Ma in Windows.Forms.. non credo esista in ASP.Net..

>
>Qualche consiglio?
Per i valori di default, devi usare la SelectedValue o la SelectedIndex. Poi bindare i controlli.
>
>grazie
di nulla!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

gae58 Profilo | Senior Member

preciso una cosa, all'interno della formView, dove ho il comboBox, controllo l'item attraverso:
protected void FormView1_ItemCreated(object sender, EventArgs e)

all'interno della funzione controllo che lo stato sia in inserimento:
f (FormView1.CurrentMode == FormViewMode.Insert)

all'interno dell'IF effettuo la valorizzazione del combBox

ciao Luca, ho provato il tuo suggerimento scrivendo ciò:
DropDownList ddlTemp = (DropDownList)FormView1.FindControl("ddlEnteComune");
ddlTemp.Items.FindByText("NAPOLI").Selected = true;
però non mi funziona (a proposito, non c'è un metodo per scrivere meno codice?)

Per Alessandro, mi potresti fare un esmpio?, in quanto già ho usato la selectedValue, ma mi da' errore.

grazie ad entrambi.



Gaetano

alx_81 Profilo | Guru

>Per Alessandro, mi potresti fare un esmpio?, in quanto già ho
>usato la selectedValue, ma mi da' errore.
scusami il ritardo ma sono stato molto preso, eccoti l'esempio:

DataTable dt = new DataTable("TempTable"); dt.Columns.Add(new DataColumn("id", Type.GetType("System.String"))); dt.Columns.Add(new DataColumn("descrizione", Type.GetType("System.String"))); DataRow dr = dt.NewRow(); dr["id"] = "1"; dr["descrizione"] = "PROVA 1"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["id"] = "2"; dr["descrizione"] = "PROVA 2"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["id"] = "3"; dr["descrizione"] = "PROVA 3"; dt.Rows.Add(dr); DDL1.DataSource = dt; DDL1.DataValueField = "id"; DDL1.DataTextField = "descrizione"; DDL1.DataBind(); DDL1.SelectedValue = "2";

nella mia applicazione è nella load della pagina. Come puoi notare popolo al volo un datatable e poi lo passo come source al DropDownList. Infine seleziono il valore "2" (che deve esserci altrimenti hai l'errore).
>
>grazie ad entrambi.
di nulla!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

gae58 Profilo | Senior Member

>nella mia applicazione è nella load della pagina. Come puoi notare
>popolo al volo un datatable e poi lo passo come source al DropDownList.
>Infine seleziono il valore "2" (che deve esserci altrimenti hai
>l'errore).

Ciao Alessandro, mi sa che non sono stato chiaro. La mia domanda era sulla possibilità, nella selectValue di non mettere il valore dell'id (2), ma di mettere il valore della descrizione (PROVA 2).

E' possibile? o c'è qualche altro metodo per farlo?

grazie

Gaetano

alx_81 Profilo | Guru

>>nella mia applicazione è nella load della pagina. Come puoi notare
>>popolo al volo un datatable e poi lo passo come source al DropDownList.
>>Infine seleziono il valore "2" (che deve esserci altrimenti hai
>>l'errore).
>
>Ciao Alessandro, mi sa che non sono stato chiaro. La mia domanda
>era sulla possibilità, nella selectValue di non mettere il valore
>dell'id (2), ma di mettere il valore della descrizione (PROVA
>2).
>
>E' possibile? o c'è qualche altro metodo per farlo?
L'unico modo è quello di mettere la descrizione nel DataValueField. Se usi la SelectedValue, quella è la stringa che metti nella proprietà DataValueField. Quindi basta inserire ad esempio "PROVA 1" nel value e selezionarlo con il metodo che ti ho detto.
Alla fine hai una combobox con la descrizione sia nel DataTextField sia nel DataValueField. Attenzione perchè così perdi il value.

>grazie
di nulla!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

gae58 Profilo | Senior Member

>>E' possibile? o c'è qualche altro metodo per farlo?
>L'unico modo è quello di mettere la descrizione nel DataValueField.
>Se usi la SelectedValue, quella è la stringa che metti nella
>proprietà DataValueField. Quindi basta inserire ad esempio "PROVA
>1" nel value e selezionarlo con il metodo che ti ho detto.
>Alla fine hai una combobox con la descrizione sia nel DataTextField
>sia nel DataValueField. Attenzione perchè così perdi il value.

non penso sia una soluzione idonea, in quanto non ho più il collegamento numerico.
Che tu sappia non c'è nessun altro metodo?


Gaetano

alx_81 Profilo | Guru

>non penso sia una soluzione idonea, in quanto non ho più il collegamento
>numerico.
nemmeno io, ci mancherebbe è un workaround

>Che tu sappia non c'è nessun altro metodo?
Puoi usare il FindByText suggerito da PEPE
DDL1.Items.FindByText("TUA DESCRIZIONE").Selected = True;

oppure puoi ciclare (ma è più bruttino):

foraach (ListItem li in DDL1.Items) { if (li.Text == "TUA DESCRIZIONE") { DDL1.SelectedValue = li.Value; break; } }

non vedo il problema.. PEPE ti aveva già dato il metodo corretto..
Che errore ottieni?

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

gae58 Profilo | Senior Member

Avevo già provato il suggerimento e l'errore che mi ritorna è questo:

Riferimento a un oggetto non impostato su un'istanza di oggetto.
Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.

Dettagli eccezione: System.NullReferenceException: Riferimento a un oggetto non impostato su un'istanza di oggetto.

Errore nel codice sorgente:


Riga 93:
Riga 94: DropDownList ddlTemp = (DropDownList)FormView1.FindControl("ddlEnteComune");
Riga 95: ddlTemp.Items.FindByText("BENEVENTO").Selected = true;


forse la stringa(Benevento) deve avere gli spazi in fondo per fare la ricerca sull'esatta lunghezza del campo?


Gaetano

alx_81 Profilo | Guru

>forse la stringa(Benevento) deve avere gli spazi in fondo per
>fare la ricerca sull'esatta lunghezza del campo?
Diciamo che se la findbytext torna null è normale un errore simile. Fai un bel debug e capisci bene se è quel metodo che non ti torna l'oggetto. Puoi "parcheggiare" il risultato di una FindByText in un ListItem e poi controllare se il ListItem è null. In caso positivo, la stringa ricercata non è nell'insieme.
Se in fondo alle descrizioni vi sono spazi (ricorda che la stringa per cui cerchi deve essere proprio il valore esatto) devi ripeterli anche nella ricerca.


Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

gae58 Profilo | Senior Member

ho controllato la tabella ed il comune benevento esiste. Ho provato ad aggiungere anche tanti spazi per quanto è la lunghezza del campo, ma nulla da fare.

Per quanto riguarda il try catch, non conosco la sintassi dell'istruzione e quindi devo impararla.

Se nel frattempo hai qualche altro consiglio...

grazie

Gaetano

Gaetano

alx_81 Profilo | Guru

>Per quanto riguarda il try catch, non conosco la sintassi dell'istruzione
>e quindi devo impararla.
per questo leggiti l'help su MSDN:

http://msdn2.microsoft.com/en-us/library/0yd65esw.aspx

>Se nel frattempo hai qualche altro consiglio...
No guarda.. la FindByText fa proprio quello che ti serve. Devi cercare di fare debug con gli strumenti di Visual Studio e capire perchè non riesci a leggere quel ListItem. Non cercare workaround inutili quando un metodo è più che sufficiente.
A mio avviso devi cercare di capire dove e perchè si ferma. Sono sicuro che con un buon debug scoprirai che è una cosa del tutto rimediabile. Senza il codice davanti non posso dirti perchè non funzioni. Armati di pazienza e usa il debug di Visual Studio mentre esegui l'applicazione

Ricordatui che FindByText ti torna un ListItem, Quindi puoi spezzare la riga di codice in più d'una.
Una in cui assegni ad un ListItem il risultato di una FindByText
Una in cui (con un if) controlli se il ListItem è null
Una in cui gestisci l'errore (o lo ignori, dipende dalle tue esigenze)
Una in cui fai il lavoro che devi fare se va tutto bene
>
>grazie
di nulla!

PS: Se proprio non ci salti fuori, posso passarti un'esempio da installarti. Però prova a fare debug prima
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

gae58 Profilo | Senior Member

ti ringrazio per ladisponibilità e l'aiuto che mi stai dando, ma anche per il debug non so come si faccia.

Provo a leggere il link che mi hai indicato.

Se non ti dispiace, ti chiederò aiuto dopo la lettura

ciao

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