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
|
実行結果 |