Tri DataTable-colonnes
J'ai un datatable quelque chose comme ceci:
| Col1 | Col6 | Col3 | Col43 | Col0 |
---------------------------------------------------
RowA | 1 | 6 | 54 | 4 | 123 |
Comme vous le voyez, le Col
s ne sont pas classées par leur nombre. C'est ce que je veux qu'il ressemble après la "magie":
| Col0 | Col1 | Col3 | Col6 | Col43 |
---------------------------------------------------
RowA | 123 | 1 | 54 | 6 | 4 |
Est-il une fonction intégrée pour de telles choses en C#? Et si non, comment pourrais-je aller avec ça?
+1 résolu problème similaire de la mine
OriginalL'auteur Florian Peschka | 2009-11-30
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de trier les colonnes dans l'objet DataTable, il suffit de copier les noms de colonne d'un tableau et de trier le tableau. Ensuite, utilisez le tableau pour accéder à la colonne des valeurs dans le bon ordre.
Exemple:
Si vous voulez quelque chose de plus "authentique" peut-être que vous pouvez travailler sur l'autre extrémité. Qui est la production de la datatable et pourquoi les colonnes ne sont pas commandé? Vous ne pouvez probablement pas le contrôle de cette requête ou de processus, mais ir vous pouvez ensuite trier les colonnes de là.
Le problème est que je ne peux pas contrôler l'ordre dans lequel l'utilisateur ajoute de nouvelles colonnes de la table de données. Ainsi, par exemple, s'il ajoute une nouvelle colonne qui doit être entre les deux déjà existants, mais il est ajouté que la dernière colonne, je dois comparer chaque jusqu'à ce qu'il convient :-/
Toujours, j'aime l'idée. Je vais ajouter la tri-chose à la
get
-accesseur de la chaîne[], donc c'est fait sans trop de frais généraux. Belle idée!Ce qui sur le tri lorsque l'utilisateur ajoute de la colonne et de réglage de l'ordinal comme JBrooks suggéré. Supposons que vous avez cols "A1", "A4" et que l'utilisateur ajoute "A2", vous passez à travers la colonne des noms de chercher pour le lieu d'insérer la nouvelle colonne et l'ensemble de l'ordinal manuellement. Vous devriez vérifier ce qui se passe lorsque vous définissez l'ordinal d'un déjà existant de la valeur, peut-être le sont tous automatiquement numérotées ou peut-être vous devez augmenter l'ordinal sur les colonnes suivantes manuellement.
OriginalL'auteur Ariel Popovsky
Vous pouvez faire le tri de colonnes dans le tableau lui-même:
OriginalL'auteur JBrooks
Voici mon code, sûrement pas, c'est la meilleure solution, mais fonctionne. Dans mon cas, je laisse une colonne fixe qui pourrait être "Nombre" ou "Problème", c'est toujours être le premier dans l'ordre des colonnes.
OriginalL'auteur Ruben Gª Ibeas
OriginalL'auteur Daniel Henry
Vous aurez probablement besoin de mettre en œuvre votre
IComparer<T>
, comme "naturelle", la commande serait: Col0, Col1, Col3, Col43 et Col6. ("4" vient avant "6")OriginalL'auteur Rubens Farias
Ici est une combinaison des réponses précédentes. Utiliser le construit en méthode sort() d'une Liste ou d'un Tableau de chaînes de tri d'une liste de noms de colonnes, puis utiliser le DataColumn.SetOrdinal() méthode pour réorganiser votre DataTable est que les colonnes correspondent à la liste triée.
(Où "table" est le nom de votre DataTable.)
convenu Andy, si les gens vont voter, ils devraient au moins avoir la courtoisie d'expliquer pourquoi. L'une des raisons pourrait être que le Tri va trier par ordre alphabétique, mais si vous aviez Col1, Col2 et Col11, vous trouverez la résultante serait Col1, Col11, Col2.
OriginalL'auteur Andy