本帖最后由 ahljxwy 于 2010-12-30 17:13:54 编辑

解决方案 »

  1.   

    我想不到好方法,因为移动时,是移动一个趔,没有考虑到merge的。
    想上次的建议一样,用row。然后subtotal,一般的报表多是横向显示的。
      

  2.   

    瞎写了点。
    看看
    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
      

  3.   

    托不动是因为没有托到一个group的最前面。
      

  4.   

    修改了嗲,和拖动没关系,是托动非第一个列在一个组中。
    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