作者yinjing (青)
站內Visual_Basic
標題Re: [VB6 ] MSHFlexGrid 排序問題
時間Thu Nov 27 12:31:37 2008
※ 引述《williewillie (williewillie)》之銘言:
: 除了在一開始使用sqlorder by xxx asc 指令排序外
: 有無辦法
: 當我點選MSHFlexGrid的欄位時
: 讓資料依照我點選的MSHFlexGrid欄位進行排序呢?
基本上我還沒學那邊,以下是書裡面光碟範例檔案,
就...... 麻煩自行研究吧 XD
Option Compare Text
Dim LastCol As Integer ' 上一次(最後)被按下的欄位
Dim LastSort As Integer ' 上一次(最後)排序的方式
Dim ChineseSortFactor As Integer
Private Sub Form_Load()
LastCol = -1
LastSort = 0
End Sub
Private Sub MSHFlexGrid1_Click()
' 先判斷使用者按下的欄位(Col屬性)是否等於上一次被按下的欄位
If MSHFlexGrid1.Col <> LastCol Then
' 決定並且記錄最後排序的方式
LastSort = flexSortGenericAscending
Else
If LastSort = flexSortGenericAscending Then
LastSort = flexSortGenericDescending
Else
LastSort = flexSortGenericAscending
End If
End If
' 設定排序方式
If MSHFlexGrid1.TextMatrix(0, MSHFlexGrid1.Col) = "姓名" Then
MSHFlexGrid1.Sort = 9
Else
MSHFlexGrid1.Sort = LastSort
End If
' 記錄最後被按下的欄位
LastCol = MSHFlexGrid1.Col
End Sub
Private Sub MSHFlexGrid1_Compare(ByVal Row1 As Long, ByVal Row2 As Long, Cmp
As Integer)
Dim data1 As String, data2 As String
' 讀取第一列及第二列的資料
data1 = MSHFlexGrid1.TextMatrix(Row1, MSHFlexGrid1.Col)
data2 = MSHFlexGrid1.TextMatrix(Row2, MSHFlexGrid1.Col)
If data1 > data2 Then ' 第一列大於第二列
Cmp = IIf(LastSort = flexSortGenericAscending, 1, -1)
ElseIf data1 < data2 Then ' 第一列小於第二列
Cmp = IIf(LastSort = flexSortGenericAscending, -1, 1)
Else ' 第一列等於第二列
Cmp = 0
End If
End Sub
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.121.101
推 williewillie:大感謝~ 11/27 12:58
推 williewillie:嘿~~我後來試過後 發現 有點問題 資料是會排序沒錯 11/27 17:24
→ williewillie:可是小到大應該是XXX7 XXX8 XXX9 11/27 17:25
→ williewillie:排序後卻是XXX7 XXX9 XXX8 11/27 17:25
推 williewillie:自答: 11/27 18:00
→ williewillie: MSHFlexGrid1.Col) = "姓名"改成<>"" 11/27 18:01
→ williewillie:沒事了 感謝~ 11/27 18:01