Les données d'u DropDownList en fonction d'un autre DropDownList

Résolu
saritanet Messages postés 32 Date d'inscription samedi 2 août 2008 Statut Membre Dernière intervention 5 septembre 2008 - 6 août 2008 à 17:11
saritanet Messages postés 32 Date d'inscription samedi 2 août 2008 Statut Membre Dernière intervention 5 septembre 2008 - 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]@

6 réponses

ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
9 août 2008 à 16:05
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
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
6 août 2008 à 21:01
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 ;-)
0
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
6 août 2008 à 21:11
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
0
saritanet Messages postés 32 Date d'inscription samedi 2 août 2008 Statut Membre Dernière intervention 5 septembre 2008
9 août 2008 à 15:04
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

]

@
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
9 août 2008 à 15:56
La méthode 2 pour eviter l'injection SQL
0
saritanet Messages postés 32 Date d'inscription samedi 2 août 2008 Statut Membre Dernière intervention 5 septembre 2008
9 août 2008 à 20:24
ç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]@
0
Rejoignez-nous