2013年11月21日木曜日

【VB.NET】DataTableの並び替え

DataTableの行の抽出の引数またはプロパティに["列名 ソート方向"]を設定する。
ソート方向 ASC(省略可)‥昇順
        DESC‥降順

DataTable.Selectメソッドを使っての並び替え
Module Module1
 
    Sub Main()
        'サンプルデータテーブル
        Dim dt As New DataTable
        dt.Columns.Add("NO", Type.GetType("System.Double"))
        dt.Columns.Add("CATEGORY1", Type.GetType("System.String"))
        dt.Columns.Add("NAME", Type.GetType("System.String"))
        dt.Columns.Add("VAL1", Type.GetType("System.Double"))
 
        dt.Rows.Add("0", "分類00", "名前0000", 15)
        dt.Rows.Add("1", "分類00", "名前0001", 23)
        dt.Rows.Add("2", "分類00", "名前0002", 75)
        dt.Rows.Add("3", "分類00", "名前0003", 0)
        dt.Rows.Add("4", "分類00", "名前0004", 69)
        dt.Rows.Add("5", "分類00", "名前0005", 45)
        dt.Rows.Add("6", "分類01", "名前0100", 96)
        dt.Rows.Add("7", "分類01", "名前0101", 12)
        dt.Rows.Add("8", "分類01", "名前0102", 69)
        dt.Rows.Add("9", "分類01", "名前0103", 2)
        dt.Rows.Add("10", "分類01", "名前0104", 2)
        dt.Rows.Add("11", "分類01", "名前0105", 18)
        dt.Rows.Add("12", "分類02", "名前0200", 8)
        dt.Rows.Add("13", "分類02", "名前0201", 72)
        dt.Rows.Add("14", "分類02", "名前0202", 95)
        dt.Rows.Add("15", "分類02", "名前0203", 55)
        dt.Rows.Add("16", "分類02", "名前0204", 22)
        dt.Rows.Add("17", "分類02", "名前0205", 99)
        dt.Rows.Add("18", "分類03", "名前0300", 74)
        dt.Rows.Add("19", "分類03", "名前0301", 51)
        dt.Rows.Add("20", "分類03", "名前0302", 68)
        dt.Rows.Add("21", "分類03", "名前0303", 18)
        dt.Rows.Add("22", "分類03", "名前0304", 99)
        dt.Rows.Add("23", "分類03", "名前0305", 37)
 
        'データを抽出
        Dim rws() As DataRow = dt.Select("CATEGORY1 = '分類02'", "VAL1 ASC")
 
        '抽出したデータを出力
        For i = 0 To rws.Count - 1
            Dim str As String = Nothing
            For j = 0 To dt.Columns.Count - 1
                str = str & rws(i)(j).ToString & " "
            Next
            Console.WriteLine(str)
        Next
    End Sub
 
