Frage DataTable.DefaultView.Sort Sortiert nicht


Ich bin auf DataTable.DefaultView.Sort verwirrt. Hier ist das Segment des Codes, in dem ich es verwenden möchte.

actionLogDT.DefaultView.Sort = "StartDate";

foreach (CustomerService.ActionLogStartEndRow logRow in actionLogDT)
{
  // code here
}

Die Samples, die ich gesehen habe, benutzen die foreach-Schleife nicht und verwirren mich daher bei der Verarbeitung. Es sortiert nicht so, wie ich gedacht habe.

Ich sehe, dass .DefaultView eine Ansicht zurückgibt, und .Table gibt einen Kompilierungsfehler.


14
2017-07-30 18:45


Ursprung


Antworten:


actionLogDT.DefaultView.Sort = "StartDate";

actionLogDT = actionLogDT.DefaultView.ToTable();

24
2018-05-12 13:09



Das Sortieren der Ansicht ändert nicht die Sortierreihenfolge der Daten in der Tabelle, sondern nur die Reihenfolge in der Ansicht. Es sollte funktionieren, wenn du es tust foreach Stattdessen wird die Zeile aus der DataRowView in die stark typisierte Zeile zurückversetzt.

foreach (DataRowView logRowView in actionLogDT.DefaultView)
{
    CustomerService.ActionLogStartEndRow logRow = logRowView.Row as CustomerService.ActionLogStartEndRow;
    // code here
}

10
2017-07-30 19:27



Ich musste einen etwas anderen Ansatz wählen. Dieser Beitrag war der nächste, den ich finden konnte, um meinen Code zur Arbeit zu bringen. Hier ist das Arbeitsergebnis:

actionLogDT.DefaultView.Sort = "StartDate";
DataView dv = actionLogDT.DefaultView;

foreach (DataRowView logRow in dv) { . . . }

Von dort muss ich den Wert einfach wieder in den richtigen Typ umwandeln.

(string)logRow["Status"].ToString()

7
2017-07-30 20:20



foreach (var logRow in actionLogDT.DefaultView.ToDataTable()) { ... }

3
2017-07-30 19:29



Da es so aussah, als wollten Sie Datensätze durchlaufen, können Sie einfach durch die dataRowView Objekte in der DefaultView.

foreach (DataRowView drv in table.DefaultView)
{
    string strValue = drv["ColumnName"].ToString();
    // its also worth mentioning that a DataRowView has a Row
    strValue = drv.Row["ColumnName"].ToString();
}

3
2017-12-01 01:03



Bitte versuchen Sie Folgendes:

actionLogDT.DefaultView.Sort = "["+actionLogDT.Columns[0].ColumnName+"] asc";

1
2018-02-17 05:47



Nur neugierig: Warum benutzt du das? DataRowView?

d.h.

foreach (DataRow row in actionLogDT.Rows)
{
  Console.WriteLine(row["Status"]);
}

0
2017-12-10 21:58