Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473

    ASP.NET Problema dropdown e re-load pagina

    Ciao a tutti!
    Ho una pagina dove viene visualizzata un anagrafica di una azienda, tramite un id che passo nel link, visualizzo i dati dell'azienda
    In questa pagina nel load mi carico i dati e li scrivo nelle varie textbox.
    Sono presenti anche 3 dropdownlist per regione, provincia, comune; sono concatenate dove se si seleziona una determinata regione, nella dropdown delle province si popolerà con le rispettive province, stessa cosa per i comuni.
    Quando eseguo per la prima volta la pagina mi popola coirrettamente le text e le dropdown, ma se provo a cambiare la regione, la pagina si ricarica (perchè deve popolare la dropdown delle province) e seleziona la regione salvata nel db e non quella appena selezionata.

    Ecco il codice di modifica_anagrafica.aspx

    codice:
            <fieldset class="register">
                <legend>Informazioni account</legend>
                <table border="0" cellpadding="3">
                    <tr>
                        <td>
                            <asp:Label ID="Label1" runat="server" AssociatedControlID="Ragione_sociale" Width="150px">Reagione Sociale*:</asp:Label>
                        </td>
                        <td>
                            <asp:TextBox ID="Ragione_sociale" runat="server" Width="350px" MaxLength="200"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="Ragione_sociale"
                                CssClass="failureNotification" ErrorMessage="La Ragione Sociale è obbligatoria." ToolTip="La Ragione Sociale è obbligatoria." ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
    
                    <tr>
                        <td>
                            <asp:Label ID="Label2" runat="server" AssociatedControlID="Forma_giuridica">Forma giuridica*:</asp:Label>
                        </td>
                        <td>
                            <asp:DropDownList ID="Forma_giuridica" runat="server" 
                                DataSourceID="SqlDataSource1" DataTextField="forma" DataValueField="id" Width="350px">
                            </asp:DropDownList>
                            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                                ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
                                SelectCommand="SELECT * FROM [FORME_GIURIDICHE] ORDER BY [forma]">
                            </asp:SqlDataSource>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="Forma_giuridica"
                                CssClass="failureNotification" ErrorMessage="La Forma giuridica è obbligatoria."
                                ToolTip="La Forma giuridica è obbligatoria." ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
    
                    <tr>
                        <td>
                            <asp:Label ID="Label3" runat="server" AssociatedControlID="Codice_fiscale">Codice fiscale*:</asp:Label>
                        </td>
                        <td>
                            <asp:TextBox ID="Codice_Fiscale" runat="server" Width="350px" MaxLength="50"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="Codice_fiscale"
                                CssClass="failureNotification" ErrorMessage="Il Codcie fiscale è obbligatorio."
                                ToolTip="Il Codice fiscale è obbligatorio." ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
    
    
                    <tr>
                        <td>
                            <asp:Label ID="Label4" runat="server" AssociatedControlID="Codice_fiscale">Regione:</asp:Label>
                        </td>
                        <td>
                            <asp:DropDownList ID="Regione" runat="server" DataSourceID="SqlDataSource2" DataTextField="regione" DataValueField="id" 
                                Width="350px" AutoPostBack="true" AppendDataBoundItems="true">
                            </asp:DropDownList>
                             <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
                                ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
                                SelectCommand="SELECT * FROM [REGIONI] ORDER BY [regione]">
                            </asp:SqlDataSource>
                        </td>
                    </tr>
    
                    <tr>
                        <td>
                            <asp:Label ID="Label5" runat="server" AssociatedControlID="Provincia">Provincia:</asp:Label>
                        </td>
                        <td>
                            <asp:DropDownList ID="Provincia" runat="server" DataSourceID="SqlDataSource3" 
                                DataTextField="provincia" DataValueField="id" AutoPostBack="true" AppendDataBoundItems="true"
                                Width="350px">
                            </asp:DropDownList>
                             <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
                                ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
                                SelectCommand="SELECT * FROM [PROVINCIE] WHERE n_regione=@regione ORDER BY [provincia]">
                                <SelectParameters>
                                    <asp:ControlParameter Name="regione" 
                                    ControlID="Regione"
                                    PropertyName="SelectedValue"/>
                                </SelectParameters>
                            </asp:SqlDataSource>
    
                        </td>
                    </tr>
    
                    <tr>
                        <td>
                            <asp:Label ID="Label6" runat="server" AssociatedControlID="Comune">Comune*:</asp:Label>
                        </td>
                        <td>
                            <asp:DropDownList ID="Comune" runat="server" DataSourceID="SqlDataSource4" 
                                DataTextField="comune" DataValueField="id" Width="350px"  AppendDataBoundItems="true">
                            </asp:DropDownList>
                             <asp:SqlDataSource ID="SqlDataSource4" runat="server" 
                                ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
                                SelectCommand="SELECT * FROM [COMUNI] WHERE n_provincia=@provincia ORDER BY [comune]">
                                <SelectParameters>
                                    <asp:ControlParameter Name="provincia" 
                                    ControlID="Provincia"
                                    PropertyName="SelectedValue"/>
                                </SelectParameters>
                            </asp:SqlDataSource>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="Comune"
                                CssClass="failureNotification" ErrorMessage="Il Comune è obbligatorio."
                                ToolTip="Il Comune è obbligatorio." ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
    
                        </td>
                    </tr>
    
                    <tr>
                        <td>
                            <asp:Label ID="Label7" runat="server" AssociatedControlID="Indirizzo">Indirizzo sede legale*:</asp:Label>
                        </td>
                        <td>
                            <asp:TextBox ID="Indirizzo" runat="server" Width="350px"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ControlToValidate="Indirizzo"
                                CssClass="failureNotification" ErrorMessage="L'Indirizzo della sede legale è obbligatorio."
                                ToolTip="L'Indirizzo della sede legale è obbligatorio." ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
    
                    <tr>
                        <td>
                            <asp:Label ID="Label8" runat="server" AssociatedControlID="Email">Email*:</asp:Label>
                        </td>
                        <td>
                            <asp:TextBox ID="Email" runat="server" Width="350px"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator6" runat="server" ControlToValidate="Email"
                                CssClass="failureNotification" ErrorMessage="Email obbligatoria." 
                                ToolTip="Email obbligatoria." ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
                            <asp:RegularExpressionValidator  ID="RegularExpressionValidator1" runat="server" ControlToValidate="Email"
                                CssClass="failureNotification" ErrorMessage="Email non corretta." ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
                                ToolTip="Email non corretta." ValidationGroup="LoginUserValidationGroup">*</asp:RegularExpressionValidator >
                        </td>
                    </tr>
    
                    <tr>
                        <td>
                            <asp:Label ID="Label9" runat="server" AssociatedControlID="Note">Note:</asp:Label>
                        </td>
                        <td>
                            <asp:TextBox ID="Note" runat="server" Width="350px" TextMode="MultiLine" 
                                Height="163px"></asp:TextBox>
                        </td>
                    </tr>
    
                </table>
            </fieldset>
            <div class="submitButton">
                <asp:Button ID="Button1" runat="server" Text="Annulla" 
                    PostBackUrl="~/reserved/Anagrafiche.aspx" />
                <asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Salva" ValidationGroup="LoginUserValidationGroup"
                    Width="60px" />
            </div>
    Ecco il codice di modifica_anagrafica.aspx.vb

    codice:
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
            indice = Request.QueryString("id")
    
            'CARICO I DATI DELL'AZIENDA SELEZIONATA
            Dim SQL As String
            Dim disattivato As Boolean = True
    
            SQL = "SELECT * FROM AZIENDE WHERE id=@id;"
            Dim cmd As SqlCommand
            cmd = New SqlCommand(SQL, New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ToString))
    
            Try
    
                With cmd.Parameters
                    .Add("@id", SqlDbType.NVarChar, 50)
                End With
    
                cmd.Parameters("@id").Value = indice
    
                'APRE LA CONNESSIONE
                cmd.Connection.Open()
                'ESEGUE NLA QUERY, RESTITUISCE UN OGGETTO SqlDataReader
    
                Dim dr As SqlDataReader = (cmd.ExecuteReader(CommandBehavior.CloseConnection))
    
    
                If dr.HasRows Then
                    'si sposta ciclicamente attraverso i record e visualizza i valori.
                    Do While dr.Read
                        Ragione_sociale.Text = dr("ragione_sociale")
                        Codice_Fiscale.Text = dr("codice_fiscale")
    
                        If IsDBNull(dr("n_forma_giuridica")) Then
                            Forma_giuridica.SelectedValue = 1
                        Else
                            Forma_giuridica.SelectedValue = dr("n_forma_giuridica")
                        End If
    
                        If IsDBNull(dr("n_regione")) Then
                            Regione.SelectedValue = 1
                        Else
                            Regione.SelectedValue = dr("n_regione")
                        End If
    
                        If IsDBNull(dr("n_provincia")) Then
                            Provincia.SelectedValue = 1
                        Else
                            Provincia.SelectedValue = dr("n_provincia")
                        End If
    
                        If IsDBNull(dr("n_comune")) Then
                            Comune.SelectedValue = 1
                        Else
                            Comune.SelectedValue = dr("n_comune")
                        End If
    
                        Indirizzo.Text = dr("indirizzo")
                        Email.Text = dr("email")
                        Note.Text = dr("note_azienda")
    
                    Loop
    
                Else
                    'MsgBox("Utente e/o password errati", vbCritical, "ERRORE")
                End If
    
                dr.Close()
    
            Catch ex As Exception
                'messageBox.Show("Riportare il seguente errore al programmatore: ERRORE 0161" & vbCrLf & ex.Message, "Errore sql")
                Exit Sub
            Finally
                cmd.Connection.Close()
            End Try
    
    
    
        End Sub
    nella dropdown delle regioni ho inserito AutoPostBack="true" AppendDataBoundItems="true"
    nelle province AutoPostBack="true" AppendDataBoundItems="true"
    nei comuni AppendDataBoundItems="true"


    Grazie

    Ciao


  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    devi controllare il postback per il caricamento della prima Drop

    codice:
    if not ispostback then
    ...
    end if

    altrimenti si ricarica/ripopola ad ogni postback

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Grazie,
    si funziona, però adesso ho un altro problema..
    quando cambio la regione, non si ripopola la dropdown delle province, mi sa che non va perche ho messo AppendDataBoundItems="true".

    Allora nelle dropdown list ho messo il parametro AppendDataBoundItems="true" perchè se omesso, quando carico i dati dal db, mi va in errore perche la dropdown delle province si inizializza con la prima regione selezionata e di conseguenza quando vado ad assegnare il valore della provincia se non è della prima regione va in errore. Perciò con AppendDataBoundItems="true" durante l'evento load mi ripopola correttamente le dropdown delle province e dei comuni prima di assegnarli il valore da selezionare.

    Mentre quando faccio un postback per "colpa" di questo parametro non mi ripopola le dropdown province e comuni...

    Esiste un modo di fare il databinding delle dropdown direttamente da codice?
    Cosi' lo uso durante il carico dei dati dal db e tolgo AppendDataBoundItems="true"

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    codice:
    '.... ottieni un datatable "dtSP" prendendo le provincie della regione selezionata
    
    ddProvince.DataSource = dtSP
    ddProvince.DataValueField = dtSP.Columns(X).ToString()  ' [campo value]
    ddProvince.DataTextField = dtSP.Columns(Y).ToString()  ' [campo text]
    ddProvince.DataBind()
    
    ddProvince.Items.Insert(0, New ListItem("", ""))

    dove X ed Y sono gli indici delle COLONNE dei records che fanno rispettivamente da value e text degli Items. Oppure le scrivi esplicitamente, "COD_PROVINCIA" e "DESC_PROVINCIA"...


    Questo devi farlo al SelectedIndexChanged della drop delle Regioni.
    Ultima modifica di djciko; 07-05-2014 a 11:58

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Grazie, ora funziona!

    Ho lasciato AppendDataBoundItems="true" perchè altrimenti (quando apro per la prima volta la pagina all'esecuzione del evento load) va in errore perchè le dropdown sono vuote...
    Mentre nel selectindex ho aggiunto
    codice:
    Provincia.Items.Clear()
    cosi non accodo gli elementi ma li svuoto ogni volta.



    Mentre ci sono avevo altri 2 dubbi...
    1) Io ho una pagina generale con una datagridview con due colonne (ragione sociale e modifica ) nella colonna modifica ho un link ad una nuova pagina (modifica_anagrafica.aspx) dove invio l'id dell'anagrafica.
    In modifica_anagrafica.aspx mi recupero l'id e visualizzo i dati con regione, provincia e comune come descritto sopra.
    E' possibile passare l'ID dell'anagrafica tramite POST o qualche altro metodo nuovo che io non conosco?

    2) Quali sono i metodi per salvare delle variabile che rimangono in memoria durante la navigazione senza dover usare le session?
    ESEMPIO: un utente visualizza una pratica, mi salvo il codice della pratica in una variabile e nelle varie pagine so quale pratica sto visionando
    Ultima modifica di androita; 07-05-2014 a 14:52

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    - AppendDataBoundItems non credo che ti serva.

    - 1) la prima cosa che mi viene in mente (oltre ad usare il metodo Post invece del Get, cosa per la quale non ti so aiutare perche' non l'ho mai fatta - cerca su internet) è usare un campo Hidden invece di attaccare il valore all'Hyperlink, usando poi la proprietà PostBackURL. Ma mi sa che con l'HyperLink non è fattibile, dovresti usare un <asp:button>.

    - 2) ViewState (nella stessa pagina), scrittura di un Cookie, scrittura di un file di testo, scrittura di un file XML o Session che, nelle nuove versioni del Framework funziona bene.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    ok grazie...

    e si lo so che AppendDataBoundItems non mi servirebbe, però dopo l'evento load va in errore "SelectedValue in 'Comune' non valido, poiché non è incluso nell'elenco di elementi."

    Per le variabili allora userò le session.. pensavo già ad una classe dove poter salvare delle variabili..

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    perche' vuoi selezionare un elemento con SelectedValue ?

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    perchè nella pagina modifica_anagrafica, visualizzo i dati anagrafici con la regione, provincia, comune e devo dare la possibilità di poter aggiornare i dati se sbagliati..

    Perciò nel Load carico i dati e nelle dropdown seleziono il valore salvato in precedenza

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Ok, ma a quanto pare non lo trova nell'elenco dei Values disponibili nell'insieme degli Items della DropDownList, quindi ti da' quell'errore..

    Devi stare attento alle dinamiche di caricamento:

    -In PageLoad carichi la Drop delle Regioni (controllando che l'operazione sia fatta una sola volta, al primo caricamento -postback false-)
    -Al SelectedIndexChanged delle Regioni carichi le Provincie
    -Al SelectedIndexChanged delle Provincie carichi i Comuni

    oppure usi Ajax:
    http://www.asp.net/AjaxLibrary/AjaxC...gDropDown.aspx

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.