Devo modificare i dati di un cliente.
Il problema si verifica nelle drop della provincia e del comune.
Come da procedura qui sotto, tutto funziona bene, la scheda del cliente viene caricata, e anche provincia e comune.
Il problema è questo:
diciamo che la provincia è MILANO, questa viene caricata regolarmente e la lista dei comuni pure.
Ora modifico un comune senza toccare la provincia.
Salvo il tutto.
Non viene salvato il comune prescelto, ma quello in cima a,lla lista nella dropdown.



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.DataSource.close()
            Provincia.Dispose()
            cn.Close()
        
        
            dap = New OleDbDataAdapter("Select * from Clienti where IDCliente=" & Request("ID"), cn)
            dst = New DataSet
            dap.Fill(dst, "Clienti")
        
            With dst.Tables("Clienti").Rows(0)
                
                CodGiss.Text = ""
                RagSoc.Text = ""
                CodPers.Text = ""
                Utente.Text = ""
                Password.Text = ""
                Telefono.Text = ""
                Reperibile1.Text = ""
                Telefono1.Text = ""
                Reperibile2.Text = ""
                Telefono2.Text = ""
                Manutenzione.Text = ""
                TelefonoManutenzione.Text = ""
                Email.Text = ""
                Indirizzo.Text = ""
                Note_Emergenza.Text = ""
                Note.Text = ""
                
                
                CodGiss.Text = .Item("CodGiss")
                RagSoc.Text = .Item("RagSoc")
                If DBNull.Value.Equals(.Item("CodPers")) = False Then CodPers.Text = .Item("CodPers")
                If DBNull.Value.Equals(.Item("Utente")) = False Then Utente.Text = .Item("Utente")
                If DBNull.Value.Equals(.Item("pw")) = False Then Password.Text = .Item("pw")
                'Comune.SelectedValue = .Item("IDComune")
                If DBNull.Value.Equals(.Item("Reperibile1")) = False Then Telefono.Text = .Item("Telefono")
                If DBNull.Value.Equals(.Item("Reperibile1")) = False Then Reperibile1.Text = .Item("Reperibile1")
                If DBNull.Value.Equals(.Item("Telefono1")) = False Then Telefono1.Text = .Item("Telefono1")
                If DBNull.Value.Equals(.Item("Reperibile2")) = False Then Reperibile2.Text = .Item("Reperibile2")
                If DBNull.Value.Equals(.Item("Telefono2")) = False Then Telefono2.Text = .Item("Telefono2")
                If DBNull.Value.Equals(.Item("Manutenzione")) = False Then Manutenzione.Text = .Item("Manutenzione")
                If DBNull.Value.Equals(.Item("TelefonoManutenzione")) = False Then TelefonoManutenzione.Text = .Item("TelefonoManutenzione")
                If DBNull.Value.Equals(.Item("Email")) = False Then Email.Text = .Item("Email")
                If DBNull.Value.Equals(.Item("Indirizzo")) = False Then Indirizzo.Text = .Item("Indirizzo")
                If DBNull.Value.Equals(.Item("Note_Emergenza")) = False Then Note_Emergenza.Text = .Item("Note_Emergenza")
                If DBNull.Value.Equals(.Item("Note")) = False Then Note.Text = .Item("Note")
                
                cn.Open()
                sql = "SELECT * FROM Query_Comuni WHERE IDComune=" & .Item("IDComune")
                dap1 = New OleDbDataAdapter(sql, cn)
                dst1 = New DataSet
                dap1.Fill(dst1, "Query_Comuni")
                Dim IDProvincia As Integer = dst1.Tables("Query_Comuni").Rows(0).Item("IDProvincia")
            
                Provincia.SelectedValue = IDProvincia
                'MsgBox(IDProvincia)
                Comune.Items.Clear()
                cmd = New OleDbCommand("select * from Query_Comuni WHERE IDProvincia=" & IDProvincia & " ORDER BY Comune", cn)
                Comune.DataSource = cmd.ExecuteReader()
                Comune.DataTextField = "Comune"
                Comune.DataValueField = "IDComune"
                Comune.DataBind()
                Comune.DataSource.close()
                Comune.Dispose()
                Comune.Enabled = True
                Comune.SelectedValue = .Item("IDComune")
                cn.Close()
                
            End With
            
        End If
    End Sub


www.webrimini.com
E il codice del salvataggio? ;)

Occhio anche a questa riga:

If DBNull.Value.Equals(.Item("Reperibile1")) = False Then Telefono.Text = .Item("Telefono")


Non vorrei fosse un errore di copia/incolla.

Ormai programmano tutti... ma la professionalità appartiene a pochi
No quella riga va bene, non è un salvataggio ma un UPDATE, qui il codice:

 
 
