1

timer_tick() サブルーチンで 60 秒ごとに Access データベースからデータグリッドを設定しました。

Dim direction As SortOrder
.
.
.

DataGridView1 ColumnHeaderMouseClick コード:

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

現在、クリックするたびに、降順と残りの半分 '2' が表示され、昇順の代わりに数字が表示されます。なぜそれが起こっているのか、それを修正する方法を知っている人はいますか?

私が達成しようとしているのは、タイマー tick() サブ内でデータグリッドが自動的にリロードされた後、ソート順を保持することです。

4

1 に答える 1

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)

これで、データグリッド内のアイテムは同じ列で並べ替えられたままになり、リロード後も昇順/降順になります。

于 2012-10-02T22:24:56.390 に答える