GridView et "évènement Sorting" [Résolu]

Messages postés
27
Date d'inscription
lundi 2 mai 2005
Dernière intervention
3 janvier 2008
- - Dernière réponse : JuLsupinfo
Messages postés
11
Date d'inscription
mardi 24 février 2004
Dernière intervention
21 novembre 2007
- 18 juil. 2007 à 09:29
Bonjour,

j'ai un Gridview avec tri (AllowSorting="True") bindé à un SqlDataSource. Le tri s'effectue correctement sur les colonnes.
Pour faire une recherche sur les données qui y sont affichées sur un clik bouton, je crée un nouveau SqlDataDource en code behind faisant la requête de recherche.

SqlDataSource sds = new SqlDataSource();
....
MyGridView.DataSource = sds;
MyGridView.dataBind();
...

Le Gridview affiche bien les données voulues.
Le problème vient lorque j'essaye de faire un tri sur une colonne du GridView "fraichement bindé", j'ai une erreur :

"Le GridView "MyGridView" a déclenché un évènement Sorting qui n'était pas géré"  

???
J'ai bien essayé de forcer en code-behind  après le databind() :

MyGridView.AllowSorting = true;
MyGridView.Columns[0].SortExpression = "ITV_SN";

mais rien y fait.

Que faire ??

Merci d'avance.
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
79
Date d'inscription
lundi 28 octobre 2002
Dernière intervention
21 octobre 2008
3
Merci
Personnellement pour un affichage d'une recherche  avancée dans un Gridview, j'ai créé ma requête "reqRecherche" que j'envois ensuite dans la data source.

SqlDataSourcePersonne.SelectCommand = reqRecherche
hdnReqRecherche.value = reqRecherche
SqlDataSourcePersonne.DataBind()
GridViewPersonne.DataBind()

mais pour que le tri fonctionne il faut réinjecté la requête dans le prerender du Gridview (ou de la page) :






If
hdnReqRecherche.Value <>

""



Then

   SqlDataSourcePersonne.SelectCommand = hdnReqRecherche.Value
   SqlDataSourcePersonne.DataBind()


End



If

GridViewPersonne.DataBind()



C'est pour cette raison que je stock la requête dans Hiddenfield.

Merci zuff 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de zuff
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
1
Merci
pourquoi ne pas utiliser le meme sqldatasource en rajouter un controlparameter associé à la textbox de recherche ?

