如何在重新加载VB.NET后按列保留datagrid排序asc / desc

时间:2012-10-02 20:55:19

标签: vb.net datagrid

我在timer_tick()子例程中每60秒从Access数据库填充一次datagrid。

Dim direction As SortOrder
.
.
.

DataGridView1 ColumnHeaderMouseClick代码:

direction = DataGridView1.SortOrder
MsgBox(direction.ToString())

现在,每隔一次点击就会显示降序,另一半则显示为“2”,只是提升数字。 有谁知道为什么会发生这种情况或如何解决它?

我尝试实现的是在timer tick()sub中自动重新加载datagrid后保留sortorder。

1 个答案:

答案 0 :(得分:2)

我找到了答案: http://www.tek-tips.com/viewthread.cfm?qid=1617798

问题是这样的 DataGridView.SortOrder返回值为Windows.Forms.SortOrder (此变量类型将检索当前排序顺序)

同时

DataGridView.Sort()正在寻找System.ComponentModel.ListSortDirection的值 (此变量类型将设置新的排序顺序)

所以我们需要这样的东西:

columnXY = DataGridView1.SortedColumn
*' if no column set for sort use third one *
        If columnXY Is Nothing Then
            columnXY = DataGridView1.Columns(2)
        End If

Dim SetSortOrder As ListSortDirection
Dim GridSortOrder As SortOrder
GridSortOrder = DataGridView1.SortOrder

        If GridSortOrder = Windows.Forms.SortOrder.Ascending Then
            SetSortOrder = ListSortDirection.Ascending
        ElseIf GridSortOrder = Windows.Forms.SortOrder.Descending Then
            SetSortOrder = ListSortDirection.Descending
        ElseIf GridSortOrder = Windows.Forms.SortOrder.None Then
            SetSortOrder = ListSortDirection.Ascending
        Else : GridSortOrder = ListSortDirection.Ascending
            MsgBox("not good")
        End If

DataGridView1.DataSource = datasetXY.Tables(0)
DataGridView1.Sort(columnXY, SetSortOrder)

现在,datagrid中的项目将按相同的列保持排序,并在重新加载后按升序/降序排序。