VB.net DataTable关于Sort无效的说明
今天发现项目上代码的一个bug,DataTable在使用DefaultView.Sort时,后续使用了Rows来取值,但是排序没起作用。
经过一番调查发现,DefaultView.Sort只对DefaultView有效,对Rows无效。
解决办法
- 后续使用DefaultView来取值
- DefaultView.ToTable()
代码 方法1
Dim dt As New DataTable
dt.Columns.Add("Name", Type.GetType("System.String"))
Dim row As DataRow
Dim names() As String = {"不適合", "品名", "書", "品質", "実施", "変更"}
For Each name As String In names
row = dt.NewRow()
row("Name") = name
dt.Rows.Add(row)
Next
dt.DefaultView.Sort = "Name" ' 使用Name排序
dt = dt.DefaultView.ToTable()
Console.WriteLine("----------------------初始------------------------")
For Each name As String In names
Console.WriteLine(name)
Next
Console.WriteLine("---------------------使用Rows---------------------")
For Each dr As DataRow In dt.Rows
Console.WriteLine(dr("Name"))
Next
Console.WriteLine("------------------使用DataRowView------------------")
For Each drv As DataRowView In dt.DefaultView
Console.WriteLine(drv("Name"))
Next
- 结果
方法2
Sort后使用dt.DefaultView.ToTable()
dt = dt.DefaultView.ToTable()