Ciao a tutti.
Mi sono imbattuto in un problema apparentemente stupido, ma dal quale non riesco ad uscirne.
Ho due dropdownlist, la prima contiene le provincie, la seconda filtra i comuni in base al valore della prima.
se cambio la provincia e immetto il comune, va tutto bene, quindi non ho problemi.

Se apro un file per modificarlo, come vedete viene assegnata la provincia memorizzata nel db alla drop..., e quindi, di conseguenza viene filtrata la drop dei comuni.

Ora accade questo però, se 'senza cambiare la provincia', scelgo un comune tra quelli filtrati, quando vado a salvare, non tiene conto della mia scelta e memorizza il valore del primo comune in elenco.

qui sotto ho riportato il codice vb.net e html.


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

        
        cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("mdb-database/dati.mdb"))
        
        
        If Not IsPostBack Then
            cn.Open()
            
            cmd = New OleDbCommand("select * from Province ORDER BY Capoluogo", cn)
            Provincia.DataSource = cmd.ExecuteReader()
            Provincia.DataTextField = "Capoluogo"
            Provincia.DataValueField = "IDProvincia"
            Provincia.DataBind()
            Provincia.Dispose()
            
                dst = New DataSet
                dap = New OleDbDataAdapter("SELECT * FROM Utenti WHERE IDUtente=" & Session("IDUtente"), cn)
                dap.Fill(dst, "Utenti")
                With dst.Tables("Utenti").Rows(0)
                                        
                    Provincia.SelectedValue = .Item("IDProvincia")
                    cn.Close()
                    AggiornaComune(.Item("IDProvincia"))
                    Comune.SelectedValue = .Item("IDComune")
                   

            cn.Close()
        end if


   End Sub

Sub Provincia_Change(ByVal sender As Object, ByVal e As System.EventArgs) Handles Provincia.SelectedIndexChanged
        AggiornaComune(Provincia.SelectedValue)
    End Sub

Sub AggiornaComune(ByVal x As Integer)
        Comune.Enabled = True
        Comune.Items.Clear()

        cn.Open()
        cmd = New OleDbCommand("select * from QueryComuni WHERE IDProvincia=" & x & " ORDER BY Comune", cn)
        Comune.DataSource = cmd.ExecuteReader()
        Comune.DataTextField = "Comune"
        Comune.DataValueField = "IDComune"
        Comune.DataBind()
        Comune.Dispose()
        Comune.Enabled = True
        cn.Close()
    End Sub
    





    Protected Sub Conferma_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        cn.Open()
        dst = New DataSet
        dap = New OleDbDataAdapter("SELECT * FROM Utenti WHERE email='" & fApici(Email.Text) & "'", cn)
        dap.Fill(dst, "Cuochi")
        
        
        If Cognome.Text = "" Then msg.Text = "Manca il (COGNOME)" : cn.Close() : Exit Sub
        If Nome.Text = "" Then msg.Text = "Manca il (NOME)" : cn.Close() : Exit Sub
        If Password.Text = "" Then Msg.Text = "Manca la (PASSWORD)" : cn.Close() : Exit Sub
        
        If Request("Tipo") <> "Modifica" Then
            If Email.Text = "" Then Msg.Text = "Manca la (E-MAIL)" : cn.Close() : Exit Sub
            
            If (dst.Tables("Cuochi").Rows.Count) = 1 Then
                Msg.Text = "email già esistente!"
                cn.Close()
                Exit Sub
            End If
            
            sql = "INSERT INTO Utenti (IDProvincia,IDComune) " & _
            "VALUES (" & _
            "" & Provincia.SelectedValue & "," & _
            "" & Comune.SelectedValue & ")"
           
            cmd = New OleDbCommand(sql, cn)
            cmd.ExecuteNonQuery()
            cn.Close()
            
              
    End Sub











<tr>
<td>Provincia:</td>
<td>
<asp:DropDownList ID="Provincia" runat="server"  Width="204"   
     AutoPostBack="true" onselectedIndexChanged="Provincia_Change" >
</asp:DropDownList>
</td>
</tr>
                
  
<tr>
<td>Città:</td>
<td>
<asp:DropDownList ID="Comune" runat="server" Width="204"  >
</asp:DropDownList>
</td>
</tr>



www.webrimini.com
assicurati che non ci siano identificativi dublicati nel comune, e segui con il debug il ciclo di esecuzione del codice, assicurati che la DropDownList del comune non sia mai reimpostata da nessuno

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
Geazie dei consigli ora riprovo per l'ennesima volta, ma hai dato un'occhiata al codice, ti sembra una procedura corretta?

www.webrimini.com
1 messaggio dal 17 giugno 2013
Scusa volevo chiederti come hai fatto a far in modo che la seconda dropdownlist filtrasse i comuni in base al valore della prima.
Io dovrei fare una cosa analoga solo che dalla prima dropdownlist selezioni la materia d'insegnamento e dalla seconda gli insegnanti che hanno l'attributo corrispondente al valore della prima.
Mi scuso x la banalità, ma sono alle prime armi.
16 messaggi dal 07 maggio 2013
www.infomidia.it
Ciao,
prova ad usare SelectedItem.Value invece di SelectedValue:


sql = "INSERT INTO Utenti (IDProvincia,IDComune) " & _
            "VALUES (" & _
            "" & Provincia.SelectedItem.Value & "," & _
            "" & Comune.SelectedItem.Value & ")"


------------------------------

www.infomidia.it
Modificato da infomidia il 17 giugno 2013 15.31 -
Ci sarebbero molti suggerimenti da indicare per il codice riportato ma non so se si tratta di un estratto... penso di si perché manca una chiusura di if se non erro. Solo che in questo modo non si può capire se la dropdown dei comuni subisce ulteriori modifiche.

inizia con togliere le chiamate Dispose() ai controlli, lo fa il garbage collector.
Comune.Enabled = True non serve dato che non è mai inizializzato a false.
I close della cn sarebbe opportuno stessero in un finally (che implica un try oppure in uno using)

Ormai programmano tutti... ma la professionalità appartiene a pochi
16 messaggi dal 07 maggio 2013
www.infomidia.it
Un'ultima cosa: gestire il PostBack nell'evento clic.
Il controllo button genera sempre un PostBack sulla pagina che occorre gestire. Nell'evento clic ti conviene aggiungere:

If Not Page.IsPostBack Then
....
end if

così sei sicuro che non vengano ricaricati i dati nelle Dropodownlist

-------------------------------------------------------

www.infomidia.it
infomidia ha scritto:
Ciao,
prova ad usare SelectedItem.Value invece di SelectedValue:


sql = "INSERT INTO Utenti (IDProvincia,IDComune) " & _
            "VALUES (" & _
            "" & Provincia.SelectedItem.Value & "," & _
            "" & Comune.SelectedItem.Value & ")"


------------------------------

www.infomidia.it
Modificato da infomidia il 17 giugno 2013 15.31 -

SelectedItem:
public virtual ListItem SelectedItem
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex];
}
return null;
}
}

SelectedValue:
public virtual string SelectedValue
{
get
{
int selectedIndex = this.SelectedIndex;
if (selectedIndex >= 0)
{
return this.Items[selectedIndex].Value;
}
return string.Empty;
}
...
Modificato da manuel0081 il 18 giugno 2013 10.51 -

Ormai programmano tutti... ma la professionalità appartiene a pochi

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.