108 Stimmen

Wie man die Reihenfolge der DataTable-Spalten ändert

Wie man Datatable Spalten Reihenfolge in c# ändern.

Ich habe eine Sql-Tabelle mit der Reihenfolge Menge, Einheit, Id erstellt, aber im Programm DataTable lautet die Reihenfolge Id, Menge, Einheit. Im Code Behind am direkt übergeben DataTable zu Sql-Tabelle Typ, so dass die Tabelle um unterschiedlich ist.

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

Bitte um Hilfe

283voto

default locale Punkte 12515

Versuchen Sie, die DataColumn.SetOrdinal Methode. Zum Beispiel:

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

UPDATE: Diese Antwort erhielt viel mehr Aufmerksamkeit, als ich erwartet hatte. Um Verwirrung zu vermeiden und die Verwendung zu erleichtern, habe ich beschlossen, eine Erweiterungsmethode für die Spaltenanordnung in DataTable zu erstellen:

Methode der Erweiterung:

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

Verwendung:

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

o

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

8voto

Soenhay Punkte 3758

Dies basiert auf der Antwort von "default locale", entfernt aber ungültige Spaltennamen vor dem Setzen der Ordnungszahl. Wenn Sie nämlich versehentlich einen ungültigen Spaltennamen senden, würde es fehlschlagen, und wenn Sie eine Prüfung durchführen, um zu verhindern, dass es fehlschlägt, wäre der Index falsch, da er Indizes überall dort überspringt, wo ein ungültiger Spaltenname übergeben wurde.

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

2voto

da Bich Punkte 442

Ich weiß, dies ist eine wirklich alte Frage.. und es scheint, es wurde beantwortet.. Aber ich bin mit der gleichen Frage hierher gekommen, aber mit einem anderen Grund für die Frage, und so hat eine etwas andere Antwort für mich funktioniert. Ich habe eine nette wiederverwendbare generische Datagridview, die die Datenquelle nimmt, die an sie geliefert wird, und zeigt nur die Spalten in ihrer Standardreihenfolge. Ich habe Aliase, Spaltenreihenfolge und -auswahl auf der Ebene des Tabellenadapters des Datensatzes im Designer festgelegt. Wenn ich jedoch die Reihenfolge der Spalten in der Select-Abfrage ändere, scheint sich das nicht auf die Spalten auszuwirken, die über das Dataset zurückgegeben werden. Ich habe festgestellt, dass die einzige Möglichkeit, dies im Designer zu tun, darin besteht, alle im Tableadapter ausgewählten Spalten zu entfernen und sie in der gewünschten Reihenfolge wieder hinzuzufügen.

2voto

Brent McKain Punkte 21

Wenn Sie mehr als 2-3 Spalten haben, SetOrdinal です no der richtige Weg. Die DataViews ToTable Methode akzeptiert ein Parameter-Array von Spaltennamen. Ordnen Sie dort Ihre Spalten an:

DataView dataView = dataTable.DefaultView;
dataTable = dataView.ToTable(true, "Qty", "Unit", "Id");

1voto

DataTable-Spaltenreihenfolge ändern

Eingabe: DataTable-Spaltenreihenfolge

Rubriken

  1. KOLUMNE1
  2. KOLUMNE2
  3. KOLUMNE3

Sie müssen DataTable an die folgende Methode übergeben und die Reihenfolge nach Ihren Wünschen festlegen

private void ProcessDataTable(DataTable dt)
{
        //Setting Column Orders
        dt.Columns["COLUMN3"].SetOrdinal(0);
        dt.Columns["COLUMN2"].SetOrdinal(1);
        dt.Columns["COLUMN1"].SetOrdinal(2);
}

Ausgabe: DataTable-Spaltenreihenfolge

Rubriken

  1. KOLUMNE3
  2. KOLUMNE2
  3. KOLUMNE1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X