DropDownList e collegamento a tabella

lunedì 17 dicembre 2007 - 09.36

gae58 Profilo | Senior Member

salve,

ho una gridView collegata ad una formView. Nella gridView seleziono la riga ed attraverso la formView posso variare, Inserire e cancellare. Nella formView ho vari campi, alcuni collegati ad un'altra Tabella, con l'0ggetto dropDownList.

Ho collegato il ddl per la visualizzazione della descrizione.

Per dare la possibilità di non selezionare obbligatoriamente un dato, ho inserito un elemento con Descrizione '---nessuno---' e valore 0 (zero), con appendBoundInsertItem=true.

Mi succede che in fase d'inserimento se scelgo ---nessuno---, va tutto bene e me lo memorizza.
Se cerco di modificarlo non mi visualizza i dati nella formView.

La cosa strana è che ho lo stesso collegamento su un altro campo e funziona tutto bene. Ho fatto vari tentativi, ma non so più cosa provare.

Controllando il dataBase, ho notato che se il valore del campo è zero non me lo visualizza.

Qualche consiglio?

grazie

Gaetano

freeteo Profilo | Guru

ciao,
ti rispondo ugualmente anche se un po in ritardo...probabilmente avrai gia' risolto.
Cmq sia, il tuop problema è dettato dal fatto di impostare la proprieta' "DataTextField="" e DataValueField="" del ddl, hai verificato che poi bindi il ddl sul campo giusto?

tipicamente un binding classico è:

<asp:DropDownList runat="server" ID="cmbcategoria" DataValueField="CATEGORIA" DataTextField="DESCRIZIONE" SelectedValue='<%# Eval("CATEGORIA") %>' />

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

gae58 Profilo | Senior Member

ciao Mattei, ti ringrazio per la risposta

>avrai gia' risolto.
NO

Ti espongo meglio quello che ho fatto.
Ho una gridView ed una formView collegata.

Nella formView ho dei campi (non so tecnicamente come si dica) collegati alla descrizione di un'altra Tabella attraverso il campo Progressivo.
Nella query ho utilizzato questa sintassi ..., Destinatari.Descrizione AS DestinatariDes, ...
e nell'ItemTemplate della formView ho inserito, nel dataBinding questo valore
<asp:Label ID="DestinatarioLabel" runat="server" Text='<%# Eval("DestinatariDes") %>'></asp:Label>

La questione è che se inserisco un movimento, dove effettua la scelta del destinatario e quindi l valore numerico è presente nella tabella collegata, mi permette la visualizzazione dei dati nella formView, una volta selezionato il rigo.
Se invece nell'inserimento o variazione ho scelto nessuno e quindi il valore è zero, non mi permette di vedere la visualizzazione della formView.

Scusa se posso non essere stato chiaro.
Il codice che uso nel combBox dell'Inserimento è questo:
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDSDestinatari"
DataTextField="Descrizione" DataValueField="Progressivo" SelectedValue='<%# Bind("Destinatario", "{0}") %>' AppendDataBoundItems="True">
<asp:ListItem Selected="True" Value="0">-- Nessuno --</asp:ListItem>
</asp:DropDownList>

Qualche aiuto?

La cosa che non capisco è che per un'altro campo, quello dei comuni, non ho problemi.
Il codice che uso nei comuni è questo per l'ItemTemplate
<asp:Label ID="CaCiComuneLabel" runat="server" Text='<%# Bind("ComuniCaCiDes") %>'></asp:Label>

Mentre per l'Inserimento o la variazione è questo:
<asp:DropDownList ID="DropDownList2" runat="server" SelectedValue='<%# Bind("CaCiComune", "{0}") %>' DataSourceID="SqlDSComuni" DataTextField="Comune" DataValueField="Progressivo" AppendDataBoundItems="True">
<asp:ListItem Selected="True" Value="0">-- Nessuno --</asp:ListItem>
</asp:DropDownList>

Facendo delle prove, forse ho capito che il problema è nella definizione dellq uery, in quanto ho modificato il campo destinatario mettendo quello dei comuni che funziona, ma nulla di fatto. la query è questa:
SELECT Art80.Progressivo, Art80.AutoMoto, Art80.Targa, Art80.DataCarico, Art80.CaCiIntestatario, Art80.CaCiIndirizzo, Art80.CaCiComune, Art80.CaCiComunePre, Art80.CaCiCap, Art80.CaCiProvincia, Art80.Ente, Art80.EntePre, Art80.EnteComune, Art80.EntePreComune, Art80.Articolo1, Art80.Comma1, Art80.Articolo2, Art80.Comma2, Art80.DataScarico, Art80.DataRitiro, Art80.MotivoRestituzione, Art80.Utente, Art80.Destinatario, Art80.Lista, Destinatari.Descrizione AS DestinatariDes, Enti.Descrizione AS EntiDes, Comuni_1.Comune AS ComuniEnteDes, (SELECT Comune FROM Comuni WHERE (Art80.CaCiComune = Progressivo)) AS ComuniCaCiDes FROM Art80 INNER JOIN Enti ON Art80.Ente = Enti.Progressivo INNER JOIN Destinatari ON Art80.Destinatario = Destinatari.Progressivo INNER JOIN Comuni AS Comuni_1 ON Art80.EnteComune = Comuni_1.Progressivo OR Art80.CaCiComune = Comuni_1.Progressivo WHERE (Art80.Progressivo = @Progressivo)

Non so che pensare
Qualche aiuto?

grazie

Gaetano

freeteo Profilo | Guru

mmmm....ascolta potrebbe essere che il campo quando sei a nuovo abbia un valore nullo invece di zero?
perche il nullo, ovvero DbNull è diverso da zero se non hai il default nel campo del db, e usando datasource non vorrei che sbagliasse qualcosa a livello di binding...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

gae58 Profilo | Senior Member

ho controllato anche questo ed ho messo il campo a not null per evitare ciò.

che ne pensi?

Gaetano

e poi mi succede dopo l'inserimento.
Controllando a mano il dataBase il valore è zero
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5