{"id":2261,"date":"2024-10-17T14:26:38","date_gmt":"2024-10-17T14:26:38","guid":{"rendered":"http:\/\/localhost:10003\/?p=2261"},"modified":"2025-08-04T13:55:31","modified_gmt":"2025-08-04T13:55:31","slug":"groupage-et-tri-dans-la-grille-de-donnees-xceed-pour-wpf","status":"publish","type":"post","link":"https:\/\/xceed.com\/fr\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/","title":{"rendered":"Groupement et tri dans Xceed DataGrid for WPF"},"content":{"rendered":"<p>En savoir plus sur&nbsp;<a href=\"http:\/\/xceed.com\/en\/our-products\/product\/datagrid-for-wpf\" target=\"_blank\" rel=\"noreferrer noopener\">Xceed DataGrid pour WPF<\/a><\/p>\n\n\n\n<p>Cette semaine, nous allons jeter un coup d'\u0153il rapide au regroupement et au tri dans la grille de donn\u00e9es pour WPF.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Regroupement au moment de l'ex\u00e9cution<\/h2>\n\n\n\n<p>Par d\u00e9faut, lorsqu'un&nbsp;<em>Contr\u00f4le DataGrid<\/em>&nbsp;est cr\u00e9\u00e9, il contient un&nbsp;<em>HierarhicalGroupByControl<\/em>&nbsp;dans sa section d'en-t\u00eates fixes. Le contr\u00f4le group-by offre une vue condens\u00e9e des niveaux de groupe et permet aux utilisateurs finaux de modifier les descriptions de groupe appliqu\u00e9es \u00e0 une grille.<\/p>\n\n\n\n<p>Chaque niveau de groupe est repr\u00e9sent\u00e9 par un&nbsp;<em>HierarchicalGroupByItem (groupe hi\u00e9rarchique par \u00e9l\u00e9ment)<\/em>&nbsp;qui peut \u00eatre utilis\u00e9e pour modifier l'ordre des groupes, trier les \u00e9l\u00e9ments de donn\u00e9es ou supprimer compl\u00e8tement les groupes. Si un groupe&nbsp;<em>ColumnManagerRow<\/em>&nbsp;est pr\u00e9sent dans une grille (quel que soit son emplacement), ses cellules&nbsp;<em>(Gestionnaire de colonnesCell)<\/em>&nbsp;peut \u00eatre gliss\u00e9 sur le contr\u00f4le group-by pour cr\u00e9er un niveau de groupe suppl\u00e9mentaire.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00e9finition des descriptions de groupes dans le CollectionView<\/h2>\n\n\n\n<p>Les \u00e9l\u00e9ments de donn\u00e9es peuvent \u00eatre regroup\u00e9s en ajoutant des&nbsp;<em>PropertyGroupDescription<\/em>&nbsp;objets ou&nbsp;<em>DataGridGroupDescription<\/em>&nbsp;(recommand\u00e9) \u00e0 l'objet&nbsp;<em>Description des groupes<\/em>&nbsp;de la propri\u00e9t\u00e9&nbsp;<em>DataGridCollectionViewSource<\/em>&nbsp;ou&nbsp;<em>DataGridCollectionView<\/em>&nbsp;\u00e0 laquelle une grille est li\u00e9e.<\/p>\n\n\n\n<p>Dans l'exemple suivant, nous regroupons les commandes par pays et ville d'exp\u00e9dition :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code data-no-translation=\"\">&lt;Grid xmlns:xcdg=\"http:\/\/schemas.xceed.com\/wpf\/xaml\/datagrid\"&gt;\n\t&lt;Grid.Resources&gt;\n\t\t&lt;xcdg:DataGridCollectionViewSource x:Key=\"cvs_orders\"\n\t\t\t\t\t\t   Source=\"{Binding Source={x:Static Application.Current},Path=Orders}\"&gt;\n\t\t\t&lt;xcdg:DataGridCollectionViewSource.GroupDescriptions&gt;\n\t\t\t\t&lt;xcdg:DataGridGroupDescription PropertyName=\"ShipCountry\"\/&gt;\n\t\t\t\t&lt;xcdg:DataGridGroupDescription PropertyName=\"ShipCity\"\/&gt;\n\t\t\t&lt;\/xcdg:DataGridCollectionViewSource.GroupDescriptions&gt;\n\t\t&lt;\/xcdg:DataGridCollectionViewSource&gt;\n\t&lt;\/Grid.Resources&gt;\n\n\t&lt;xcdg:DataGridControl x:Name=\"OrdersGrid\"\n\t\t\t      ItemsSource=\"{Binding Source={StaticResource cvs_orders}}\"&gt;\n\t&lt;\/xcdg:DataGridControl&gt;\n&lt;\/Grid&gt;\n<\/code><\/pre>\n\n\n\n<p>Note : Il est \u00e9galement possible de faire la m\u00eame chose avec un&nbsp;<em>DataGridDetailDescription,<\/em>&nbsp;et\/ou directement par la propri\u00e9t\u00e9 Items en sp\u00e9cifiant le nom du champ de la colonne dont les valeurs doivent \u00eatre regroup\u00e9es. Chaque&nbsp;<em>DataGridGroupDescription<\/em>&nbsp;qui est ajout\u00e9 \u00e0 cette collection repr\u00e9sente les caract\u00e9ristiques d'un niveau de groupe dans une grille.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Groupement personnalis\u00e9<\/h2>\n\n\n\n<p>Il est \u00e9galement possible de cr\u00e9er une description de groupe personnalis\u00e9e en d\u00e9rivant de l'\u00e9l\u00e9ment&nbsp;<em>DataGridGroupDescription<\/em>&nbsp;et en surchargeant la classe&nbsp;<em>Nom du groupe \u00e0 partir de l'\u00e9l\u00e9ment<\/em>&nbsp;m\u00e9thode. Une fois mis en \u0153uvre, un&nbsp;<em>Comparateur de tri<\/em>&nbsp;peuvent lui \u00eatre attribu\u00e9es.<\/p>\n\n\n\n<p>Tout d'abord, nous devons cr\u00e9er notre description de groupe personnalis\u00e9e :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code data-no-translation=\"\">public class AlphabeticalGroupDescription : DataGridGroupDescription\n{\n\tpublic AlphabeticalGroupDescription()\n\t\t: base()\n\t{\n\t}\n\tpublic AlphabeticalGroupDescription( string propertyName )\n\t\t: base( propertyName )\n\t{\n\t}\n\n\tpublic override object GroupNameFromItem( object item, int level, System.Globalization.CultureInfo culture )\n\t{\n\t\tobject value = base.GroupNameFromItem( item, level, culture );\n\t\ttry\n\t\t{\n\t\t\tstring content = Convert.ToString( value );\n\t\t\tvalue = content.ToUpper().Substring( 0, 1 );\n\t\t}\n\t\tcatch( InvalidCastException )\n\t\t{\n\t\t}\n\t\treturn value;\n\t}\n}\n<\/code><\/pre>\n\n\n\n<p>Ensuite, nous l'ajoutons \u00e0 notre&nbsp;<em>DataGridCollectionViewSource :<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code data-no-translation=\"\">&lt;Grid.Resources&gt;\n\t&lt;local:ConsonantVowelComparer x:Key=\"consonantVowelComparer\"\/&gt;\n\t&lt;xcdg:DataGridCollectionViewSource x:Key=\"cvs_orders\"\n\t\t\t\t\t   Source=\"{Binding Source={x:Static Application.Current}, Path=Orders}\"&gt;\n\t\t&lt;xcdg:DataGridCollectionViewSource.GroupDescriptions&gt;\n\t\t\t&lt;local:AlphabeticalGroupDescription PropertyName=\"ShipCountry\"\n\t\t\t\t\t\t\t    SortComparer=\"{StaticResource consonantVowelComparer}\"\/&gt;\n\t\t&lt;\/xcdg:DataGridCollectionViewSource.GroupDescriptions&gt;\n\t&lt;\/xcdg:DataGridCollectionViewSource&gt;\n&lt;\/Grid.Resources&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9venir les regroupements<\/h2>\n\n\n\n<p>Il est possible d'emp\u00eacher l'utilisateur de modifier les groupes, de sorte que les groupes que vous appliquez ne puissent pas \u00eatre supprim\u00e9s ou ajout\u00e9s. Pour ce faire, il convient d'utiliser l'option&nbsp;<em>AllowGroupingModification<\/em>&nbsp;sur la propri\u00e9t\u00e9&nbsp;<em>GroupByControl.<\/em><\/p>\n\n\n\n<p>\u00c9tant donn\u00e9 que nous red\u00e9finissons les en-t\u00eates fixes, nous devons d\u00e9finir&nbsp;<em>UseDefaultHeadersFooters<\/em>&nbsp;\u00e0 false et ajouter manuellement les en-t\u00eates que nous voulons.<\/p>\n\n\n\n<p>Par exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code data-no-translation=\"\">&lt;xcdg:DataGridControl x:Name=\"OrdersGrid\"\n\t\t      ItemsSource=\"{Binding Source={StaticResource cvs_orders}}\"&gt;\n\t&lt;xcdg:DataGridControl.View&gt;\n\t\t&lt;xcdg:TableView UseDefaultHeadersFooters=\"False\"&gt;\n\t\t\t&lt;xcdg:TableView.FixedHeaders&gt;\n\t\t\t\t&lt;DataTemplate&gt;\n\t\t\t\t\t&lt;xcdg:GroupByControl AllowGroupingModification=\"False\" \/&gt;\n\t\t\t\t&lt;\/DataTemplate&gt;\n\t\t\t\t&lt;DataTemplate&gt;\n\t\t\t\t\t&lt;xcdg:ColumnManagerRow \/&gt;\n\t\t\t\t&lt;\/DataTemplate&gt;\n\t\t\t&lt;\/xcdg:TableView.FixedHeaders&gt;\n\t\t&lt;\/xcdg:TableView&gt;\n\t&lt;\/xcdg:DataGridControl.View&gt;\n&lt;\/xcdg:DataGridControl&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Tri au moment de l'ex\u00e9cution<\/h2>\n\n\n\n<p>Lorsqu'un&nbsp;<em>Contr\u00f4le DataGrid<\/em>&nbsp;est cr\u00e9\u00e9, il contient par d\u00e9faut un&nbsp;<em>ColumnManagerRow<\/em>&nbsp;dans sa section d'en-t\u00eates fixes qui contient un&nbsp;<em>ColumnManagerCell<\/em>&nbsp;pour chaque colonne d'une grille. Le contenu d'une ou de plusieurs colonnes peut \u00eatre tri\u00e9 en cliquant sur le bouton correspondant.&nbsp;<em>ColumnManagerCell.<\/em><\/p>\n\n\n\n<p>Par d\u00e9faut, un premier clic permet de trier les valeurs de la colonne dans le sens croissant, un deuxi\u00e8me clic permet de les trier dans le sens d\u00e9croissant, tandis qu'un troisi\u00e8me clic permet de supprimer tout tri appliqu\u00e9 aux valeurs de la colonne. Pour trier les valeurs de plusieurs colonnes, maintenez la touche MAJ enfonc\u00e9e tout en cliquant sur une colonne.&nbsp;<em>ColumnManagerCell.<\/em>&nbsp;Le cycle de tri-direction peut \u00eatre modifi\u00e9 en attribuant \u00e0 une colonne une nouvelle valeur de&nbsp;<em>SortDirectionCycle<\/em>&nbsp;ou en g\u00e9rant la collection&nbsp;<em>Changement de direction du tri<\/em>&nbsp;\u00e9v\u00e9nement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00e9finition des descriptions de tri dans le CollectionView<\/h2>\n\n\n\n<p>Les donn\u00e9es peuvent \u00eatre tri\u00e9es en ajoutant&nbsp;<em>SortDescription<\/em>&nbsp;aux objets de la&nbsp;<em>SortDescriptions<\/em>&nbsp;de la propri\u00e9t\u00e9&nbsp;<em>DataGridCollectionViewSource<\/em>&nbsp;ou&nbsp;<em>DataGridCollectionView<\/em>&nbsp;\u00e0 laquelle une grille est li\u00e9e.<\/p>\n\n\n\n<p>Dans l'exemple suivant, nous regroupons les commandes par pays et ville d'exp\u00e9dition :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code data-no-translation=\"\">&lt;Grid xmlns:scm=\"clr-namespace:System.ComponentModel;assembly=WindowsBase\"\n      xmlns:xcdg=\"http:\/\/schemas.xceed.com\/wpf\/xaml\/datagrid\"&gt;\n\t&lt;Grid.Resources&gt;\n\t\t&lt;xcdg:DataGridCollectionViewSource x:Key=\"cvs_orders\"\n\t\t\t\t\t\t   Source=\"{Binding Source={x:Static Application.Current}, Path=Orders}\"&gt;\n\t\t\t&lt;xcdg:DataGridCollectionViewSource.SortDescriptions&gt;\n\t\t\t\t&lt;scm:SortDescription PropertyName=\"ShipCountry\"\n\t\t\t\t\t\t     Direction=\"Ascending\"\/&gt;\n\t\t\t&lt;\/xcdg:DataGridCollectionViewSource.SortDescriptions&gt;\n\t\t&lt;\/xcdg:DataGridCollectionViewSource&gt;\n\t&lt;\/Grid.Resources&gt;\n\n\t&lt;xcdg:DataGridControl x:Name=\"OrdersGrid\"\n\t\t\t      ItemsSource=\"{Binding Source={StaticResource cvs_orders}}\"&gt;\n\t\t&lt;xcdg:DataGridControl.Columns&gt;\n\t\t\t&lt;xcdg:Column FieldName=\"ShipCountry\" VisiblePosition=\"0\"\/&gt;\n\t\t&lt;\/xcdg:DataGridControl.Columns&gt;\n\t&lt;\/xcdg:DataGridControl&gt;\n&lt;\/Grid&gt;\n<\/code><\/pre>\n\n\n\n<p>Il est \u00e9galement possible de le faire directement via la propri\u00e9t\u00e9 Items, en sp\u00e9cifiant le nom du champ de la colonne dont les valeurs doivent \u00eatre tri\u00e9es, ainsi que le sens dans lequel ces valeurs doivent \u00eatre tri\u00e9es.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tri personnalis\u00e9<\/h2>\n\n\n\n<p>En plus du tri par d\u00e9faut bas\u00e9 sur le type, il est \u00e9galement possible d'appliquer un tri personnalis\u00e9 en fournissant un param\u00e8tre&nbsp;<em>IComparateur<\/em>&nbsp;\u00e0 la&nbsp;<em>Comparateur de tri<\/em>&nbsp;d'une ou plusieurs propri\u00e9t\u00e9s de l'\u00e9l\u00e9ment d\u00e9finies dans le fichier&nbsp;<em>DataGridCollectionView<\/em>&nbsp;ou&nbsp;<em>DataGridCollectionViewSource<\/em>&nbsp;auquel une grille est li\u00e9e Le comparateur sera utilis\u00e9 chaque fois que les valeurs de la colonne correspondante de la propri\u00e9t\u00e9 de l'\u00e9l\u00e9ment seront tri\u00e9es, par exemple lorsque l'on clique sur l'en-t\u00eate de la colonne.<\/p>\n\n\n\n<p>Tout d'abord, nous devons cr\u00e9er notre&nbsp;<em>IComparer :<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code data-no-translation=\"\">public class AddressComparer: IComparer\n{\n\tpublic AddressComparer()\n\t{\n\t}\n\tint IComparer.Compare( object x, object y )\n\t{\n\t\tstring stringX = ( string )x;\n\t\tstring stringY = ( string )y;\n\t\tconst string digits = \"0123456789\";\n\t\tif( ( digits.IndexOf( stringX&#91; 0 ] ) &gt;= 0 ) &amp;&amp; ( digits.IndexOf( stringY&#91; 0 ] ) &gt;= 0 ) )\n\t\t{\n\t\t\tint index = 0;\n\t\t\tSystem.Text.StringBuilder xNumber = new System.Text.StringBuilder();\n\t\t\twhile( ( index &lt; stringX.Length ) &amp;&amp; ( digits.IndexOf( stringX&#91; index ] ) &gt;= 0 ) )\n\t\t\t{\n\t\t\t\txNumber.Append( stringX&#91; index ] );\n\t\t\t\tindex++;\n\t\t\t}\n\t\t\tindex = 0;\n\t\t\tSystem.Text.StringBuilder yNumber = new System.Text.StringBuilder();\n\t\t\twhile( ( index &lt; stringY.Length ) &amp;&amp; ( digits.IndexOf( stringY&#91; index ] ) &gt;= 0 ) )\n\t\t\t{\n\t\t\t\tyNumber.Append( stringY&#91; index ] );\n\t\t\t\tindex++;\n\t\t\t}\n\t\t\tlong xValue = long.Parse( xNumber.ToString() );\n\t\t\tlong yValue = long.Parse( yNumber.ToString() );\n\t\t\tif( xValue &gt; yValue )\n\t\t\t\treturn 1;\n\t\t\tif( xValue &lt; yValue )\n\t\t\t\treturn -1;\n\t\t\treturn stringX.CompareTo( stringY );\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn stringX.CompareTo( stringY );\n\t\t}\n\t}\n}\n<\/code><\/pre>\n\n\n\n<p>Ensuite, nous l'ajoutons \u00e0 notre&nbsp;<em>DataGridCollectionViewSource :<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code data-no-translation=\"\">&lt;Grid.Resources&gt;\n\t&lt;local:AddressComparer x:Key=\"addressComparer\"\/&gt;\n\t&lt;xcdg:DataGridCollectionViewSource x:Key=\"cvs_orders\"\n\t\t\t\t\t   Source=\"{Binding Source={x:Static Application.Current}, Path=Orders}\"\n\t\t\t\t\t   AutoCreateItemProperties=\"False\"&gt;\n\t\t&lt;xcdg:DataGridCollectionViewSource.ItemProperties&gt;\n\t\t\t&lt;xcdg:DataGridItemProperty Name=\"ShipCountry\" \/&gt;\n\t\t\t&lt;xcdg:DataGridItemProperty Name=\"ShipCity\" \/&gt;\n\t\t\t&lt;xcdg:DataGridItemProperty Name=\"ShipAddress\"\n\t\t\t\t\t\t   SortComparer=\"{StaticResource addressComparer}\"\/&gt;\n\t\t\t&lt;xcdg:DataGridItemProperty Name=\"ShipVia\" \/&gt;\n\t\t&lt;\/xcdg:DataGridCollectionViewSource.ItemProperties&gt;\n\t&lt;\/xcdg:DataGridCollectionViewSource&gt;\n&lt;\/Grid.Resources&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Emp\u00eacher le tri<\/h2>\n\n\n\n<p>Il est possible d'emp\u00eacher l'utilisateur de trier les colonnes, de sorte que tout tri appliqu\u00e9 ne puisse \u00eatre supprim\u00e9 ou modifi\u00e9. Pour ce faire, il suffit d'utiliser l'option&nbsp;<em>AllowSort<\/em>&nbsp;disponible sur le site&nbsp;<em>Contr\u00f4le de groupe<\/em>&nbsp;et&nbsp;<em>ColumnManagerRow.<\/em><\/p>\n\n\n\n<p>\u00c9tant donn\u00e9 que nous red\u00e9finissons les en-t\u00eates fixes, nous devons d\u00e9finir&nbsp;<em>UseDefaultHeadersFooters<\/em>&nbsp;\u00e0 false et ajouter manuellement les en-t\u00eates que nous voulons.<\/p>\n\n\n\n<p>Par exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code data-no-translation=\"\">&lt;xcdg:DataGridControl x:Name=\"OrdersGrid\"\n\t\t      ItemsSource=\"{Binding Source={StaticResource cvs_orders}}\"&gt;\n\t&lt;xcdg:DataGridControl.View&gt;\n\t\t&lt;xcdg:TableView UseDefaultHeadersFooters=\"False\"&gt;\n\t\t\t&lt;xcdg:TableView.FixedHeaders&gt;\n\t\t\t\t&lt;DataTemplate&gt;\n\t\t\t\t\t&lt;xcdg:GroupByControl AllowSort=\"False\" \/&gt;\n\t\t\t\t&lt;\/DataTemplate&gt;\n\t\t\t\t&lt;DataTemplate&gt;\n\t\t\t\t\t&lt;xcdg:ColumnManagerRow AllowSort=\"False\" \/&gt;\n\t\t\t\t&lt;\/DataTemplate&gt;\n\t\t\t&lt;\/xcdg:TableView.FixedHeaders&gt;\n\t\t&lt;\/xcdg:TableView&gt;\n\t&lt;\/xcdg:DataGridControl.View&gt;\n&lt;\/xcdg:DataGridControl&gt;\n<\/code><\/pre>\n\n\n\n<p>Pour plus d'informations, veuillez vous r\u00e9f\u00e9rer \u00e0 la&nbsp;<a href=\"https:\/\/doc.xceed.com\/xceed-datagrid-for-wpf\/webframe.html#rootWelcome.html\" target=\"_blank\" rel=\"noreferrer noopener\">la documentation<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Cette semaine, nous allons jeter un coup d'\u0153il rapide au regroupement et au tri dans la grille de donn\u00e9es pour WPF.<\/p>","protected":false},"author":2,"featured_media":2238,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[141,60],"tags":[],"class_list":["post-2261","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","category-tutorials"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Grouping and Sorting in Xceed DataGrid for WPF - Xceed<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/xceed.com\/fr\/blog\/tutoriels\/groupage-et-tri-dans-la-grille-de-donnees-xceed-pour-wpf\/\" \/>\n<meta property=\"og:locale\" content=\"fr_CA\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Grouping and Sorting in Xceed DataGrid for WPF - Xceed\" \/>\n<meta property=\"og:description\" content=\"This week we will take a quick look at Grouping and Sorting in the DataGrid for WPF.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/xceed.com\/fr\/blog\/tutoriels\/groupage-et-tri-dans-la-grille-de-donnees-xceed-pour-wpf\/\" \/>\n<meta property=\"og:site_name\" content=\"Xceed\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-17T14:26:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-04T13:55:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/xceed.com\/wp-content\/uploads\/2024\/10\/blog_DGP-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alain Jreij\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alain Jreij\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/\"},\"author\":{\"name\":\"Alain Jreij\",\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#\\\/schema\\\/person\\\/2d9169e6fd8ae4a8f58a9e1cc9a73778\"},\"headline\":\"Grouping and Sorting in Xceed DataGrid for WPF\",\"datePublished\":\"2024-10-17T14:26:38+00:00\",\"dateModified\":\"2025-08-04T13:55:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/\"},\"wordCount\":779,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/blog_DGP-1.png\",\"articleSection\":[\"All\",\"Tutorials\"],\"inLanguage\":\"fr-CA\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/\",\"url\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/\",\"name\":\"Grouping and Sorting in Xceed DataGrid for WPF - Xceed\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/blog_DGP-1.png\",\"datePublished\":\"2024-10-17T14:26:38+00:00\",\"dateModified\":\"2025-08-04T13:55:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/#breadcrumb\"},\"inLanguage\":\"fr-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-CA\",\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/#primaryimage\",\"url\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/blog_DGP-1.png\",\"contentUrl\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/blog_DGP-1.png\",\"width\":350,\"height\":350},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/xceed.com\\\/blog\\\/tutorials\\\/grouping-and-sorting-in-xceed-datagrid-for-wpf\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/xceed.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Grouping and Sorting in Xceed DataGrid for WPF\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/xceed.com\\\/fr\\\/\",\"name\":\"Xceed\",\"description\":\"Provides tools for .NET, Windows Forms, WPF, Silverlight, and ASP.NET developers to create better applications.\",\"publisher\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/xceed.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-CA\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#organization\",\"name\":\"Xceed\",\"url\":\"https:\\\/\\\/xceed.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-CA\",\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/cropped-xceed-logo.png\",\"contentUrl\":\"https:\\\/\\\/xceed.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/cropped-xceed-logo.png\",\"width\":609,\"height\":150,\"caption\":\"Xceed\"},\"image\":{\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/xceed.com\\\/fr\\\/#\\\/schema\\\/person\\\/2d9169e6fd8ae4a8f58a9e1cc9a73778\",\"name\":\"Alain Jreij\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-CA\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/87ff2d1efbe1a868809d8d554724877b76941f668176489a42238d867ab8bf06?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/87ff2d1efbe1a868809d8d554724877b76941f668176489a42238d867ab8bf06?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/87ff2d1efbe1a868809d8d554724877b76941f668176489a42238d867ab8bf06?s=96&d=mm&r=g\",\"caption\":\"Alain Jreij\"},\"url\":\"https:\\\/\\\/xceed.com\\\/fr\\\/blog\\\/author\\\/jreijaxceed-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Regroupement et tri dans Xceed DataGrid for WPF - Xceed","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/xceed.com\/fr\/blog\/tutoriels\/groupage-et-tri-dans-la-grille-de-donnees-xceed-pour-wpf\/","og_locale":"fr_CA","og_type":"article","og_title":"Grouping and Sorting in Xceed DataGrid for WPF - Xceed","og_description":"This week we will take a quick look at Grouping and Sorting in the DataGrid for WPF.","og_url":"https:\/\/xceed.com\/fr\/blog\/tutoriels\/groupage-et-tri-dans-la-grille-de-donnees-xceed-pour-wpf\/","og_site_name":"Xceed","article_published_time":"2024-10-17T14:26:38+00:00","article_modified_time":"2025-08-04T13:55:31+00:00","og_image":[{"width":350,"height":350,"url":"https:\/\/xceed.com\/wp-content\/uploads\/2024\/10\/blog_DGP-1.png","type":"image\/png"}],"author":"Alain Jreij","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Alain Jreij","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/#article","isPartOf":{"@id":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/"},"author":{"name":"Alain Jreij","@id":"https:\/\/xceed.com\/fr\/#\/schema\/person\/2d9169e6fd8ae4a8f58a9e1cc9a73778"},"headline":"Grouping and Sorting in Xceed DataGrid for WPF","datePublished":"2024-10-17T14:26:38+00:00","dateModified":"2025-08-04T13:55:31+00:00","mainEntityOfPage":{"@id":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/"},"wordCount":779,"commentCount":0,"publisher":{"@id":"https:\/\/xceed.com\/fr\/#organization"},"image":{"@id":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/#primaryimage"},"thumbnailUrl":"https:\/\/xceed.com\/wp-content\/uploads\/2024\/10\/blog_DGP-1.png","articleSection":["All","Tutorials"],"inLanguage":"fr-CA","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/","url":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/","name":"Regroupement et tri dans Xceed DataGrid for WPF - Xceed","isPartOf":{"@id":"https:\/\/xceed.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/#primaryimage"},"image":{"@id":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/#primaryimage"},"thumbnailUrl":"https:\/\/xceed.com\/wp-content\/uploads\/2024\/10\/blog_DGP-1.png","datePublished":"2024-10-17T14:26:38+00:00","dateModified":"2025-08-04T13:55:31+00:00","breadcrumb":{"@id":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/#breadcrumb"},"inLanguage":"fr-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/"]}]},{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/#primaryimage","url":"https:\/\/xceed.com\/wp-content\/uploads\/2024\/10\/blog_DGP-1.png","contentUrl":"https:\/\/xceed.com\/wp-content\/uploads\/2024\/10\/blog_DGP-1.png","width":350,"height":350},{"@type":"BreadcrumbList","@id":"https:\/\/xceed.com\/blog\/tutorials\/grouping-and-sorting-in-xceed-datagrid-for-wpf\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/xceed.com\/"},{"@type":"ListItem","position":2,"name":"Grouping and Sorting in Xceed DataGrid for WPF"}]},{"@type":"WebSite","@id":"https:\/\/xceed.com\/fr\/#website","url":"https:\/\/xceed.com\/fr\/","name":"Xceed","description":"Fournit des outils aux d\u00e9veloppeurs .NET, Windows Forms, WPF, Silverlight et ASP.NET pour cr\u00e9er de meilleures applications.","publisher":{"@id":"https:\/\/xceed.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/xceed.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-CA"},{"@type":"Organization","@id":"https:\/\/xceed.com\/fr\/#organization","name":"Xceed","url":"https:\/\/xceed.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/xceed.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/xceed.com\/wp-content\/uploads\/2024\/04\/cropped-xceed-logo.png","contentUrl":"https:\/\/xceed.com\/wp-content\/uploads\/2024\/04\/cropped-xceed-logo.png","width":609,"height":150,"caption":"Xceed"},"image":{"@id":"https:\/\/xceed.com\/fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/xceed.com\/fr\/#\/schema\/person\/2d9169e6fd8ae4a8f58a9e1cc9a73778","name":"Alain Jreij","image":{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/secure.gravatar.com\/avatar\/87ff2d1efbe1a868809d8d554724877b76941f668176489a42238d867ab8bf06?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/87ff2d1efbe1a868809d8d554724877b76941f668176489a42238d867ab8bf06?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/87ff2d1efbe1a868809d8d554724877b76941f668176489a42238d867ab8bf06?s=96&d=mm&r=g","caption":"Alain Jreij"},"url":"https:\/\/xceed.com\/fr\/blog\/author\/jreijaxceed-com\/"}]}},"_links":{"self":[{"href":"https:\/\/xceed.com\/fr\/wp-json\/wp\/v2\/posts\/2261","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xceed.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xceed.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xceed.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/xceed.com\/fr\/wp-json\/wp\/v2\/comments?post=2261"}],"version-history":[{"count":0,"href":"https:\/\/xceed.com\/fr\/wp-json\/wp\/v2\/posts\/2261\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/xceed.com\/fr\/wp-json\/wp\/v2\/media\/2238"}],"wp:attachment":[{"href":"https:\/\/xceed.com\/fr\/wp-json\/wp\/v2\/media?parent=2261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xceed.com\/fr\/wp-json\/wp\/v2\/categories?post=2261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xceed.com\/fr\/wp-json\/wp\/v2\/tags?post=2261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}