Zeilen in einer Datentabelle sortieren

Wir haben zwei Spalten in einer DataTable , so:

 COL1 COL2 Abc 5 Def 8 Ghi 3 

Wir versuchen, diese datatable basierend auf COL2 in absteigender Reihenfolge zu sortieren.

 COL1 COL2 ghi 8 abc 4 def 3 jkl 1 

Wir haben das versucht:

 ft.DefaultView.Sort = "occr desc"; ft = ft.DefaultView.ToTable(true); 

Aber ohne DataView möchten wir die DataTable selbst und nicht die DataView sortieren.

Solutions Collecting From Web of "Zeilen in einer Datentabelle sortieren"

Ich fürchte, Sie können nicht einfach eine In-Place-Art von DataTable erstellen, so wie es sich anhört.

Sie können eine neue DataTable aus einer DataView erstellen, die Sie aus Ihrer ursprünglichen DataTable erstellt haben. Wenden Sie die gewünschten Sortierungen und / oder Filter auf das DataView-Objekt an und erstellen Sie dann mithilfe der DataView.ToTable- Methode eine neue DataTable aus dem DataView:

  DataView dv = ft.DefaultView; dv.Sort = "occr desc"; DataTable sortedDT = dv.ToTable(); 

Vielleicht kann folgendes helfen:

 DataRow[] dataRows = table.Select().OrderBy(u => u["EmailId"]).ToArray(); 

Hier können Sie auch andere Lambda-Ausdruck-Abfragen verwenden.

Seine einfache Verwendung. function wählen.

 DataRow[] foundRows=table.Select("Date = '1/31/1979' or OrderID = 2", "CompanyName ASC"); DataTable dt = foundRows.CopyToDataTable(); 

Und es ist fertig …… Happy Coding

Oder, wenn Sie eine DataGridView , können Sie einfach Sort(column, direction) aufrufen:

 namespace Sorter { using System; using System.ComponentModel; using System.Windows.Forms; public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.dataGridView1.Rows.Add("Abc", 5); this.dataGridView1.Rows.Add("Def", 8); this.dataGridView1.Rows.Add("Ghi", 3); this.dataGridView1.Sort(this.dataGridView1.Columns[1], ListSortDirection.Ascending); } } } 

Welches würde Ihnen das gewünschte Ergebnis geben:

Debugger-Ansicht

Haben Sie versucht, die Methode Select(filterExpression, sortOrder) für DataTable zu verwenden? Sehen Sie hier ein Beispiel. Beachten Sie, dass diese Methode die Datentabelle nicht an Ort und Stelle sortiert, wenn Sie das suchen, sondern ein sortiertes Array von Zeilen ohne Verwendung einer Datenansicht zurückgibt.

  table.DefaultView.Sort = "[occr] DESC"; 

Das wird dir helfen…

 DataTable dt = new DataTable(); dt.DefaultView.Sort = "Column_name desc"; dt = dt.DefaultView.ToTable(); 

Es stellt sich heraus, dass es einen speziellen Fall gibt, in dem dies erreicht werden kann. Der Trick besteht darin, beim Erstellen der DataTable alle Zeilen in einer Liste zu sammeln, sie zu sortieren und dann hinzuzufügen. Dieser Fall ist gerade hier heraufgekommen.

// Hoffnung Das wird dir helfen ..

  DataTable table = new DataTable(); //DataRow[] rowArray = dataTable.Select(); table = dataTable.Clone(); for (int i = dataTable.Rows.Count - 1; i >= 0; i--) { table.ImportRow(dataTable.Rows[i]); } return table; 

Es gibt 2 Möglichkeiten für Sortierdaten

1) nur Daten sortieren und in Gitter füllen:

 DataGridView datagridview1 = new DataGridView(); // for show data DataTable dt1 = new DataTable(); // have data DataTable dt2 = new DataTable(); // temp data table DataRow[] dra = dt1.Select("", "ID DESC"); if (dra.Length > 0) dt2 = dra.CopyToDataTable(); datagridview1.DataSource = dt2; 

2) sortiere die Standardansicht, die der Sortierung mit der Spaltenspalte entspricht:

 DataGridView datagridview1 = new DataGridView(); // for show data DataTable dt1 = new DataTable(); // have data dt1.DefaultView.Sort = "ID DESC"; datagridview1.DataSource = dt1; 

TL; DR

Verwenden Sie tableObject.Select(queryExpression, sortOrderExpression) , um Daten in sortierter Weise auszuwählen

Vollständiges Beispiel

Vollständiges Arbeitsbeispiel – kann in einer Konsolenanwendung getestet werden:

  using System; using System.Data; namespace A { class Program { static void Main(string[] args) { DataTable table = new DataTable("Orders"); table.Columns.Add("OrderID", typeof(Int32)); table.Columns.Add("OrderQuantity", typeof(Int32)); table.Columns.Add("CompanyName", typeof(string)); table.Columns.Add("Date", typeof(DateTime)); DataRow newRow = table.NewRow(); newRow["OrderID"] = 1; newRow["OrderQuantity"] = 3; newRow["CompanyName"] = "NewCompanyName"; newRow["Date"] = "1979, 1, 31"; // Add the row to the rows collection. table.Rows.Add(newRow); DataRow newRow2 = table.NewRow(); newRow2["OrderID"] = 2; newRow2["OrderQuantity"] = 2; newRow2["CompanyName"] = "NewCompanyName1"; table.Rows.Add(newRow2); DataRow newRow3 = table.NewRow(); newRow3["OrderID"] = 3; newRow3["OrderQuantity"] = 2; newRow3["CompanyName"] = "NewCompanyName2"; table.Rows.Add(newRow3); DataRow[] foundRows; Console.WriteLine("Original table's CompanyNames"); Console.WriteLine("************************************"); foundRows = table.Select(); // Print column 0 of each returned row. for (int i = 0; i < foundRows.Length; i++) Console.WriteLine(foundRows[i][2]); // Presuming the DataTable has a column named Date. string expression = "Date = '1/31/1979' or OrderID = 2"; // string expression = "OrderQuantity = 2 and OrderID = 2"; // Sort descending by column named CompanyName. string sortOrder = "CompanyName ASC"; Console.WriteLine("\nCompanyNames data for Date = '1/31/1979' or OrderID = 2, sorted CompanyName ASC"); Console.WriteLine("************************************"); // Use the Select method to find all rows matching the filter. foundRows = table.Select(expression, sortOrder); // Print column 0 of each returned row. for (int i = 0; i < foundRows.Length; i++) Console.WriteLine(foundRows[i][2]); Console.ReadKey(); } } } 

Ausgabe

Ausgabe

Versuche dies:

 DataTable DT = new DataTable(); DataTable sortedDT = DT; sortedDT.Clear(); foreach (DataRow row in DT.Select("", "DiffTotal desc")) { sortedDT.NewRow(); sortedDT.Rows.Add(row); } DT = sortedDT;