web-dev-qa-db-ja.com

データテーブルを並べ替えるにはどうすればよいですか

データテーブルを並べ替えるにはどうすればよいですか?関数からデータテーブルを返す必要があります。私はこれに何時間も苦労してきましたが、インターネットにはいくつかの異なる答えがありますが、どれも私にはうまくいかないようです。

編集:私は自分自身を殴りたいです。テーブルで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

例の終わり

以下に、教育用Webサイトから抜粋した比較的単純な例の表を示します。 1つのひねりは、並べ替えようとしている行に重複する値があることです。

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メソッドを使用すると、何かが完全に欠落していることがわかります。

それで、行くための最良の方法は何ですか、そして私は何が欠けていますか?

6
BClaydon

DataViewを使用して、DataTableにデータのビューを作成します。これにより、並べ替え、フィルタリングなどを行うことができます。C#の例を次に示します。 Datatable VS dataview

6
ps2goat

次のようなものを使用できます。

Return table.Select("","Columns to sort on").CopyToDataTable
15
Steve

これは、sortExpを、ソートの実行に基づいて実行するフィールドである場合に役立ちます。filterExpは、trueまたはfalseと評価されます。次のフィールドを想定

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

上記のコードは、データテーブルdt_itemをフィルタリングおよびソートする方法を示しています。フィルタ式は、患者がNULLでない日付を選択します。並べ替え式に​​より、結果は日付列で並べ替えられます

1
ajit