2013-10-21 141 views
5

如何对数据表进行排序?我需要从函数返回一个数据表。我一直在挣扎几个小时,互联网有几个不同的答案,其中没有一个似乎适用于我。如何对数据表进行排序

编辑:我想打我自己。做你的表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方法我只是在语法上缺少某些东西。

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

+0

谢谢。我发现编辑是有帮助的。 – mack

回答

5

使用DataView在DataTable中创建数据视图。这可以让你排序,过滤器,等等。这里是一个C#示例:Datatable VS dataview

+0

我jsut找到了类似的答案 - http://msdn.microsoft.com/en-us/library/system.data.dataview.sort.aspx?cs-save-lang=1&cs-lang=vb#code-snippet- 1它的工作。有点让人费解的是,我花了很多时间才找到这个链接......谢谢,我也会仔细阅读你的整个链接。 – BClaydon

+1

这不是答案!问问者明确地问过如何对DATATABLE进行排序。他不想使用数据视图。史蒂夫的回答是正确的。 –

+1

@real_yggdrasil,我不同意。 'DataTable.selectI()'返回一个'DataRow'对象的数组,所以它实际上不会对现有的DataTable进行排序。 Steve的版本创建了一个新的DataTable,其中包含所选行的副本。 DataView用于将过滤器应用于现有的DataTable,而不创建新的DataTable。 – ps2goat

14

您可以使用这样的事情:

Return table.Select("","Columns to sort on").CopyToDataTable 
+0

我找不到'.CopyToDataTable()'。也许这是你项目中的扩展方法? – Dejisys

+0

@Dejisys这是从.NET Framework 3.5开始提供的。你应该开始一个新的问题。 – Steve

+0

如何对包含逗号(“125.3654”)的值进行排序? – Pliskin

1

这可能会帮助你sortExp可以在其基础应该进行排序字段filterExp应该评估为true或false。假设以下字段

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

上面的代码显示了如何筛选和排序数据表dt_item。过滤器表达式选择患者不是NULL的Date。排序表达式导致结果按日期列排序

相关问题