2013-03-27 2 views
1

У меня есть flexgrid с группировкой и .subtotal этой группировкой. Все столбцы, кроме одного, являются числовыми, тот, который отсутствует, находится в формате «x/y», например. '1/5', т. Е. 1 из 5 предметов.вручную введите значение промежуточного итога в flexbrid vb6

если сделать .Subtotal с flexSTSum он подводит итог первого номера в паре, то есть в приведенном выше примере было бы подвести итоги 1 в виде десятичной дроби и показать 1.00 в строке субтотальным

Сначала Я попытался найти способ суммирования в другом столбце, то есть я мог бы поместить отдельные значения в отдельные столбцы, дать им .Width 0 и суммировать их в столбец .Subtotal первого столбца, но я не могу найти способ для этого.

И даже если я найду способ сделать это, я хочу иметь возможность настраивать формат .Subtotal, поэтому он выглядит как «3/17», т. Е. Промежуточный итог «1/5» и «2/12» до «3/17» в промежуточной строке.

Если я не могу выделить промежуточный итог другого столбца, я задался вопросом, могу ли я получить доступ к строке промежуточного итога и вручную ввести значение промежуточного итога '3/17', но даже это кажется недоступным.

Мой вопрос в том, есть ли способ достичь этого?

ответ

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 

Это загрузит сетку с некоторыми значениями, а при нажатии на сетке, промежуточные итоги будут вычисляться и разливается в последней строке.

Смежные вопросы