【问题标题】:Order DataTable after the population人口后排序DataTable
【发布时间】:2013-05-09 22:14:38
【问题描述】:

我有一个 DataTable,用于在本地添加、修改和删除数据。 DataTable 也用于填充 Grid。

我需要根据整数值(重要性)对网格进行排序。

我想实现两个按钮来增加或减少每条记录的重要性。 为此我写了这段代码:

 Dim rowNumber As Integer = 0

    For i As Integer = 0 To dataTable.Rows.Count - 1
        'search for the selected row in the DataGridView by ID
        If dataTable.Rows(i)("ID") = ID Then
            rowNumber= i
        End If
    Next

    If rowNumber <> 0 Then
        dataTable.Rows(rowNumber )("Priority") -= 1
        dataTable.Rows(rowNumber - 1)("Priority") += 1
    End If

它第一次运行良好,它更改了选定的记录并更改了所有其他记录以调整顺序。第二次产生错误。

这是因为 DataTable 没有按照新的优先顺序自动排序。

我想知道在改变记录的原始顺序(字段优先级)后是否有办法对DataTable进行排序

【问题讨论】:

    标签: vb.net sorting ado.net datatable


    【解决方案1】:

    尝试为此使用 DataView:

    Dim dv As New DataView(dataTable)
    dv.Sort = "Priority"
    

    然后使用 dv 作为网格的 DataSource。


    根据您的 cmets,我认为您需要找到具有其他优先级编号的行:

    Dim rowNumber As Integer = 0
    Dim priorityNumber As Integer = 0
    
    For i As Integer = 0 To dt.Rows.Count - 1
      If dt.Rows(i)("ID") = ID Then
        rowNumber = i
        priorityNumber = dt.Rows(i)("Priority")
        dt.Rows(i)("Priority") -= 1
      End If
    Next
    
    For i As Integer = 0 To dt.Rows.Count - 1
      If dt.Rows(i)("ID") <> ID AndAlso dt.Rows(i)("Priority") = priorityNumber Then
        dt.Rows(i)("Priority") += 1
      End If
    Next
    

    【讨论】:

    • 不幸的是问题不是数据网格,我可以正常显示。事实是,当我第二次滚动数据集中的行时,它们的顺序是旧的并且不是最新的!
    • @WannyMiarelli 使用您的代码第二次生成的错误是什么?
    • 没有错误。只需循环修改错误的行。这是因为在数据表中,行是按 ID 排序的,而不是按优先级排序的。 ID = 1的产品第一次位于第三行时,其优先级加1,前一行的优先级减1。数据表没有用新订单更新第二次尝试增加产品周期 1 的优先级是错误的,因为在数据表中 ID = 1 的产品仍然排在第三位,而如果按优先级排序则排在第二位。
    • @WannyMiarelli 那么你不能使用rowNumber - 1(这会导致第0行出错)。您必须再次搜索具有要交换的优先级编号的行。
    • 这很容易... :|谢谢LarsTech
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2020-05-22
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2012-10-07
    • 2013-08-08
    相关资源
    最近更新 更多