对数据表中的行进行排序

vid*_*gar 137 c# sorting datatable

我们在a中有两列DataTable,如下所示:

COL1   COL2
Abc    5
Def    8
Ghi    3
Run Code Online (Sandbox Code Playgroud)

我们正在尝试这一排序datatable基于COL2按递减顺序.

COL1            COL2
ghi             8
abc             4
def             3
jkl             1
Run Code Online (Sandbox Code Playgroud)

我们试过这个:

ft.DefaultView.Sort = "COL2 desc";
ft = ft.DefaultView.ToTable(true);
Run Code Online (Sandbox Code Playgroud)

但是,不使用a DataView,我们想要对DataTable自己进行排序,而不是DataView.

Jay*_*ggs 335

我担心你不能像你想要的那样轻松地进行就地排序的DataTable.

您可以做的是从您从原始DataTable创建的DataView创建一个新的DataTable.在DataView上应用您想要的任何排序和/或过滤器,然后使用DataView.ToTable方法从DataView创建新的DataTable :

   DataView dv = ft.DefaultView;
   dv.Sort = "occr desc";
   DataTable sortedDT = dv.ToTable();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.值得注意的是,"occr desc"在这里,"occr"是列名,"desc"表示"降序". (26认同)
  • 这对我有用dataTable.DefaultView.Sort ="Col1,Col2,Col3".干净的代码很少. (19认同)
  • 就像@Sai一样,您可以直接修改DataTable.DefaultView.Sort.无需"突破"视图并重新创建表格. (7认同)

Ank*_*tix 30

这会对你有所帮助......

DataTable dt = new DataTable();         
dt.DefaultView.Sort = "Column_name desc";
dt = dt.DefaultView.ToTable();
Run Code Online (Sandbox Code Playgroud)


Abd*_*dul 22

简单使用.选择功能.

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

它已经完成......快乐编码

  • 请注意,如果像 OP 一样,您只对排序方面感兴趣并且不想过滤结果,则可以这样指定:`Select("", "CompanyName ASC")`。 (2认同)

Vis*_*hnu 20

也许以下内容可以帮助:

DataRow[] dataRows = table.Select().OrderBy(u => u["EmailId"]).ToArray();
Run Code Online (Sandbox Code Playgroud)

在这里,您也可以使用其他Lambda表达式查询.


Bri*_*ers 13

您是否尝试Select(filterExpression, sortOrder)在DataTable上使用该方法?请看这里的例子.请注意,此方法不会对数据表进行排序,如果这是您要查找的内容,但它将返回已排序的行数组而不使用数据视图.


Gus*_*ori 13

或者,如果你可以使用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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个会给你想要的结果:

调试器视图


小智 9

 table.DefaultView.Sort = "[occr] DESC";
Run Code Online (Sandbox Code Playgroud)

  • 描述*为什么*代码回答问题. (5认同)
  • 建议是改善这个职位; 将来将有关代码的信息放入响应中.因为它更有可能有人支持帖子甚至选择它作为答案. (2认同)

小智 6

使用 LINQ - C# 之美

DataTable newDataTable = baseTable.AsEnumerable()
                   .OrderBy(r=> r.Field<int>("ColumnName"))
                   .CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)


Zol*_*ari 5

排序数据有两种方式

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;
Run Code Online (Sandbox Code Playgroud)

2)排序默认视图,类似于带有网格列标题的排序:

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