6

如何对数据表进行排序?我需要从函数返回一个数据表。我已经为此苦苦挣扎了几个小时,互联网上有一些不同的答案,但似乎都不适合我。

编辑:我想打自己。在您的表上执行 DataView.Sort,然后执行 DataView.ToTable() 以将排序后的数据放入新数据集中...示例:

Dim view As New DataView(OriginalDataSet) 'Put your original dataset into a dataview
view.Sort = "ColumnName" ' Sort your data view
Dim NewDataSet As DataTable = view.ToTable() ' Put your dataview into a new datatable

示例结束

下面我有一个相对简单的示例表,取自教学网站。一个转折是我试图排序的行中有重复的值。

Module Module1

    Sub Main()
    ' Get a DataTable instance from helper function.
    Dim table As DataTable = GetTable()
    End Sub

    ''' <summary>
    ''' Helper function that creates new DataTable.
    ''' </summary>
    Function GetTable() As DataTable
    ' Create new DataTable instance.
    Dim table As New DataTable
    ' Create four typed columns in the DataTable.
    table.Columns.Add("Dosage", GetType(Integer))
    table.Columns.Add("Drug", GetType(String))
    table.Columns.Add("Patient", GetType(String))
    table.Columns.Add("Date", GetType(DateTime))
    ' Add five rows with those columns filled in the DataTable.
    table.Rows.Add(25, "Indocin", "David", DateTime.Now)
    table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now)
    table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now)
    table.Rows.Add(21, "Combivent", "Janet", DateTime.Now)
    table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now)
table.Rows.Add(21, "Aspirin", "Janet", DateTime.Now)
    Return table
    End Function

End Module

我尝试选择一个数组,然后遍历数组并将每一行放入一个新的数据表中,但是选择没有抓取行。例子:

drarray = ds.Select("我想在这里全选", "MySortColumn")

我尝试了各种循环策略,内部循环等,但似乎无法弄清楚。

我已经尝试过 dataTable.DefaultView.Sort = "sortExp" 但我无法让它工作。

那么我错过了什么?我认为使用 DefaultView 和 Select 方法我只是在语法上遗漏了一些东西。

那么最好的方法是什么,我错过了什么?

4

3 回答 3

15

你可以使用这样的东西:

Return table.Select("","Columns to sort on").CopyToDataTable
于 2013-10-21T22:43:36.740 回答
6

使用 DataView 在 DataTable 中创建数据视图。这允许您进行排序、过滤等。这是一个 C# 示例:Datatable VS dataview

于 2013-10-21T22:34:15.397 回答
1

这可以帮助您 sortExp 可以是应该基于哪个字段执行排序 filterExp 应该评估为真或假。假设以下字段

Dim filterExp As String = "Patient<> ''"
Dim sortExp As String = "Date "
dt_item.Select(filterExp, sortExp, DataViewRowState.CurrentRows)

上面的代码展示了如何对数据表 dt_item 进行过滤和排序。过滤器表达式选择患者不为 NULL 的日期。排序表达式使结果按日期列排序

于 2016-05-06T12:07:57.927 回答