webentwicklung-frage-antwort-db.com.de

So ändern Sie die Reihenfolge der DataTable-Spalten

So ändern Sie die Reihenfolge der datierbaren Spalten in c #.

Beispiel:

eine erzeugte SQL-Tabellentypreihenfolge lautet Menge, Einheit, ID, aber in der Reihenfolge der Programmdaten-Tabelle ist ID, Menge, Einheit. Im Code Behind übergeben Sie DataTable direkt an den SQL-Tabellentyp, damit die Tabellenreihenfolge unterschiedlich ist.

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

Bitte helfen

79
Vyas Dev

Versuchen Sie die Methode DataColumn.SetOrdinal zu verwenden. 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 vereinfachen, habe ich beschlossen, eine Erweiterungsmethode für die Spaltenreihenfolge in DataTable zu erstellen: 

Erweiterungsmethode:

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

Verwendungszweck:

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

oder 

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

Dies basiert auf der Antwort des Standard-Gebietsschemas, entfernt jedoch ungültige Spaltennamen, bevor die Ordinalzahl festgelegt wird. Wenn Sie versehentlich einen ungültigen Spaltennamen senden, schlägt dies fehl. Wenn Sie das Kontrollkästchen aktivieren, um einen Fehler zu vermeiden, ist der Index falsch, da er Indizes überspringen würde, wenn 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));
        }
}
6
Soenhay

Ich weiß, dass dies eine wirklich alte Frage ist .. und es scheint, dass sie beantwortet wurde .. Aber ich kam hier mit der gleichen Frage, aber aus einem anderen Grund für die Frage, und so arbeitete eine etwas andere Antwort für mich . Ich habe eine Schöner wiederverwendbarer generischer Datagridview, der die gelieferte Datenquelle verwendet und die Spalten nur in ihrer Standardreihenfolge anzeigt . Ich lege Aliase und Spaltenreihenfolge und -auswahl auf der Tableadapter-Ebene des Datensatzes in Designer ..__ an Spalten scheinen sich nicht auf die durch das Dataset zurückgegebenen Spalten zu auswirken. Ich habe die einzige Möglichkeit im Designer gefunden, alle im Tableadapter ausgewählten Spalten zu entfernen und sie in der gewünschten Reihenfolge wieder hinzuzufügen ausgewählt.

2
da Bich

Sie können auch verwenden:

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

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

1
depoip

Daten neu anordnen Tabelle basierend auf bestimmten Bedingungen oder Kontrollkästchen aktiviert. 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();
                    }
0
satya prakash

Wir können diese Methode verwenden, um den Spaltenindex zu ändern, sollte aber auf alle Spalten angewendet werden, wenn mehr als zwei Spalten vorhanden sind. Andernfalls werden alle nicht ordnungsgemäßen Werte aus der Datentabelle angezeigt. ........

0
santosh