End Module
実行結果
DataViewを使っての並び替え
Module Module1
 
    Sub Main()
        'サンプルデータテーブル
        Dim dt As New DataTable
        dt.Columns.Add("NO", Type.GetType("System.Double"))
        dt.Columns.Add("CATEGORY1", Type.GetType("System.String"))
        dt.Columns.Add("NAME", Type.GetType("System.String"))
        dt.Columns.Add("VAL1", Type.GetType("System.Double"))
 
        dt.Rows.Add("0", "分類00", "名前0000", 15)
        dt.Rows.Add("1", "分類00", "名前0001", 23)
        dt.Rows.Add("2", "分類00", "名前0002", 75)
        dt.Rows.Add("3", "分類00", "名前0003", 0)
        dt.Rows.Add("4", "分類00", "名前0004", 69)
        dt.Rows.Add("5", "分類00", "名前0005", 45)
        dt.Rows.Add("6", "分類01", "名前0100", 96)
        dt.Rows.Add("7", "分類01", "名前0101", 12)
        dt.Rows.Add("8", "分類01", "名前0102", 69)
        dt.Rows.Add("9", "分類01", "名前0103", 2)
        dt.Rows.Add("10", "分類01", "名前0104", 2)
        dt.Rows.Add("11", "分類01", "名前0105", 18)
        dt.Rows.Add("12", "分類02", "名前0200", 8)
        dt.Rows.Add("13", "分類02", "名前0201", 72)
        dt.Rows.Add("14", "分類02", "名前0202", 95)
        dt.Rows.Add("15", "分類02", "名前0203", 55)
        dt.Rows.Add("16", "分類02", "名前0204", 22)
        dt.Rows.Add("17", "分類02", "名前0205", 99)
        dt.Rows.Add("18", "分類03", "名前0300", 74)
        dt.Rows.Add("19", "分類03", "名前0301", 51)
        dt.Rows.Add("20", "分類03", "名前0302", 68)
        dt.Rows.Add("21", "分類03", "名前0303", 18)
        dt.Rows.Add("22", "分類03", "名前0304", 99)
        dt.Rows.Add("23", "分類03", "名前0305", 37)
 
        'データを抽出
        Dim dv As New DataView(dt)
        dv.RowFilter = "CATEGORY1 = '分類03'"
        '並び替え
        dv.Sort = "VAL1 ASC"
 
        '抽出したデータを出力
        For i = 0 To dv.Count - 1
            Dim str As String = Nothing
            For j = 0 To dv.Table.Columns.Count - 1
                str = str & dv(i)(j).ToString & " "
            Next
            Console.WriteLine(str)
        Next
    End Sub
 
End Module
実行結果
BindingSourceを使っての並び替え
 フォームにDataGridView、BindingSourceを配置する
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        'サンプルデータテーブル
        Dim dt As New DataTable
        dt.Columns.Add("NO", Type.GetType("System.Double"))
        dt.Columns.Add("CATEGORY1", Type.GetType("System.String"))
        dt.Columns.Add("NAME", Type.GetType("System.String"))
        dt.Columns.Add("VAL1", Type.GetType("System.Double"))
 
        dt.Rows.Add("0", "分類00", "名前0000", 15)
        dt.Rows.Add("1", "分類00", "名前0001", 23)
        dt.Rows.Add("2", "分類00", "名前0002", 75)
        dt.Rows.Add("3", "分類00", "名前0003", 0)
        dt.Rows.Add("4", "分類00", "名前0004", 69)
        dt.Rows.Add("5", "分類00", "名前0005", 45)
        dt.Rows.Add("6", "分類01", "名前0100", 96)
        dt.Rows.Add("7", "分類01", "名前0101", 12)
        dt.Rows.Add("8", "分類01", "名前0102", 69)
        dt.Rows.Add("9", "分類01", "名前0103", 2)
        dt.Rows.Add("10", "分類01", "名前0104", 2)
        dt.Rows.Add("11", "分類01", "名前0105", 18)
        dt.Rows.Add("12", "分類02", "名前0200", 8)
        dt.Rows.Add("13", "分類02", "名前0201", 72)
        dt.Rows.Add("14", "分類02", "名前0202", 95)
        dt.Rows.Add("15", "分類02", "名前0203", 55)
        dt.Rows.Add("16", "分類02", "名前0204", 22)
        dt.Rows.Add("17", "分類02", "名前0205", 99)
        dt.Rows.Add("18", "分類03", "名前0300", 74)
        dt.Rows.Add("19", "分類03", "名前0301", 51)
        dt.Rows.Add("20", "分類03", "名前0302", 68)
        dt.Rows.Add("21", "分類03", "名前0303", 18)
        dt.Rows.Add("22", "分類03", "名前0304", 99)
        dt.Rows.Add("23", "分類03", "名前0305", 37)
 
        'BindingSource1のDataSource設定
        Me.BindingSource1.DataSource = dt
 
        'データの抽出
        Me.BindingSource1.Filter = "CATEGORY1 = '分類01'"
 
        'データの並び替え
        Me.BindingSource1.Sort = "VAL1 ASC"
 
        'DataGridView1のDataSource設定
        Me.DataGridView1.DataSource = Me.BindingSource1
 
    End Sub
 
End Class
実行結果

0 件のコメント:

コメントを投稿