1

我有一个带有分组的 flexgrid,以及该分组的 .subtotal。除了一列之外的所有列都是数字的,不是数字的列的格式为“x/y”,例如“1/5”,即提供的 5 个项目中的 1 个。

如果我使用 flexSTSum 执行 .Subtotal ,它将对中的第一个数字求和,即在上面的示例中,它将 1 作为小数求和并在小计行中显示 1.00

起初我试图找到一种在另一列上求和的方法,即我可以将单个值放入单独的列中,给它们一个 .Width 0 并将它们相加到第一列的 .Subtotal 列中,但我找不到一种方法来做到这一点。

即使我确实找到了一种方法,我也希望能够自定义格式化 .Subtotal,因此它显示为“3/17”,即“1/5”和“2/12”小计到“3/” 17' 在小计行中。

如果我不能对另一列进行小计,我想知道是否可以自定义访问小计行并手动输入“3/17”的小计值,但即使这样似乎也不可用。

我的问题是,有没有办法做到这一点?

4

1 回答 1

0

我假设您使用的是我从未使用过的 VideoSoft FlexGrid,所以我无法帮助您了解该控件的具体方法。

不过,您可以使用标准的 MSFlexGrid 控件轻松完成此操作,并且您也可以使用 VideoSoft FlexGrid 进行相同操作。

查看以下示例项目:

'1 form with :
'    1 msflexgrid control : name=MSFlexGrid1
Option Explicit

Private Sub Form_Load()
  Dim lngRow As Long, lngCol As Long
  With MSFlexGrid1
    .Rows = 10
    .Cols = 4
    .FixedRows = 0
    .FixedCols = 0
    For lngRow = 0 To .Rows - 2
      For lngCol = 0 To .Cols - 2
        .TextMatrix(lngRow, lngCol) = CStr(100 * lngRow + lngCol)
      Next lngCol
      .TextMatrix(lngRow, .Cols - 1) = CStr(lngRow) & "/" & CStr(lngRow * lngRow)
    Next lngRow
  End With 'MSFlexGrid1
End Sub

Private Sub Form_Resize()
  MSFlexGrid1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub

Private Sub MSFlexGrid1_Click()
  Dim lngCol As Long
  'calculate subtotals
  With MSFlexGrid1
    For lngCol = 0 To .Cols - 2
      .TextMatrix(.Rows - 1, lngCol) = CStr(GetTotal(lngCol))
    Next lngCol
    .TextMatrix(.Rows - 1, .Cols - 1) = GetTotalSpecial(.Cols - 1)
  End With 'MSFlexGrid1
End Sub

Private Function GetTotal(lngCol As Long) As Long
  Dim lngRow As Long
  Dim lngTotal As Long
  With MSFlexGrid1
    lngTotal = 0
    For lngRow = 0 To .Rows - 2
      lngTotal = lngTotal + Val(.TextMatrix(lngRow, lngCol))
    Next lngRow
  End With 'MSFlexGrid1
  GetTotal = lngTotal
End Function

Private Function GetTotalSpecial(lngCol As Long) As String
  Dim lngRow As Long
  Dim lngTotal1 As Long, lngTotal2 As Long
  Dim strPart() As String
  With MSFlexGrid1
    lngTotal1 = 0
    lngTotal2 = 0
    For lngRow = 0 To .Rows - 2
      strPart = Split(.TextMatrix(lngRow, .Cols - 1), "/")
      If UBound(strPart) = 1 Then
        lngTotal1 = lngTotal1 + Val(strPart(0))
        lngTotal2 = lngTotal2 + Val(strPart(1))
      End If
    Next lngRow
  End With 'MSFlexGrid1
  GetTotalSpecial = CStr(lngTotal1) & "/" & CStr(lngTotal2)
End Function

它将加载带有一些值的网格,当您单击网格时,将计算小计并将其填充到最后一行。

于 2013-03-27T06:52:28.657 回答