Comment changer l’ordre des colonnes DataTable

Comment modifier l’ordre des colonnes en format c #.

Exemple:

suis créé ordre de type table SQL est Qté, Unité, Id, mais dans l’ordre du programme DataTable est Id, Qty, Unité. Dans le code Derrière suis directement passer DataTable au type de table SQL afin que l’ordre de la table soit différent.

DataTable columns are: `Id,Qty,Unit.` I want this to be: `Qty,Unit,Id` 

S’il vous plaît aider

Essayez d’utiliser la méthode DataColumn.SetOrdinal . Par exemple:

 dataTable.Columns["Qty"].SetOrdinal(0); dataTable.Columns["Unit"].SetOrdinal(1); 

MISE À JOUR: Cette réponse a reçu beaucoup plus d’attention que prévu. Pour éviter toute confusion et faciliter l’utilisation, j’ai décidé de créer une méthode d’extension pour le classement des colonnes dans DataTable:

Méthode d’extension:

 public static class DataTableExtensions { public static void SetColumnsOrder(this DataTable table, params Ssortingng[] columnNames) { int columnIndex = 0; foreach(var columnName in columnNames) { table.Columns[columnName].SetOrdinal(columnIndex); columnIndex++; } } } 

Usage:

 table.SetColumnsOrder("Qty", "Unit", "Id"); 

ou

 table.SetColumnsOrder(new ssortingng[]{"Qty", "Unit", "Id"}); 

Ceci est basé sur la réponse “locale par défaut” mais cela supprimera les noms de colonnes non valides avant de définir les valeurs ordinales. En effet, si vous envoyez accidentellement un nom de colonne non valide, celui-ci échouera et si vous cochez pour l’empêcher de tomber en panne, l’index sera erroné car il ignorerait les index lorsqu’un nom de colonne non valide a été transmis.

 public static class DataTableExtensions { ///  /// SetOrdinal of DataTable columns based on the index of the columnNames array. Removes invalid column names first. ///  ///  ///  ///  http://stackoverflow.com/questions/3757997/how-to-change-datatable-colums-order public static void SetColumnsOrder(this DataTable dtbl, params Ssortingng[] columnNames) { List listColNames = columnNames.ToList(); //Remove invalid column names. foreach (ssortingng colName in columnNames) { if (!dtbl.Columns.Contains(colName)) { listColNames.Remove(colName); } } foreach (ssortingng colName in listColNames) { dtbl.Columns[colName].SetOrdinal(listColNames.IndexOf(colName)); } } 

Je sais que c’est une très vieille question .. et il semble que cela a été répondu. Mais je suis arrivé ici avec la même question mais une raison différente pour la question, donc une réponse légèrement différente a fonctionné pour moi. J’ai une belle vue générique réutilisable qui prend la source de données qui lui est fournie et affiche simplement les colonnes dans leur ordre par défaut. Je mets dans le concepteur les alias et l’ordre et la sélection des colonnes au niveau du tableadapter de l’dataset. Cependant, modifier l’ordre de sélection des colonnes ne semble pas avoir d’impact sur les colonnes renvoyées par le jeu de données. J’ai trouvé que la seule façon de le faire dans le concepteur est de supprimer toutes les colonnes sélectionnées dans le tableadapter, en les ajoutant dans l’ordre de votre choix.

Vous pouvez aussi utiliser:

 dataview v=dt.defaultview; // ( dt datatable) v.sort="columnName ASC"; // ASC / DESC for ascending / descending order dt=v.toTable(); 

extrait de https://social.msdn.microsoft.com/Forums/vstudio/en-US/6ae0341f-d8d7-4082-ae37-19e46f37306a/how-to-sort-columns-in-datatable?forum=wpf

Nous pouvons utiliser cette méthode pour modifier l’index de la colonne, mais nous devons l’appliquer à toutes les colonnes s’il y a plus de deux nombres de colonnes. Sinon, toutes les valeurs incorrectes apparaîtront dans le tableau de données ………… ……..