Tri personnalisé

Signaler
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010
-
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010
-
Bonjour,
 Je travaille sur VS2005 langage vb.
(J'espère que cette fois ma question va s'afficher.)
Je désire pouvoir trier un gridView selon une colonne remplie Dynamiquement (onRowDataBound).
Il s'agit d'une liste d'Users  et de leurs Passwords. La colonne est remplie avec une propriété de profil.
Je ne vois pas bien comment faire; La doc msdn manque d'exemples sur le tri personnalisé.
Si qqn a une piste, merci d'avance

SuperBouly

6 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonsoir,

Lorsque tu click sur le nom de la colonne, tu as un event qui est lancé (Sort ou je sais plus quoi) c'est ici que tu fais ta requetes qui te sortira tes données triés, puis tu binds ces données à ton gridview.

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010

Bonjour et merci de ta réponse.
oui, je comprends, mais mon gridView est lié à une sqlDataSource, et  ma propriété de tri n'est pas un champ du dataRowView et ne peut pas l'être(enfin je crois),  puisque c'est un élément de profil (par exemple l'âge de l'user ou autre) et que je remplis pendant l'évènement  RowDatabound de chaque enregistrement.
 En un mot, je ne peux pas faire de requête incluant ce champ.
C'est là que je manque d'idées... et de savoir faire.

SuperBouly
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
euh ? j'ai pas compris là :p

Dans tous les cas c'est à toi de gérer le tri, si tu ne fais pas la requête vers une base mais vers une collection en mémoire il faut trier cette collection, par exemple avec la méthode sort.

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010

En détail, j'utilise la base SQLServer par  défaut de vs 2005 avec ses tables aspnet_Users, aspnet_Membership etc...
Mon GridView gvUsers est lié à une sqlDataSource et affiche les différents paramètres de tous les Users.
Une des colonnes TemplateColumn  est remplie avec une propriété de profil ("Age" par ex.)(de la table aspnet_Profile) dans la sub :

Protected
Sub gvUsers_RowDataBound(
ByVal sender
As
Object,
ByVal e
As System.Web.UI.WebControls.GridViewRowEventArgs)
HandlesgvUsers.RowDataBound




If e.Row.RowType = DataControlRowType.DataRow Then




    Dim UName As String = e.Row.DataItem("UserName") ' je repère l'user de la ligne
    Dim prof As ProfileBase = ProfileBase.Create(UName) 'je regarde son profile
    Dim Age As String = prof.GetPropertyValue("Age") ' je prend la valeur du paramètre "Age"
   Dim lbAge As Label = e.Row.FindControl("lbAge") ' je trouve le label de ma templatecolumn
   lbAge.Text = Age ' je lui affecte la valeur

etc....

Comme cette colonne ne peut pas correspondre à un champ de requête (enfin je crois), je ne peut lui appliquer le tri automatique.
Ok, je peux mettre tous ces strings dans un tableau, le classer, avoir des paires DataKey-Age,  mais après ? Que faire de ces données, comment vont-elles m'aider à classer le gridView?
Je ne vois pas bien quoi faire dans la sub gvUser.Sort
voilà voilà, j'ai essayé d'être + clair, je cherche un moyen, une piste.
merci @+
SuperBouly
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
J'ai pas compris, avec quoi tu binds ? tes données proviennent d'où ? un exemple de code ? :p

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
Messages postés
410
Date d'inscription
dimanche 1 février 2004
Statut
Membre
Dernière intervention
8 mai 2010

Excuse moi, je suis dans mon histoire et je crois que tout le monde y est aussi !
Voilà les précisions :
Quand on démarre un projet web sur VS 2005, et qu'on choisit l'authentication "form" avec login et MdP, VS 2005 nous gratifie d'une Base sqlServer en mode fichier et nous met ASPNETDB.MDF dans le répertoire App_Data.
cette base comprend par défaut toutes les tables nécéssaires à l'authentification : aspnet_Users, aspnet_Membership, aspnet_Profile, aspnat_Roles, etc.. j'imagine que tu sais tout ça.
donc j'affiche tous les ayants droit de mon site avec une requête sur ces tables. Mon GridView gvUsers les affiche.Doncle gridView est lié à la sqldatasource:<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>



<
asp
:
SqlDataSource

ID
=" sdsUsers "
runat
="server"
ConnectionString
= "<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT aspnet_Users.UserId, aspnet_Users.UserName, aspnet_Membership.UserId AS Expr1, aspnet_Membership.Password, aspnet_Membership.PasswordQuestion, aspnet_Membership.PasswordAnswer, aspnet_Membership.Email FROM aspnet_Membership INNER JOIN aspnet_Users ON aspnet_Membership.UserId = aspnet_Users.UserId">
</asp:SqlDataSource>




Quant au GridView, il est constitué de boundColumns classiques avec une TemplateColumn au milieu



<
asp
:
GridView

ID
=" gvUsers "
runat
="server"
AutoGenerateColumns
= "False"
DataKeyNames
="UserName"
DataSourceID
=" sdsUsers "
Width
="100%"
AllowSorting
= "True"
CellPadding
="4"
ForeColor
="#333333"
GriidLines
="None">
<
Columns
>
<
asp
:
BoundField
DataField
="UserId"
HeaderText
="UserId"
SortExpression
="UserId"
Visible
="False"
/>
<
asp
:
BoundField
DataField
="UserName"
HeaderText
="Adherent"
SortExpression
="UserName"
/>
'ma templateColumn
<

asp
:
TemplateField
HeaderText


="Age">
<
ItemTemplate


>
<
asp
:
Label
runat
=server
ID
=lbAge></
asp
:
Label


>
</
ItemTemplate


>
</
asp
:
TemplateField

>

<
asp
:
BoundField
DataField
="Password"
HeaderText
="Passe"
SortExpression
="Password"
/>
<
asp
:
BoundField
DataField
="PasswordQuestion"
HeaderText
="Question"
SortExpression
="PasswordQuestion"
/>
<
asp
:
BoundField
DataField
="PasswordAnswer"
HeaderText
="R&#233;ponse"
SortExpression
="PasswordAnswer"
/>

.***********
etc...


donc voila, mon label lbAge au milieu dans ma templateColumn est rempli comme je l'ai indiqué + haut (dans le message précédent) au cours du gvUsers.RowDataBound
Comment trier selon cette colonne ?
merci de ta patience !
SuperBouly
SuperBouly