Comment modifier l'ordre des colonnes Datatable dans c #.
Exemple:
J'ai créé l'ordre de type de table sql est Qty, Unit, Id mais dans le programme DataTable order est Id, Qty, Unit. Dans le code Behind am, passez directement DataTable au type de table sql afin que l'ordre des tables soit différent.
DataTable columns are: `Id,Qty,Unit.` I want this to be: `Qty,Unit,Id`
Veuillez aider
Qty,Unit,Id
mais dans l'ordre du programme DataTable estId,Qty,Unit
. Dans le code Behind am, passez directement DataTable au type de table sql afin que l'ordre de la table soit différent.Réponses:
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 ce à quoi je m'attendais. Pour éviter toute confusion et faciliter son utilisation, j'ai décidé de créer une méthode d'extension pour l'ordre des colonnes dans DataTable:
Méthode d'extension:
public static class DataTableExtensions { public static void SetColumnsOrder(this DataTable table, params String[] 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 string[]{"Qty", "Unit", "Id"});
la source
Qty,Id,Unit
seulement.Je veux comme çaQty,Unit,Id
.Ceci est basé sur la réponse de "paramètres régionaux par défaut", mais cela supprimera les noms de colonne invalides avant de définir l'ordinal. En effet, si vous envoyez accidentellement un nom de colonne non valide, cela échouera et si vous mettez une coche pour l'empêcher d'échouer, l'index serait erroné car il ignorerait les index partout où un nom de colonne non valide était passé.
public static class DataTableExtensions { /// <summary> /// SetOrdinal of DataTable columns based on the index of the columnNames array. Removes invalid column names first. /// </summary> /// <param name="table"></param> /// <param name="columnNames"></param> /// <remarks> http://stackoverflow.com/questions/3757997/how-to-change-datatable-colums-order</remarks> public static void SetColumnsOrder(this DataTable dtbl, params String[] columnNames) { List<string> listColNames = columnNames.ToList(); //Remove invalid column names. foreach (string colName in columnNames) { if (!dtbl.Columns.Contains(colName)) { listColNames.Remove(colName); } } foreach (string colName in listColNames) { dtbl.Columns[colName].SetOrdinal(listColNames.IndexOf(colName)); } }
la source
Je sais que c'est une question vraiment ancienne ... et il semble qu'on y ait répondu ... Mais je suis arrivé ici avec la même question mais une raison différente pour la question, et donc une réponse légèrement différente a fonctionné pour moi. J'ai une belle datagridview 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. J'ai mis les alias, l'ordre et la sélection des colonnes au niveau de l'adaptateur de table de l'ensemble de données dans le concepteur. Cependant, la modification de l'ordre de requête de sélection des colonnes ne semble pas avoir d'impact sur les colonnes renvoyées via l'ensemble de données. J'ai trouvé le seul moyen de le faire dans le concepteur, c'est de supprimer toutes les colonnes sélectionnées dans l'adaptateur de table, en les rajoutant dans l'ordre dans lequel vous voulez qu'elles soient sélectionnées.
la source
Si vous avez plus de 2-3 colonnes, ce
SetOrdinal
n'est pas la voie à suivre. UneToTable
méthode DataView accepte un tableau de paramètres de noms de colonnes. Commandez vos colonnes là-bas:DataView dataView = dataTable.DefaultView; dataTable = dataView.ToTable(true, "Qty", "Unit", "Id");
la source
Nous pouvons utiliser cette méthode pour changer l'index de colonne, mais devrait être appliquée à toutes les colonnes s'il y a plus de deux nombres de colonnes sinon elle affichera toutes les valeurs incorrectes de la table de données ............ ........
la source
Réorganiser le tableau des données en fonction d'une condition ou d'une case à cocher cochée. PFB: -
var tableResult= $('#exampleTable').DataTable(); var $tr = $(this).closest('tr'); if ($("#chkBoxId").prop("checked")) { // re-draw table shorting based on condition tableResult.row($tr).invalidate().order([colindx, 'asc']).draw(); } else { tableResult.row($tr).invalidate().order([colindx, "asc"]).draw(); }
la source