Les données d'u DropDownList en fonction d'un autre DropDownList [Résolu]

saritanet 32 Messages postés samedi 2 août 2008Date d'inscription 5 septembre 2008 Dernière intervention - 6 août 2008 à 17:11 - Dernière réponse : saritanet 32 Messages postés samedi 2 août 2008Date d'inscription 5 septembre 2008 Dernière intervention
- 9 août 2008 à 20:24
Bonjour,
Dans mon application , j'ai deux DropDownLists. Mon obectif est de choisir une donnée d'un premier DropDownList, et selon cette donnée, le 2 eme DropDownList doit être en relation à cette dernière. Par exemple chaque service a plusieurs ateliers, donc lorsque j choisis un service donnée, dans le 2ème DropDownList je ne dois avoir que les ateliers liés à ce dernier service et pas tous les ateliers qu'existent dans la base de données. Pour ce faire, j'ai lié le 1 er DropDownList normalement à la base de donnée, et le 2eme j'ai voulu le faire avc des requêtes Sql paramètrés, donc j'ai cliqué 2 fois sur dropDownList2 et j'ai écri le code suivant:
Protected

Sub DropDownList2_SelectedIndexChanged(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles DropDownList1.SelectedIndexChanged

maRequete2 =
" select nom_atelier from atelier where code_service in (select code_service from service where service= @service)"
myCommand2 =
New SqlCommand(maRequete2, maConnexionSQLsrv)

With myCommand2.Parameters
         .Add(
New SqlParameter(
"@service", SqlDbType.Char, 50))

End
With
With myCommand2
           .Parameters(
"@service").Value =
Me.DropDownList1.Text

End
With
Try
myCommand2.Connection.Open()
myCommand2.ExecuteNonQuery()
myCommand2.Connection.Close()

Catch ex
As Exception

         Me.Label1.Text =
"prb ds la selection de l'atelier "
End
Try
End
Sub

Le problème c'est que dans le navigateur, je trouve DropDowList2  vide. Veuillez me dire comment je pourrai me procéder pour réaliser cela et merci d'avance pour votre aide

[mailto:S@R S@R]@
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 9 août 2008 à 16:05
3
Merci
Bonjour,

1/ Si je comprends bien l'organisation de tes tables, ta requête n° 2 marcherait sans doute, mais il y a plus simple.
Dans et dans ce cas ou j mettrai que la valeur de service est dropdownlist1? "), la réponse est dans le selectparameter du sqldatasource2 de ta ddl2, où tu as :

C'est précisément cette partie qui dit : a/ que la source de ddl2 est ta ddl1, b/ que le nom de la variable (i.e; @code dans la requête) est "code", et c/ que cette variable est remplie par la valeur sélectionnée.

Sinon, tu peux aussi garder ta requête n° 2 en mettant dans DataValueField de ta ddl1 "service" et dans le controlparameter de la deuxième sqldatasource Name="service" (mais encore une fois, je te conseille plutôt de passer par la requête sql la plus simple, et de jouer sur DataValueField).

GGtry

Merci ggtry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de ggtry
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 6 août 2008 à 21:01
0
Merci
Salut,

1 --> Tu ne fais pas intervenir ta deuxieme ddl dans le code
2 --> un select se lit avec un executereader et non un execute non query
3 --> elle est comment ta collection sortie de ta base
4 --> Le close connection met le dans un finally c'est plus propre

Ta requete fonctionne telle en mode debug bon parametre qui arrive

Comment tu bind ta premiere ddl et ta deuxieme?

Esperant avoir dépanner un peu ;-)
Commenter la réponse de nhervagault
ggtry 417 Messages postés vendredi 13 juin 2008Date d'inscription 21 juillet 2010 Dernière intervention - 6 août 2008 à 21:11
0
Merci
Bonsoir,

Si ta dropdownlist2 n'est liée que lors du selectedindexchanged de la ddl1, il est normal qu'elle soit vide au départ, puisqu'aucun choix n'a été fait dans ddl1.
Mais tu peux faire beaucoup plus simplement, en liant directement ta ddl2 à l'item sélectionné dans ta ddl1, sans aucun codebehind. Il suffit que la clause la variable de la clause where de ddl2 soit liée à la sélection dans ddl1 (par défaut, au départ, ce sera la première valeur affichée dans ddl1). Tu peux faire par exemple :

<SelectParameters>

</SelectParameters>
 

nb. je mets "ceci" pour la ddl1 et "cela" pour la ddl2 donc, dans ton exemple, 1/ service et 2/ atelier.
La deuxième requête pourra plutôt être du style
SELECT IDCela, IDCeci, Cela FROM TableCela WHERE (IDCeci = @IDCeci) ORDER BY Cela

GGtry
Commenter la réponse de ggtry
saritanet 32 Messages postés samedi 2 août 2008Date d'inscription 5 septembre 2008 Dernière intervention - 9 août 2008 à 15:04
0
Merci
Le 1er ddl appartient à la procédure du 2eme ddl, en tt cas j pense que ça va marcher avec la méthode de ggtry, sauf que j'ai pas su comment insérer la 2eme requête, en fait j'ai pas su est ce qu'il faut faire 
select nom_atelier from atelier where code_service in (select code_service from service where service= ' "DropDownList1" ')
ou bien:
select nom_atelier from atelier where code_service in (select code_service from service where service= @service)
 et dans ce cas ou j mettrai que la valeur de service est dropdownlist1? 
                     Merci pour votre aide



[mailto:S@R

S@R

]

@
Commenter la réponse de saritanet
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 9 août 2008 à 15:56
0
Merci
La méthode 2 pour eviter l'injection SQL
Commenter la réponse de nhervagault
saritanet 32 Messages postés samedi 2 août 2008Date d'inscription 5 septembre 2008 Dernière intervention - 9 août 2008 à 20:24
0
Merci
ça a bien marché, merci bcp GGtry et nhervagault pour l'aide c'est trés gentil de votre part

[mailto:S@R S@R]@
Commenter la réponse de saritanet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.