瞎写了点。 看看 row1 头 AAAACBBB row 12341123 key A1A2A3A4CB1B2B3Private Sub VSFlexGrid1_AfterMoveColumn(ByVal Col As Long, Position As Long) Dim idx As Integer Dim idxPosition As Integer
If Col = Position Then Exit Sub
If VSFlexGrid1.ColKey(Position) <> "" Then While Left(VSFlexGrid1.ColKey(Col), 1) = Left(VSFlexGrid1.ColKey(Position), 1) VSFlexGrid1.ColPosition(Col) = Position - 1 Wend
For idx = VSFlexGrid1.Cols - 1 To Col + 1 Step -1 If Left(VSFlexGrid1.ColKey(idx), 1) = Left(VSFlexGrid1.ColKey(Position), 1) Then idxPosition = idx Exit For End If Next
If idxPosition <> 0 Then While Left(VSFlexGrid1.ColKey(idx), 1) = Left(VSFlexGrid1.ColKey(Position), 1) VSFlexGrid1.ColPosition(idxPosition) = Position + 1 Wend End If End If End SubPrivate Sub VSFlexGrid1_BeforeMoveColumn(ByVal Col As Long, Position As Long) If VSFlexGrid1.ColKey(Position) <> "" Then If Right(VSFlexGrid1.ColKey(Position), Len(VSFlexGrid1.ColKey(Position)) - 1) > 1 Then Position = Col End If End If End Sub
托不动是因为没有托到一个group的最前面。
修改了嗲,和拖动没关系,是托动非第一个列在一个组中。 Private Sub VSFlexGrid1_AfterMoveColumn(ByVal Col As Long, Position As Long) Dim idx As Integer Dim idxPosition As Integer Dim idxCount As Integer
If Col = Position Then Exit Sub
If VSFlexGrid1.ColKey(Position) <> "" Then While Left(VSFlexGrid1.ColKey(Col), 1) = Left(VSFlexGrid1.ColKey(Position), 1) VSFlexGrid1.ColPosition(Col) = Position idxCount = idxCount + 1 Wend
For idx = VSFlexGrid1.Cols - 1 To Col + 1 Step -1 If Left(VSFlexGrid1.ColKey(idx), 1) = Left(VSFlexGrid1.ColKey(Position), 1) Then idxPosition = idx Exit For End If Next
If idxPosition <> 0 Then While Left(VSFlexGrid1.ColKey(idx), 1) = Left(VSFlexGrid1.ColKey(Position), 1) VSFlexGrid1.ColPosition(idxPosition) = Position + idxCount + 1 Wend End If End If End Sub
想上次的建议一样,用row。然后subtotal,一般的报表多是横向显示的。
看看
row1 头 AAAACBBB
row 12341123
key A1A2A3A4CB1B2B3Private Sub VSFlexGrid1_AfterMoveColumn(ByVal Col As Long, Position As Long)
Dim idx As Integer
Dim idxPosition As Integer
If Col = Position Then Exit Sub
If VSFlexGrid1.ColKey(Position) <> "" Then
While Left(VSFlexGrid1.ColKey(Col), 1) = Left(VSFlexGrid1.ColKey(Position), 1)
VSFlexGrid1.ColPosition(Col) = Position - 1
Wend
For idx = VSFlexGrid1.Cols - 1 To Col + 1 Step -1
If Left(VSFlexGrid1.ColKey(idx), 1) = Left(VSFlexGrid1.ColKey(Position), 1) Then
idxPosition = idx
Exit For
End If
Next
If idxPosition <> 0 Then
While Left(VSFlexGrid1.ColKey(idx), 1) = Left(VSFlexGrid1.ColKey(Position), 1)
VSFlexGrid1.ColPosition(idxPosition) = Position + 1
Wend
End If
End If
End SubPrivate Sub VSFlexGrid1_BeforeMoveColumn(ByVal Col As Long, Position As Long)
If VSFlexGrid1.ColKey(Position) <> "" Then
If Right(VSFlexGrid1.ColKey(Position), Len(VSFlexGrid1.ColKey(Position)) - 1) > 1 Then
Position = Col
End If
End If
End Sub
Private Sub VSFlexGrid1_AfterMoveColumn(ByVal Col As Long, Position As Long)
Dim idx As Integer
Dim idxPosition As Integer
Dim idxCount As Integer
If Col = Position Then Exit Sub
If VSFlexGrid1.ColKey(Position) <> "" Then
While Left(VSFlexGrid1.ColKey(Col), 1) = Left(VSFlexGrid1.ColKey(Position), 1)
VSFlexGrid1.ColPosition(Col) = Position
idxCount = idxCount + 1
Wend
For idx = VSFlexGrid1.Cols - 1 To Col + 1 Step -1
If Left(VSFlexGrid1.ColKey(idx), 1) = Left(VSFlexGrid1.ColKey(Position), 1) Then
idxPosition = idx
Exit For
End If
Next
If idxPosition <> 0 Then
While Left(VSFlexGrid1.ColKey(idx), 1) = Left(VSFlexGrid1.ColKey(Position), 1)
VSFlexGrid1.ColPosition(idxPosition) = Position + idxCount + 1
Wend
End If
End If
End Sub