Сортировка строк в таблице данных - PullRequest
131 голосов
/ 02 февраля 2012

У нас есть два столбца в DataTable, например:

COL1   COL2
Abc    5
Def    8
Ghi    3

Мы пытаемся отсортировать datatable на основе COL2 в порядке убывания.

COL1            COL2
ghi             8
abc             4
def             3
jkl             1

Мы попробовали это:

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

, но без использования DataView мы хотим отсортировать сам DataTable, а не DataView.

Ответы [ 12 ]

324 голосов
/ 02 февраля 2012

Боюсь, вы не можете легко создать на месте вид DataTable, как это звучит так, как вы хотите.

Что вы можете сделать, это создать новый DataTable из DataView, который вы создаете из своего исходного DataTable. Примените любые сортировки и / или фильтры, которые вы хотите в DataView, а затем создайте новый DataTable из DataView, используя метод DataView.ToTable :

   DataView dv = ft.DefaultView;
   dv.Sort = "occr desc";
   DataTable sortedDT = dv.ToTable();
23 голосов
/ 28 апреля 2017

Это вам поможет ...

DataTable dt = new DataTable();         
dt.DefaultView.Sort = "Column_name desc";
dt = dt.DefaultView.ToTable();
20 голосов
/ 06 января 2014

Простое использование. Выберите функцию.

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

И все готово ...... Счастливое кодирование

19 голосов
/ 21 января 2015

Может помочь следующее:

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

Здесь вы можете использовать и другие запросы на лямбда-выражения.

13 голосов
/ 02 февраля 2012

Или, если вы можете использовать DataGridView, вы можете просто позвонить Sort(column, direction):

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

, что даст вам желаемый результат:

Debugger view

13 голосов
/ 02 февраля 2012

Вы пытались использовать метод Select(filterExpression, sortOrder) в DataTable?См. здесь для примера.Обратите внимание, что этот метод не будет сортировать таблицу данных на месте, если это то, что вы ищете, но он вернет отсортированный массив строк без использования представления данных.

9 голосов
/ 13 февраля 2015
 table.DefaultView.Sort = "[occr] DESC";
4 голосов
/ 20 февраля 2013

Оказывается, есть особый случай, когда этого можно достичь. Хитрость в том, что при построении DataTable собрать все строки в списке, отсортировать их, а затем добавить их. Этот случай только что появился здесь.

3 голосов
/ 08 июня 2016

Существует 2 способа сортировки данных

1) сортировка только данных и заполнение в сетке:

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) сортировка по умолчанию, похожая насортировать с заголовком столбца сетки:

DataGridView datagridview1 = new DataGridView(); // for show data
DataTable dt1 = new DataTable(); // have data
dt1.DefaultView.Sort = "ID DESC";
datagridview1.DataSource = dt1;
3 голосов
/ 09 декабря 2013

// Надеюсь, это поможет вам ..

        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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...