le code que donne gldfdp permet seulement de s'abonner à l'event sorting du gridview mais tu n'en as pas besoin si tu le bind en utilisant le sqldatasource. C'est utile si tu le bind "à l'ancienne" (je bind toujours à l'ancienne, je trouve les XXXDatasource stupide).

<hr />Cyril - MSP - MCTS ASP.net & SQL
Commenter la réponse de jesusonline
Messages postés
91
Date d'inscription
lundi 30 juin 2003
Dernière intervention
21 février 2008
0
Merci
MyGridView.Sorting+=




new



GridViewSortEventHandler
(MyGridView_Sorting); Si tu as défni une fonction de tri. Cela si tu bind en code-behind.
Commenter la réponse de gldfdp
Messages postés
27
Date d'inscription
lundi 2 mai 2005
Dernière intervention
3 janvier 2008
0
Merci
merci de ta réponse ..mais ça marche pas.
Toujours le même message d'erreur.
J'ai essayé avant et après le databind() mais je ne suis pas sûr que ca soit au bon endroit (j'ai toujours pas vraiment bien compris la chronologie des évènements d'ASP.NET quand il reconstruit sa page)
De plus, il me faut redéfinir la foncton de tri;  n'y a t_il pas moyen d'utiliser directement la méthode de tri du GridView ?
Commenter la réponse de cs_dawinch
Messages postés
27
Date d'inscription
lundi 2 mai 2005
Dernière intervention
3 janvier 2008
0
Merci
merci à vous deux pour vos réponses.
Je pense que je vais opter pour la solution de zuff.
Cyril : qu'appelles tu bindé à l'ancienne ? (nouveau dans ASP, j'ai commencé directement en ASP.NET 2.0 en essayant de suivre la 'logique' de dev Microsoft, celle des vidéos sur leur site, c'est à dire en utilisant un maximum leurs composants. Mais c'est vrai qu'il me semble que par moment, dès qu'on sort de leur utilisation standard, ça complique plus qu'autre chose)
Commenter la réponse de cs_dawinch
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
0
Merci
zuff : tu stock la requete dans un hiddenfield ??? :| ben t'es gentil avec ton utilisateur toi ! en faisant ca tu lui laisses le full control de la base ... il peut afficher les requetes qu'il veut. J'espere que tu stockes pas des cartes de crédits ou des infos confidentiels ... en plus j'ai l'impression que ta solution fait 2 requete SQL :s

pour ce qui est du binding à l'ancienne : c'est lorsque l'on fait
monGridview.datasource = macoucheserver.GetDatas(filterValue);
monGridview.DataBind();

et qu'on utilise pas les controles DataSource ...

mais dans ton cas, si tu utilises un sqldatasource je te conseil de rajouté une propriété controlparameter qui est lié à ta textbox. tu n'auras absolument rien à écrire dans le code-behind. Ce qui peut etre utile pour des petits sites ou lorsque tu n'as pas une application bien architecturé en plusieurs couches.

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL
Commenter la réponse de jesusonline
Messages postés
91
Date d'inscription
lundi 30 juin 2003
Dernière intervention
21 février 2008
0
Merci
Pour les applications structurées en plusieurs couches utilise une objectdatasource ça marche très bien.
Commenter la réponse de gldfdp
Messages postés
79
Date d'inscription
lundi 28 octobre 2002
Dernière intervention
21 octobre 2008
0
Merci
jesusonline: j'utilise hiddenfield en visible= false, l'utilisateur ne vois rien et tu as une variable de page qui existait en 1.1 et disparue sur la 2. (le hiddenfield est moins problèmatique qu'une variable de session )
Commenter la réponse de zuff
Messages postés
11
Date d'inscription
mardi 24 février 2004
Dernière intervention
21 novembre 2007
0
Merci
Tout d'abord merci pour les réponses, elle m'ont bien aidé.
zuff  : au sujet de ta reqRecherche, comment la définit-tu ? en tant que string ? Comment passes-tu en paramètre une valeur d'un textbox par exemple ? :$
En fait je ne vois pas où passer en paramètre l'argument à rechercher ^_^'

Merci d'avance.
Commenter la réponse de JuLsupinfo
Messages postés
79
Date d'inscription
lundi 28 octobre 2002
Dernière intervention
21 octobre 2008
0
Merci
reqRecherche est bien sur une string.

Protected
Sub btnRechercheAvancee_Click(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles btnRechercheAvancee.Click

' recherche avancée

Dim

reqRecherche AsString = "SELECT champ1, champ2 FROM table1" 

IftxtRecherche.Text.Trim.Length> 2
Then
   reqRecherche += " WHERE champ1 LIKE '%"& txtRecherche.Text.Trim.Replace("'"
,
"`")
&"%'"
EndIf

reqRecherche += reqRecherche &

" ORDER BY champ1"

hdnReqRecherche.value = reqRecherche

Cette technique est pour faire des recherches sur plusieurs critères (la création de la requête est un peu plus complexe que dans l'exemple), si tu doit faire des recherches que sur un critère, il suffit d'utiliser  les propiétés du SqlDataSource.
Commenter la réponse de zuff
Messages postés
11
Date d'inscription
mardi 24 février 2004
Dernière intervention
21 novembre 2007
0
Merci
Merciiii, mais j'ai trouvé ma solution en C#, en ce qui concerne le multi-critères, j'ai trouvé mon bonheur en utilisant un StringBuilder et sa méthode Append().
Commenter la réponse de JuLsupinfo

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.