MSFlexGridのソート方法

解決


River  2008-11-20 12:34:17  No: 101322  IP: 192.*.*.*

Visual Basic 6.0でプログラムしています。

MSFlexGridのタイトルセルをクリックした際に、1度選択すると昇順に
2度目が降順にとなり、以後は交互にソートするようにしたいのですが、
うまくいきません。
解決方法を教えていただけないでしょうか?

現在のコードは
Private Sub MSFlexGrid_Click()

    With MSFlexGrid
        
        .Row = .MouseRow
    
        If .Sort = flexSortGenericAscending Then
            .Sort = flexSortGenericDescending
        Else
            .Sort = flexSortGenericAscending
        End If

    End With
    
End Sub
となっています。

お手数をおかけしますが、よろしくお願いいたします。

編集 削除
やじゅ  2008-11-20 12:43:57  No: 101323  IP: 192.*.*.*

↓な感じでは駄目ですか?
Private Sub MSHFlexGrid1_Click()
    With MSHFlexGrid1
        If .Col = 0 And .Row = 1 And .MouseRow = 0 Then
            If .TextMatrix(0, 0) = "項目名    ▲" Then
               .TextMatrix(0, 0) = "項目名    ▼"
               .Sort = flexSortGenericAscending
            Else
               .TextMatrix(0, 0) = "項目名    ▲"
               .Sort = flexSortGenericDescending
            End If
        End If

        '以下同様に必要な列だけ追加

    End With
End Sub

編集 削除
River  2008-11-20 13:03:23  No: 101324  IP: 192.*.*.*

回答ありがとうございます。

なるほど、確かにこの方法でも出来ますね。

ですが項目数がそれなりに多いので、全部の項目でやると
プログラム量がかなり多くなってしまいますね・・・。

とりあえずはこの方法でやってみます。

編集 削除
River  2008-11-20 15:09:39  No: 101325  IP: 192.*.*.*

やじゅ様のおっしゃった方法ですが、ちょっとした不都合があって
完全には出来ませんでした。

この方法でやると、新たに別の項目を選択すると必ずしも昇順のソート
にならず降順で行われてしまうこともあります。
出来れば、このときは必ず昇順でソートしたいのですがどのようにすれば
よいのでしょうか。

考えたのは選択した項目でソートした時、その項目以外の項目名を
すべて"項目名    ▲"に変更するということですが、項目数が多くて
このコードを書くと莫大な量のプログラムを書くことになってしまいます。

他にやり方はあるのでしょうか?

編集 削除
ものりす  2008-11-21 00:07:18  No: 101326  IP: 192.*.*.*

別に変数を用意しておけば良いのでは?
Private SortFlg(Colの数) As Integer

With MSHFlexGrid1
    If  .MouseRow = 0 Then
        If SortFlg(.Col) = flexSortGenericAscending Then
             Erase SortFlg
             SortFlg(.Col) =flexSortGenericDescending
        Else
             Erase SortFlg
             SortFlg(.Col) =flexSortGenericAscending
        End If
        .Sort = flexSortGenericDescending    
    Endif
End With


▲つけるとかはお好きに

環境無いので、エラーあったらごめん。

編集 削除
ものりす  2008-11-21 00:13:07  No: 101327  IP: 192.*.*.*

ここ間違ってた。

With MSHFlexGrid1
    If  .MouseRow = 0 Then
        If SortFlg(.Col) = flexSortGenericAscending or SortFlg(.Col) = 0 Then

どんどん間違い出てきそうです。
すまん。

編集 削除
ものりす  2008-11-21 00:31:10  No: 101328  IP: 192.*.*.*

orz
  .Sort = SortFlg(.Col)

#今日はそっとしておいてください。

編集 削除
River  2008-11-21 11:16:29  No: 101329  IP: 192.*.*.*

ものりす様、回答ありがとうございます。

上記のコードで試してみたところ、少し不具合が存在してうまく
いきませんでしたが、いろいろと試しながら修正してみたところ
どうにかうまく作動するようになりました。

回答していただいた、やじゅ様、ものりす様ありがとうございました。

編集 削除
River  2008-11-21 11:17:49  No: 101330  IP: 192.*.*.*

解決済みにするの忘れてました(^_^;A)

編集 削除