2010-03-08 5 views
0

J'ai un problème que j'essaie de résoudre et qui consiste à trier un DataGridView sur plusieurs colonnes. J'ai lu que cette option n'est pas une fonctionnalité intégrée à DataGridView et que je dois l'implémenter. J'ai trouvé plusieurs solutions, mais aucune n'a vraiment réussi à faire le travail. Je suis aussi un novice en C# et je ne connais pas grand-chose de la bibliothèque .Net. J'ai également lu sur le site MSDN pour des informations sur différentes classes qui pourraient être utiles, mais pas de succès.Trier plusieurs colonnes lors de l'utilisation d'une source de liaison ou d'une liste de liaison

Maintenant, passons au point. J'ai un DataGridView, avec un BindingList (à l'origine, un BindingSource) que je veux trier, mais par plusieurs clés. Mon DataGrid a 9 colonnes et l'utilisateur devrait pouvoir trier n'importe quelle colonne. Par exemple, disons que mon Datagrid a 3 colonnes, nommées: Index, ID, Name. L'utilisateur veut trier par nom, implicitement, l'ordre suivant serait Index, puis ID. Donc, dans le cas où 2 noms sont identiques, Index devrait être l'option de tri suivante.

Des idées comment cela peut-il être fait?

Répondre

0

L'objet BindingSource a une propriété Sort qui vous permet de trier sa collection d'objets par n'importe quelle propriété que vous voulez comme une clause ORDER BY dans SQL. Après le tri, vous devrez peut-être actualiser votre DataGridView via la méthode Refresh(), je pense.

Avez-vous déjà essayé?

+0

C'est exactement ce que j'allais suggérer. Je pense que je peux ajouter un petit détail. Fondamentalement, une fois que l'utilisateur clique sur un en-tête pour trier, vous attrapez cet événement en utilisant le gestionnaire d'événement de clic de souris. Ensuite, mettez à jour la vue Datagrids. – msarchet

+0

Merci pour votre commentaire! Cela confirme alors que c'est une bonne approche. Deux têtes mieux qu'une! =) –

+1

Eh bien, je n'ai pas vraiment essayé ça, mais ça ne semble pas résoudre mon problème. Je vais donner un exemple. J'ai 2 entrées, qui sont "2, 10, un livre" et "1, 11, livre D". Si l'utilisateur clique sur l'en-tête de la colonne Nom, les entrées resteront dans le même ordre. Dans mon cas, je veux que la deuxième entrée, qui a un index de 1, arrive en premier, donnant quelque chose comme: ORDER BY 'en-tête de colonne cliqué par l'utilisateur', 'Autre colonne plus à gauche', etc –

Questions connexes