Bonjour,
Je suis relativement nouveau au .NET et je tente d'effectuer une opération qui, jusqu'à présent, ne fonctionne pas comme je voudrais.
Voici la situation : J'ai, dans une datatable, des données dans plusieurs colonnes. Je voudrais, à partir de la Xe colonne, ordonner toutes les autres en fonction du nom de la colonne. Or, quand je tente de copier des colonnes d'un datatable à un autre, une erreur me dit qu'une telle colonne existe déjà dans un autre datatable. J'ai donc essayé de supprimer les colonnes au fur et à mesure, mais sans succès.
Voici un exemple de ce à quoi pourrait ressembler mes colonnes :
Nom | Objectifs | 2006-12 | 2007-01 | Cumulatif | 2006-11
et je voudrais que le résultat soit ordonné à partir de la 3e colonne pour obtenir le résultat suivant :
Nom | Objectifs | 2006-11 | 2006-12 | 2007-01 | Cumulatif
À titre informatif :
- Je ne peux pas les ordonner à l'avance.
- Je ne peux pas changer ma requête SQL pour obtenir les colonnes dans le bon ordre, car j'utilise une classe qui sert de pivot pour obtenir un tableau croisé dynamique.
Pour ordonner les colonnes, ma tentative de code ressemble à ceci :
Cependant, ça ne fonctionne pas et je ne vois pas comment régler ce problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 // tmp = Datatable contenant les données // DataColumn c; // nbColNonPivot = Nombre de colonnes qui ne doit pas être ordonné if (orderPivotColumns) { DataTable dt = new DataTable(); bool permut; // Insertion des colonnes à ne pas ordonner for (i = 0; i < nbColNonPivot; i++) { c = tmp.Columns[i]; tmp.Columns.Remove(tmp.Columns[i].ColumnName); dt.Columns.Add(c); } // Colonnes à ordonner int col = 0; while (tmp.Columns.Count > 0) { for (i = 1; i < tmp.Columns.Count - 1; i++) { if (tmp.Columns[i].ColumnName.ToString().CompareTo(tmp.Columns[col].ColumnName.ToString()) < 0) { col = i; } } c = tmp.Columns[col]; tmp.Columns.Remove(tmp.Columns[col].ColumnName); dt.Columns.Add(c); col = 0; } dt.Rows.Add(r); return dt; }
Merci à l'avance!
Partager