Comment changer l'ordre des colonnes de données

Comment changer Datatable l'ordre des colonnes en c#.

exemple:

suis créé la table sql de type de commande Qté,d'Unité,d'identité, mais dans le programme d'une DataTable commande Id,Quantité,Unité de mesure. Dans le code derrière am passer directement datable au type de table sql donc l'ordre de table est différent.

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

s'il vous Plaît aider

71
demandé sur micstr 2010-09-21 11:05:58

5 réponses

essayez d'utiliser la DataColumn.Méthode setordinale . Par exemple:

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

mise à JOUR: Cette réponse reçu beaucoup plus d'attention que ce que j'attendais. Pour éviter toute confusion et faciliter l'utilisation, j'ai décidé de créer une méthode d'extension pour l'ordre des colonnes dans DataTable:

"151990920 l'Extension de la méthode:

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++;
        }
    }
}

Utilisation:

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

ou

table.SetColumnsOrder(new string[]{"Qty", "Unit", "Id"});
176
répondu default locale 2015-09-18 03:36:42

cette option est basée sur la réponse de"default locale" mais elle supprimera les noms de colonne invalides avant de définir ordinal. C'est parce que si vous envoyez accidentellement un nom de colonne invalide alors il échouerait et si vous mettez une vérification pour l'empêcher de tomber alors l'index serait erroné car il sauterait des indices partout où un nom de colonne invalide a été passé dedans.

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));
        }
}
6
répondu Soenhay 2013-11-14 16:40:24

je sais que c'est une question très ancienne.. et il semble qu'il a été 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 vue générique réutilisable de datagridview qui prend la source de données fournie et affiche juste les colonnes dans leur ordre par défaut. J'ai mis les Alias et l'ordre et la sélection de la colonne au niveau du tableadapter de l'ensemble de données dans designer. Toutefois changer l'ordre de requête select des colonnes ne semble pas avoir d'impact sur les colonnes retournées à travers l'ensemble de données. J'ai trouvé le seul moyen de le faire dans le concepteur, est de supprimer toutes les colonnes sélectionnées dans le tableadapter, de les ajouter de nouveau dans l'ordre que vous désirez sélectionné.

2
répondu da Bich 2015-02-09 14:26:06

vous pouvez également utiliser:

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

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

1
répondu depoip 2015-10-21 08:52:53

nous pouvons utiliser cette méthode pour changer l'index de colonne mais doit être appliquée à toutes les colonnes s'il y a plus de deux nombre de colonnes sinon il montrera toutes les valeurs inappropriées de la table de données....................

0
répondu santosh 2013-07-22 07:09:56