IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Remplissage DropDownList en fonction d'une autre DropDownList ASP.NET VB.NET


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Remplissage DropDownList en fonction d'une autre DropDownList ASP.NET VB.NET
    Bonjour,

    Je suis actuellement en train de developper un portail de suivi d'incidents en ASP.NET (VB.NET) avec une base ACCESS de test.

    Je bloque sur un point.

    Je m'explique :

    J'ai 2 DropDownList. Une "DropDownListPays" et une "DropDownListSite".
    Un pays peut contenir plusieurs sites. J'aimerais que lorsque je sélectionne un pays dans la DDL Pays, seulement les sites qui se trouvent dans le Pays selectionné apparaissent dans la DDL Site sans pour autant recharger toute la page.



    Pour la partie rechargement partiel de la page j'utilise un updatepanel et un trigger dans le .ASPX (cette partie semble marcher convenablement ).
    Pour la partie remplissage de la DDL Site en fonction de la DDL Pays j'utilise des dataset dans le .ASPX.VB


    code :

    .ASPX

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Incidents.aspx.vb" Inherits="Incidents" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    	<title>Incidents</title>
    </head>
    <body>
    	<form id="formIncidents" runat="server">
     
    		<asp:ScriptManager ID="ScriptManager1" runat="server" />
     
    		<asp:Label ID="LabelPays" runat="server" Text="Pays :"></asp:Label>
    		<asp:DropDownList ID="DropDownListPays" runat="server" AutoPostBack="true"></asp:DropDownList></td>
     
    		<asp:Label ID="LabelSite" runat="server" Text="Site :"></asp:Label>
    		<asp:UpdatePanel ID="UpdatePanelDDLSite" UpdateMode="Conditional" runat="server">
    			<Triggers>
    				<asp:AsyncPostBackTrigger controlid="DropDownListPays" eventname="SelectedIndexChanged" />
    			</Triggers>
    			<ContentTemplate>
    				<asp:DropDownList ID="DropDownListSite" runat="server"></asp:DropDownList>  
    			</ContentTemplate>
    		</asp:UpdatePanel>
     
    	</form>
    </body>
    </html>
    .ASPX.VB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    Imports System.Data
    Imports System.Data.OleDb
     
     
    Partial Class Incidents
        Inherits System.Web.UI.Page
     
     
        Dim MyConnection As System.Data.OleDb.OleDbConnection
        Dim MyCommand As New OleDbCommand
        Dim MyDataSet As DataSet
        Dim MyDataAdapter As OleDbDataAdapter
        Dim Requete As String
     
    	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
            MyConnection = New OleDbConnection()
            MyConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\SOCIETE\Access\AccessPortail.accdb;Persist Security Info=True"
            MyConnection.Open()
     
     
            Requete = "SELECT DISTINCT Pays FROM Incidents ORDER BY Pays ASC"
            MyCommand = New OleDbCommand(Requete, MyConnection)
     
            MyDataAdapter = New OleDbDataAdapter(MyCommand)
            MyDataSet = New DataSet
            MyDataAdapter.Fill(MyDataSet, "Pays")
     
            DropDownListPays.DataSource = MyDataSet
            DropDownListPays.DataTextField = "Pays"
            DropDownListPays.DataValueField = "Pays"
            DropDownListPays.DataBind()
     
            MyDataSet.Clear()
    		MyConnection.Close()
     
        End Sub
     
     
        Protected Sub DropDownListPays_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownListPays.SelectedIndexChanged
     
     
            MyConnection = New OleDbConnection()
            MyConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\SOCIETE\Access\AccessPortail.accdb;Persist Security Info=True"
            MyConnection.Open()
     
     
            Requete = "SELECT DISTINCT Site FROM Incidents "
            Requete += "WHERE Pays= '" + DropDownListPays.SelectedValue.ToString() + "' "
            Requete += "ORDER BY Site ASC"
            MyCommand = New OleDbCommand(Requete, MyConnection)
     
            MyDataAdapter = New OleDbDataAdapter(MyCommand)
            MyDataSet = New DataSet
            MyDataAdapter.Fill(MyDataSet, "Site")
     
            DropDownListSite.DataSource = MyDataSet
            DropDownListSite.DataTextField = "Site"
            DropDownListSite.DataBind()
     
            MyDataSet.Clear()
            MyConnection.Close()
     
        End Sub
    End Class

    Ma partie Remplissage de DDL Site en fonction de DDL Pays ne fonctionnne pas..
    Ai-je le droit d'utilise les même DataTextField et DataValueField lors de mon remplissage de DDL Pays ?

    Auriez vous quelques idées ?

    Merci d'avance,

    Bien cordialement,

    Tan

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 51
    Points : 62
    Points
    62
    Par défaut
    Je ne sais pas si c'est la bonne solution, mais dans ton cas, que j'ai déjà croisé. Personnellement je laissais la page se recharché donc autopostback à true. Et je mettais le ViewState sur les éléments dont je voulais garder les valeurs à la page suivante.

    Comme ça sur l'évènement onChange de ta DdlPays tu peux effectuer les opérations que tu veux sur ta DdlSites.

    Voilà

    Cordialement.

    Bonne journée

    PS : Cette solution n'est sans doute pas la meilleure, mais elle fonctionne très bien pour des pages où il n'y a pas trop de données à mettre dans le ViewState.

  3. #3
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Elle fonctionne correctement à mon avis, c'est juste que la valeur dans DDLPays n'est pas la bonne puisque que tu rebindes cette dernière à chaque PageLoad

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour vos réponses.

    Citation Envoyé par lutecefalco Voir le message
    Elle fonctionne correctement à mon avis, c'est juste que la valeur dans DDLPays n'est pas la bonne puisque que tu rebindes cette dernière à chaque PageLoad
    Je n'ai pas l'impression que ce soit ça car ma DDL Site se vide lorsque je choisis un pays avec la DDL Pays.
    Donc il ne s'agit pas d'une mauvaise valeur mais il n'y a tout simplement pas de valeur dans DDL pays.

    En effet, en mode Pas à Pas dans VS, la requete que j'obtiens est la suivante :

    SELECT DISTINCT Site FROM Incidents WHERE Pays= '' ORDER BY Site ASC


    On voit bien que ma SelectedValue est nulle.
    Ceci dit j'ai quand même essayé de mettre un boolean afin de ne passer qu'une fois dans le page Load et j'obtiens le même resultat..
    Merci quand même.



    Citation Envoyé par Neodream Voir le message
    Je ne sais pas si c'est la bonne solution, mais dans ton cas, que j'ai déjà croisé. Personnellement je laissais la page se recharché donc autopostback à true. Et je mettais le ViewState sur les éléments dont je voulais garder les valeurs à la page suivante.

    Comme ça sur l'évènement onChange de ta DdlPays tu peux effectuer les opérations que tu veux sur ta DdlSites.

    Voilà

    Cordialement.

    Bonne journée

    PS : Cette solution n'est sans doute pas la meilleure, mais elle fonctionne très bien pour des pages où il n'y a pas trop de données à mettre dans le ViewState.

    Mon rechargement partiel de la page fonctionne bien(deja testé avec d'autres fonctions ) donc je ne pense pas que l'erreur vienne de la.
    Je vais quand même aller faire un tour du coté des viewstate pour voir ce que ça donne.
    Merci quand même

  5. #5
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par TannE Voir le message
    Merci pour vos réponses.
    Je n'ai pas l'impression que ce soit ça car ma DDL Site se vide lorsque je choisis un pays avec la DDL Pays.
    Donc il ne s'agit pas d'une mauvaise valeur mais il n'y a tout simplement pas de valeur dans DDL pays.

    En effet, en mode Pas à Pas dans VS, la requete que j'obtiens est la suivante :

    SELECT DISTINCT Site FROM Incidents WHERE Pays= '' ORDER BY Site ASC


    On voit bien que ma SelectedValue est nulle.
    Ceci dit j'ai quand même essayé de mettre un boolean afin de ne passer qu'une fois dans le page Load et j'obtiens le même resultat..
    Merci quand même.
    Bah c'est exactement ce que je dis, ta DDL est réinitialisée et donc la selectedvalue est nulle

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Bah c'est exactement ce que je dis, ta DDL est réinitialisée et donc la selectedvalue est nulle
    Oui excuse moi, Il semble que tu ais tout à fait raison. Mon boolean n'a pas fonctionné.
    Ma DDL Pays se REremplit à chaque fois.

    Je n'avais pas remarqué mais je repasse par le page_load à chaque fois.
    Comment faire pour que ça ne passe qu'une seule fois par le page_load ?
    Je pensais que mon UpdatePanel se chargait de rafraichir seulement une partie de la page..

  7. #7
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par TannE Voir le message
    Comment faire pour que ça ne passe qu'une seule fois par le page_load ?
    Regarde du côté de la propriété IsPostBack

    Citation Envoyé par TannE Voir le message
    Je pensais que mon UpdatePanel se chargait de rafraichir seulement une partie de la page..
    Visuellement oui, mais côté serveur tout est refait

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Regarde du côté de la propriété IsPostBack


    Visuellement oui, mais côté serveur tout est refait
    C'est parfait, c'est exactement ce que je cherchais.

    Merci beaucoup !

    Je remet le code avec la petite modification pour les suivants :

    .ASPX

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Incidents.aspx.vb" Inherits="Incidents" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    	<title>Incidents</title>
    </head>
    <body>
    	<form id="formIncidents" runat="server">
     
    		<asp:ScriptManager ID="ScriptManager1" runat="server" />
     
    		<asp:Label ID="LabelPays" runat="server" Text="Pays :"></asp:Label>
    		<asp:DropDownList ID="DropDownListPays" runat="server" AutoPostBack="true"></asp:DropDownList></td>
     
    		<asp:Label ID="LabelSite" runat="server" Text="Site :"></asp:Label>
    		<asp:UpdatePanel ID="UpdatePanelDDLSite" UpdateMode="Conditional" runat="server">
    			<Triggers>
    				<asp:AsyncPostBackTrigger controlid="DropDownListPays" eventname="SelectedIndexChanged" />
    			</Triggers>
    			<ContentTemplate>
    				<asp:DropDownList ID="DropDownListSite" runat="server"></asp:DropDownList>  
    			</ContentTemplate>
    		</asp:UpdatePanel>
     
    	</form>
    </body>
    </html>

    .ASPX.VB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    Imports System.Data
    Imports System.Data.OleDb
     
     
    Partial Class Incidents
        Inherits System.Web.UI.Page
     
     
        Dim MyConnection As System.Data.OleDb.OleDbConnection
        Dim MyCommand As New OleDbCommand
        Dim MyDataSet As DataSet
        Dim MyDataAdapter As OleDbDataAdapter
        Dim Requete As String
     
    	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
            MyConnection = New OleDbConnection()
            MyConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\SOCIETE\Access\AccessPortail.accdb;Persist Security Info=True"
            MyConnection.Open()
     
     
    		If not IsPostBack Then
     
    			Requete = "SELECT DISTINCT Pays FROM Incidents ORDER BY Pays ASC"
    			MyCommand = New OleDbCommand(Requete, MyConnection)
     
    			MyDataAdapter = New OleDbDataAdapter(MyCommand)
    			MyDataSet = New DataSet
    			MyDataAdapter.Fill(MyDataSet, "Pays")
     
    			DropDownListPays.DataSource = MyDataSet
    			DropDownListPays.DataTextField = "Pays"
    			DropDownListPays.DataValueField = "Pays"
    			DropDownListPays.DataBind()
     
    			MyDataSet.Clear()
     
    		End If
     
    		MyConnection.Close()
     
        End Sub
     
     
        Protected Sub DropDownListPays_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownListPays.SelectedIndexChanged
     
     
            MyConnection = New OleDbConnection()
            MyConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\SOCIETE\Access\AccessPortail.accdb;Persist Security Info=True"
            MyConnection.Open()
     
     
            Requete = "SELECT DISTINCT Site FROM Incidents "
            Requete += "WHERE Pays= '" + DropDownListPays.SelectedValue.ToString() + "' "
            Requete += "ORDER BY Site ASC"
            MyCommand = New OleDbCommand(Requete, MyConnection)
     
            MyDataAdapter = New OleDbDataAdapter(MyCommand)
            MyDataSet = New DataSet
            MyDataAdapter.Fill(MyDataSet, "Site")
     
            DropDownListSite.DataSource = MyDataSet
            DropDownListSite.DataTextField = "Site"
            DropDownListSite.DataBind()
     
            MyDataSet.Clear()
            MyConnection.Close()
     
        End Sub
    End Class

    Encore Merci !

    Bien cordialement,

    Tan

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/03/2015, 23h16
  2. Remplissage d'une dropdownlist en fonction d'une textbox
    Par soazig dans le forum ASP.NET Ajax
    Réponses: 1
    Dernier message: 30/10/2013, 09h50
  3. [XL-2010] Remplissage de lignes automatique en fonction d'une autre
    Par willyava dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 05/09/2010, 22h04
  4. Réponses: 4
    Dernier message: 19/04/2009, 20h49
  5. Remplissage DropdownList à l'aide d'une autre
    Par noskill_62 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/01/2008, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo