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

cs_dawinch 27 Messages postés lundi 2 mai 2005Date d'inscription 3 janvier 2008 Dernière intervention - 4 juil. 2007 à 13:57 - Dernière réponse : JuLsupinfo 11 Messages postés mardi 24 février 2004Date d'inscription 21 novembre 2007 Dernière intervention
- 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
zuff 79 Messages postés lundi 28 octobre 2002Date d'inscription 21 octobre 2008 Dernière intervention - 5 juil. 2007 à 09:05
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de zuff
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 4 juil. 2007 à 18:56
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
gldfdp 91 Messages postés lundi 30 juin 2003Date d'inscription 21 février 2008 Dernière intervention - 4 juil. 2007 à 14:56
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
cs_dawinch 27 Messages postés lundi 2 mai 2005Date d'inscription 3 janvier 2008 Dernière intervention - 4 juil. 2007 à 15:32
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
cs_dawinch 27 Messages postés lundi 2 mai 2005Date d'inscription 3 janvier 2008 Dernière intervention - 5 juil. 2007 à 09:21
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
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 5 juil. 2007 à 11:08
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
gldfdp 91 Messages postés lundi 30 juin 2003Date d'inscription 21 février 2008 Dernière intervention - 5 juil. 2007 à 14:44
0
Merci
Pour les applications structurées en plusieurs couches utilise une objectdatasource ça marche très bien.
Commenter la réponse de gldfdp
zuff 79 Messages postés lundi 28 octobre 2002Date d'inscription 21 octobre 2008 Dernière intervention - 5 juil. 2007 à 17:55
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
JuLsupinfo 11 Messages postés mardi 24 février 2004Date d'inscription 21 novembre 2007 Dernière intervention - 17 juil. 2007 à 09:21
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
zuff 79 Messages postés lundi 28 octobre 2002Date d'inscription 21 octobre 2008 Dernière intervention - 18 juil. 2007 à 09:24
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
JuLsupinfo 11 Messages postés mardi 24 février 2004Date d'inscription 21 novembre 2007 Dernière intervention - 18 juil. 2007 à 09:29
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.