MSFlexGridのソート方法

解決


River  2008-11-20 21:34:17  No: 101322

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 21:43:57  No: 101323

↓な感じでは駄目ですか?
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 22:03:23  No: 101324

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

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

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

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


River  2008-11-21 00:09:39  No: 101325

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

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

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

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


ものりす  2008-11-21 09:07:18  No: 101326

別に変数を用意しておけば良いのでは?
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 09:13:07  No: 101327

ここ間違ってた。

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

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


ものりす  2008-11-21 09:31:10  No: 101328

orz
  .Sort = SortFlg(.Col)

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


River  2008-11-21 20:16:29  No: 101329

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

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

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


River  2008-11-21 20:17:49  No: 101330

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加