这个问题困扰了我半年之久,一直没到得到满意的答案我要在MSHFlexGrid这后一行实行统计
效果如下:

解决方案 »

  1.   

    这个容易
    用个PICTREBOX自己画
    300分俺再也不相信了
      

  2.   

    http://topic.csdn.net/u/20100628/23/6C047159-30CB-4364-A7DF-1939099BF1AB.html猴哥曾经给了我一个代码
    但是全屏显示的时候,不能控件显示最后一行
    Dim h As IntegerPrivate Sub Form_Load()
       
       With MSHFlexGrid1
           .Rows = 14: .Cols = 8
           .Move 0, 0
            
            Dim i As Integer, j As Integer, he As String, r As Integer, N As Integer
           .FixedCols = 1: .FixedRows = 1
            he = "|^xxx1|^xxx2|^xxx3|^xxx4|^xxx5|^xxx6|^xxx7|^xxx8"
           .FormatString = he
           .RowHeight(-1) = 400: .ColWidth(-1) = 800: .ColWidth(0) = 200
           .Height = .RowHeight(1) * 5 + 290 + 20
           .Width = .ColWidth(1) * (.Cols - 2) + 490
            
            For i = 1 To .Rows - 2
                For j = 1 To .Cols - 1
                    If j = 1 Then
                      .TextMatrix(i, j) = "name" & i
                    Else
                      .TextMatrix(i, j) = i + j
                    End If
                Next
            Next
           .Row = i: .Col = 1: .Text = "合计"
            For j = 1 To .Cols - 1
                If j > 1 Then
                   For r = 1 To .Rows - 2
                       N = N + .TextMatrix(r, j)
                   Next
                  .TextMatrix(r, j) = N
                End If
               .Col = j: .CellAlignment = 4
               .CellBackColor = &H80FFFF:
            Next
           .RowPosition(i) = (.Height - 290) \ .RowHeight(1) - 1
            h = (.Height - 290) \ .RowHeight(1) - 1
      End With
      
      
    End SubPrivate Sub MSHFlexGrid1_Scroll()
       With MSHFlexGrid1
           .RowPosition(h) = .TopRow + 3
            h = .TopRow + 3
       End WithEnd Sub
      

  3.   

    能不能用两个grid拼一下,底下的那个不要边框
      

  4.   

    我有现成的例子
    不过是一个grid
    取数据的时候增加一行作为合计,然后底色变黄
    楼主看能对付你的需求吗
      

  5.   


    发到我邮箱
    [email protected]
      

  6.   


        With Me.fg
           .Rows = .Rows + 1
            Dim r&, c&, tot!
            For c = 1 To .Cols - 1
                tot = 0
                For r = 1 To .Rows - 2
                    tot = tot + Val(.TextMatrix(r, c))
                Next
                .TextMatrix(r, c) = tot
            Next
                .TextMatrix(.Rows - 1, 0) = "合  计"
                .FixedAlignment(i) = 4
        End With直接在数据的后一行加合计
      

  7.   

    不是问过了吗?
    回去改改就可以了
    不美观的话可以用text自己排,要打印的话可以换用报表。随便看看网上的项目是怎么做的。这类的应用很多~
      

  8.   

    哥可以给你提供一个控件,巨牛x的,有兴趣联系我下面有个Total其实,你可以使用sql语句的with rollup来拼接好sql,显示汇总出来就行了
    我们的报表都是这样做的,哈哈
      

  9.   

    一个exe都不敢安装
    谈何学东西,更不懂cubex了
      

  10.   


    Option Explicit
    Dim aa As Boolean
    Dim BottomFixRow As Integer
    Dim iRow As Integer                                        '显示行数Private Sub Form_Load()
        Dim i As Integer, j As Integer    iRow = 18
        With fg
            .Rows = 50
            .Cols = 20
            For i = 0 To .Rows - 1
                For j = 0 To .Cols - 1
                    .TextMatrix(i, j) = j + i + 1
                Next
            Next        .TextMatrix(.Rows - 1, 0) = "合计:"
            For i = 1 To .Cols - 1
                For j = 1 To .Cols - 1
                    .TextMatrix(.Rows - 1, i) = .TextMatrix(.Rows - 1, i) + Val(.TextMatrix(j, i))
                Next j
                .Row = .Rows - 1
                .Col = i - 1
                .CellBackColor = .BackColorFixed
            Next
            .Height = .RowHeight(0) * (iRow + 4) - .RowHeight(0) / 2
            .TopRow = 1
        End With
        aa = False
        Call fg_Scroll
    End SubPrivate Sub fg_Scroll()
        With fg
            If aa = True Then
                .RowPosition(BottomFixRow) = .Rows - 1
            End If
            .RowPosition(.Rows - 1) = iRow + .TopRow
            BottomFixRow = iRow + .TopRow
            aa = True
        End With
    End Sub
      

  11.   

    用picturebox和两个mshflexgrid组合,再加一条线就可以做出来例子发到你的邮箱了
      

  12.   

    谢谢你的代码,我正在研究一下,全屏的时候怎么用你的代码,我的意思是按用户屏幕大小改变MSHFlexGrid1的大写。
      

  13.   

    底部有一行白色
    全屏按用户屏幕大小改变MSHFlexGrid1的大小的时候,iRow的值无法确定。
      

  14.   

    使用MSHFlexGrid这个控件的合并功能,差不多能达到这个要求
    ms是一个MSHFlexGrid,固定列是0,或者1都没有问题
    Option ExplicitPrivate Sub Command1_Click()
    Dim i, j
    For i = 0 To 4
    For j = 0 To 3
        Ms.Col = j
        Ms.Row = i
        Ms.Text = i * j
    Next j, i
    Ms.MergeCells = 1
    Ms.MergeRow(5) = True
    For j = 0 To 3
        Ms.Col = j
        Ms.Row = 5
        Ms.Text = " "
    Next j
    For j = 0 To 3
        Ms.Col = j
        Ms.Row = 6
        Ms.Text = "-"
    Next j
    End Sub
      

  15.   

    MSHFlexGrid控件最后自己添加2个单独的行,一个用于显示空行,一个用于显示合计,自己把需要的数字加起来,在写到MSHFlexGrid控件的对应格子就行了
      

  16.   


    Option Explicit
    Dim aa As Boolean
    Dim BottomFixRow As Integer
    Dim iRow, indexRow As Integer                                       '显示行数Private Sub Form_Load()
        Dim i As Integer, j As Integer
        Call ResizeInit(Me)
        With fg
            .Rows = 50
            .Cols = 20
            For i = 0 To .Rows - 1
                For j = 0 To .Cols - 1
                    .TextMatrix(i, j) = j + i + 1
                Next
            Next
        End With
    End SubPrivate Sub fg_Scroll()
        With fg
            If aa = True Then
                .RowPosition(BottomFixRow) = .Rows - 1
            End If
            .RowPosition(.Rows - 1) = iRow + .TopRow
            BottomFixRow = iRow + .TopRow
            aa = True
        End With
    End Sub
    Private Sub Form_Resize()
        Call ResizeForm(Me)                                    '确保窗体改变时控件随之改变
        Dim i As Integer, j As Integer    If Val(indexRow) <> 0 Then fg.RemoveItem indexRow
        With fg
            .Rows = .Rows + 1
            .TextMatrix(.Rows - 1, 0) = "合计:"
            .RowHeight(.Rows - 1) = .RowHeight(.Rows - 1) + 80
            For i = 1 To .Cols - 1
                For j = 1 To .Cols - 1
                    .TextMatrix(.Rows - 1, i) = Val(.TextMatrix(.Rows - 1, i)) + Val(.TextMatrix(j, i))
                Next j
                .Row = .Rows - 1
                .Col = i - 1
                .CellBackColor = .BackColorFixed
            Next
            iRow = (.Height + .RowHeight(0) / 2) / .RowHeight(0) - 4
            .TopRow = 1
        End With
        aa = False
        Call fg_Scroll
        indexRow = iRow + fg.TopRow
    End Sub底部有一行白色  --设置合计行高遮住后面的
    全屏按用户屏幕大小改变MSHFlexGrid1的大小的时候,iRow的值无法确定。 --根据控件高度得到行数代码给了,再不知道变通你就不用做这个了
      

  17.   

    你这个问题有个简单而通用的方法解决,没有必要在控件上下功夫。具体就是用select语句取明细数后再union合计数据就可以了。例如,select a1,a2,a3 from tb union select sum(a1),sum(a2),sum(a3) from tb
      

  18.   


    改变大小吗?left top height width不就可以解决