Protected Sub Inserisci_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
         
        cn.Open() 
         
        If file.Value <> "" Then 
            'Crea il nome e salva il file originale     
            Dim Destinazione As String = "Public\Clienti" 
            Directory.CreateDirectory(Server.MapPath(Destinazione)) 
            Dim d As String = Trim(Str(Today.Day)) & Trim(Str(Today.Month)) & Trim(Str(Today.Year)) 
            Dim h As String = Trim(Str(Today.Hour)) & Trim(Str(Today.Minute)) & Trim(Str(Today.Second)) 
            Dim Randi As New Random() 
            Dim r As String = Trim(Str(Randi.Next(10000000, 99999999))) ' un numero compreso tra 10000000 e 99999999            
            Nome = Trim(Str(Session("ID"))) & Trim(d) & Trim(h) & Trim(r) & System.IO.Path.GetExtension(file.PostedFile.FileName) 
            Directory.CreateDirectory(Server.MapPath(Destinazione)) 
            file.PostedFile.SaveAs(Server.MapPath(Destinazione) & "\" & Nome) 
             
            'Carica il file appena salvato e lo mette nell'oggetto ObjBMP 
            Dim objBMP As System.Drawing.Bitmap 
            objBMP = New Bitmap(Server.MapPath(Destinazione) & "\" & Nome) 
            'Imposta le dimensioni 
            Dim mySize As Size 
            mySize.Width = 800 
            mySize.Height = 800 
             
            'Salva il tutto 
            'Dim NomeNew As String = Trim("New" & System.IO.Path.GetExtension(inputFile.PostedFile.FileName)) 
            Dim objBMP1 As System.Drawing.Bitmap = ResizeImage(objBMP, mySize, True) 
            objBMP1.Save(Server.MapPath(Destinazione) & "\pic800-" & Nome) 
             
             
            objBMP = New Bitmap(Server.MapPath(Destinazione) & "\" & Nome) 
            'Imposta le dimensioni 
            mySize.Width = 300 
            mySize.Height = 300 
             
            'Salva il tutto 
            'Dim NomeNew As String = Trim("New" & System.IO.Path.GetExtension(inputFile.PostedFile.FileName)) 
            Dim objBMP2 As System.Drawing.Bitmap = ResizeImage(objBMP, mySize, True) 
            objBMP2.Save(Server.MapPath(Destinazione) & "\pic-" & Nome) 
        End If 
         
        'MsgBox(Comune.SelectedValue) 
         
        sql = "UPDATE Clienti SET " & _ 
              "CodGiss ='" & (fApici(CodGiss.Text) & "'," & _ 
              "RagSoc ='" & fApici(RagSoc.Text) & "'," & _ 
              "CodPers ='" & fApici(CodPers.Text) & "'," & _ 
              "Utente ='" & fApici(Utente.Text) & "'," & _ 
              "pw ='" & fApici(Password.Text) & "'," & _ 
              "IDComune =" & Comune.SelectedValue & "," & _ 
              "Telefono ='" & fApici(Telefono.Text) & "'," & _ 
              "Reperibile1 ='" & fApici(Reperibile1.Text) & "'," & _ 
              "Telefono1 ='" & fApici(Telefono1.Text) & "'," & _ 
              "Reperibile2 ='" & fApici(Reperibile2.Text) & "'," & _ 
              "Telefono2 ='" & fApici(Telefono2.Text) & "'," & _ 
              "Manutenzione ='" & fApici(Manutenzione.Text) & "'," & _ 
              "TelefonoManutenzione ='" & fApici(TelefonoManutenzione.Text) & "'," & _ 
              "Email ='" & fApici(Email.Text) & "'," & _ 
              "Indirizzo ='" & fApici(Indirizzo.Text) & "'," & _ 
              "Note_Emergenza ='" & fApici(Note_Emergenza.Text) & "'," & _ 
              "[Note] ='" & fApici(Note.Text) & "' " & _ 
              "WHERE IDCliente=" & Request("ID")) 
         
 
        cmd = New OleDbCommand(sql, cn) 
        cmd.ExecuteNonQuery() 
        cn.Close() 
         
        Response.Redirect("Clienti.aspx") 
         
    End Sub 
 

Modificato da massimo74rn il 28 agosto 2010 22.15 -

www.webrimini.com
il codice sembra corretto (però la prox volta incolla solo le righe interessate). Sei andato in debug?

Ormai programmano tutti... ma la professionalità appartiene a pochi
19 messaggi dal 21 giugno 2010
Così a occhio pare tutto ok a parte il fatto che forse qualche Classe quì andava scritta. Il codice diventa quasi illeggibile.

L'unico dubbio è a fine inserimento sul tuo redirect alla Clienti.aspx senza alcun parametro QueryString. Forse la tua update funziona ma quando ricarichi la pagina non essendoci il parametro ID ("Response.Redirect("Clienti.aspx?ID=...")") lei non ti legge i valori che dovrebbe, quindi rimani sempre sul primo elemento della DropDown.

Spero ti possa aiutare.
Saluti
no, l'ultimo passaggio è corretto, in quanto dopo l'update mi occorre vedere la lista clienti seza filtri.

www.webrimini.com
x le classi, dico la verità non le ho mai usate, una dritta su come scriverle non mi dispiacerebbe.

www.webrimini.com
19 messaggi dal 21 giugno 2010
non capisco come fa a funzionarti:

dap = New OleDbDataAdapter("Select * from Clienti where IDCliente=" & Request("ID"), cn)

senza passare un ID come querystring.

In ogni caso tu quì hai degli oggetti come per esempio CLIENTE, COMUNE, PROVINCIA. Parti dal principio che ognuno di questi per te dovrebbe essere una classe. Con le relative proprietà. Per esempio:

Public Class Comune

Public Property ID() as Integer
... Get
... Set
End Property

Public Property Provincia() as String
... Get
... Set
End Property

Public Property Comune() as String
... Get
... Set
End Property

'Costruttore
public sub New()
End sub

'Costruttore
public sub New(ByVal ID As Integer, ByVal Provincia As String, ByVal Comune As String)
Me.ID = ID
Me.Provincia = Provincia
Me.Comune = Comune
End sub

End Class


Poi dentro la classe dichiari anche i metodi GetComune() ecc...
L'approccio giusto secondo me è quello. Tutto il framework ruota attorno a questo concetto, la cosiddetta OOP. Poi avrai anche una classe ComuniCollection per esempio dove gestire le liste di oggetti 'Comune'. Se non hai basi di OOP però è dura da comprendere in queste 4 righe.

La bozza di classe che ho scritto sopra sicuramente non calza il tuo esempio ma ti da spunto magari. Almeno spero.

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.