2016-06-13 17 views
1

In this Thema, fragte ich, wie Sie die Zeilen durch die Summe der Werte in der Zeile sortieren. Die Lösung war:Sortieren Spalten in Datagridview

var temp = myDataBaseDataSet.table1.Clone(); 
myDataBaseDataSet.table1.Rows.Cast<DataRow>() 
    .OrderByDescending(x => x.ItemArray.OfType<bool>().Count(b => b == true)) 
    .ToList().ForEach(x => 
    { 
     temp.Rows.Add(x.ItemArray); 
    }); 
this.table1DataGridView.DataSource = temp; 

Jetzt gibt es eine neue vielleicht blöde Frage: Wie kann die Spalte wie Zeilen in Beispiel sortieren oben? Einfach, um die Reihenfolge der Spalten zu ändern (aber speichere Spaltenwerte)

Ich habe versucht, eine Anwendung für ein Beispiel zu machen. Zuerst mache ich das Sortieren in Reihen wie schon geschrieben. Dann brauche ich durch die Summe der Werte der Spalten der Spalten tauschen und sie sollten von abwärts (wie auf dem Screenshot) angeordnet sein, um Example of what i need

Antwort

1

Sie können zunächst auf Zählung eine geordnete Liste von Spalten von DataTable basiert erhalten von überprüften Artikeln in Spalten. Entfernen Sie dann die entsprechenden Spalten aus dem Raster und fügen Sie sie in der folgenden Reihenfolge hinzu:

var columns = dt.Columns.Cast<DataColumn>() 
       .Where(x => x.DataType == typeof(bool)) 
       .Select(x => new 
       { 
        Column = x, 
        Count = dt.Rows.Cast<DataRow>() 
           .Count(r => r.Field<bool>(x) == true) 
       }).OrderByDescending(x => x.Count) 
       .Select(x => x.Column).ToList(); 

columns.ForEach(x => 
{ 
    var column = grid.Columns.Cast<DataGridViewColumn>() 
        .Where(c => c.DataPropertyName == x.ColumnName) 
        .FirstOrDefault(); 
    if (column != null) 
    { 
     grid.Columns.Remove(column); 
     grid.Columns.Add((DataGridViewColumn)column.Clone()); 
     column.Dispose(); 
    } 
}); 
Verwandte Themen