2016-06-13 8 views
1

В теме this, я спросил, как сортировать строки по сумме значений в строке. Решение было это:Сортировка столбцов в 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; 

Теперь есть новый, возможно, глупый вопрос: как сортировать столбец, как строки в приведенном выше примере? Просто, чтобы изменить порядок столбцов (но сохранить значения столбцов)

Я попытался подать заявку на пример. Сначала я сортирую строки, как уже писал. Тогда мне нужно поменять местами столбцы суммой значений столбцов, и они должны быть размещены в порядке убывания (как на скриншоте) Example of what i need

ответ

1

Вы можете сначала получить упорядоченный список столбцов из DataTable на основе подсчета проверенных элементов в столбцах. Затем удалите соответствующие столбцы из сетки и добавьте их следующим образом:

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(); 
    } 
}); 
Смежные вопросы