GridView et "évènement Sorting"

Résolu
cs_dawinch Messages postés 27 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 3 janvier 2008 - 4 juil. 2007 à 13:57
JuLsupinfo Messages postés 11 Date d'inscription mardi 24 février 2004 Statut Membre 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.

11 réponses

zuff Messages postés 79 Date d'inscription lundi 28 octobre 2002 Statut Membre Dernière intervention 21 octobre 2008
5 juil. 2007 à 09:05
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.
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
4 juil. 2007 à 18:56
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
1
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
4 juil. 2007 à 14:56
MyGridView.Sorting+=




new



GridViewSortEventHandler
(MyGridView_Sorting); Si tu as défni une fonction de tri. Cela si tu bind en code-behind.
0
cs_dawinch Messages postés 27 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 3 janvier 2008
4 juil. 2007 à 15:32
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 ?
0

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

Posez votre question
cs_dawinch Messages postés 27 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 3 janvier 2008
5 juil. 2007 à 09:21
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)
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
5 juil. 2007 à 11:08
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
0
gldfdp Messages postés 90 Date d'inscription lundi 30 juin 2003 Statut Membre Dernière intervention 21 février 2008
5 juil. 2007 à 14:44
Pour les applications structurées en plusieurs couches utilise une objectdatasource ça marche très bien.
0
zuff Messages postés 79 Date d'inscription lundi 28 octobre 2002 Statut Membre Dernière intervention 21 octobre 2008
5 juil. 2007 à 17:55
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 )
0
JuLsupinfo Messages postés 11 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 21 novembre 2007
17 juil. 2007 à 09:21
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.
0
zuff Messages postés 79 Date d'inscription lundi 28 octobre 2002 Statut Membre Dernière intervention 21 octobre 2008
18 juil. 2007 à 09:24
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.
0
JuLsupinfo Messages postés 11 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 21 novembre 2007
18 juil. 2007 à 09:29
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().
0
Rejoignez-nous