在人口之后订购DataTable

时间:2013-05-09 22:14:39

标签: vb.net sorting ado.net datatable

我有一个DataTable,用于在本地添加,修改和删除数据。 DataTable还用于填充网格。

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

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

 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进行排序

1 个答案:

答案 0 :(得分:3)

尝试使用DataView:

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

然后使用dv作为网格的数据源。


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

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