如何向DataTable添加可排序的功能...

今天我在工作中被问及是否有可能对

DataTable通过列索引,因此在浏览DataTable方法列表时,我惊讶地发现除了简单的DataTable.Select方法之外,什么都没有。

幸运的是,在.Net中,我们可以继承类,因此实现自定义排序功能并不困难。 这是我的操作方式:


Public Class SortableDataTable
       Inherits DataTable 
    Public Sub Sort(ByVal columnIndex As Integer, _
                    ByVal direction As dDir)
        Dim result As New List(Of DataRow)
        Select Case direction
            Case dDir.Ascending
                Dim v = From r In Me.Rows _
                        Order By r(columnIndex) _
                        Ascending
                For Each row In v
                    Dim nr As DataRow = Me.NewRow
                    nr.ItemArray = row.ItemArray.Clone
                    result.Add(nr)
                Next
            Case dDir.Descending
                Dim v = From r In Me.Rows _
                        Order By r(columnIndex) _
                        Descending
                For Each row In v
                    Dim nr As DataRow = Me.NewRow
                    nr.ItemArray = row.ItemArray.Clone
                    result.Add(nr)
                Next
        End Select
        Me.Rows.Clear()
        For Each row In result
            Me.Rows.Add(row)
        Next
    End Sub 
    Public Sub New(ByVal source As DataTable)
        If Me.Columns.Count <> source.Columns.Count Then
            For Each c As DataColumn In source.Columns
                Me.Columns.Add(c.Caption)
            Next
        End If
        For Each r As DataRow In source.Rows
            Dim nr As DataRow = Me.NewRow()
            nr.ItemArray = r.ItemArray.Clone
            Me.Rows.Add(nr)
        Next
    End Sub 
End Class 
Public Enum dDir
    Ascending = 0
    Descending = 1
End Enum 
将此类添加到项目中后,我可以创建SortableDataTable ,如果我希望将此功能应用于已存在的表,则只需使用“ New ”构造函数,然后将要排序的表传递给我...

Public Sub Button1_Click(sender as object, e as EventArgs)
    Dim newTable As New SortableDataTable(oldTable)
    newTable.Sort(0, dDir.Ascending);
End Sub 
不幸的是,这种处理方式意味着您不能将DataTable 强制转换为OrderedDataTable ,但是可以相反。 这意味着,例如,如果您希望在DataGridView上显示排序的数据,则DataSource属性还将接受这种类型的类。

最后一点,我必须承认,可能有更简单的方法来实现这种类型的排序,但是拥有这样的继承类将提供高级排序的可能性。

感谢您的阅读,希望对像我这样的同事有所帮助的人有所帮助:)

From: https://bytes.com/topic/visual-basic-net/insights/890896-how-add-sortable-functionallity-datatable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值