Devextreme DataGrid Angular 中 dxi-group-item 的替代 getTotalSummaryValue 函数是什么?

问题描述 投票:0回答:1

我在 Devextreme 中有一个简单的数据网格。

我的网格是可分组的,我的代码如下:

<dx-data-grid [dataSource]="dataSource"
              [columnAutoWidth]="true"
              keyExpr="taskTicketActionId"
              showBorders="true"
              height="auto"
              [scrolling]="{useNative:true}"
              [allowColumnReordering]="true"
              noDataText="{{l('NoData')}}"
              (onRowClick)="onRowClick($event)"
              (onToolbarPreparing)="onToolbarPreparing($event)"
              [rowAlternationEnabled]="true">
    <dxo-state-storing [enabled]="true" type="localStorage" storageKey="devextremeAnalyzingPlanFactDataGridStorage"></dxo-state-storing>

    <dxo-column-chooser [enabled]="true"
                        [title]="l('HiddenColumns')"
                        [emptyPanelText]="l('DragColumnHere')">
    </dxo-column-chooser>

    <dxo-group-panel [visible]="true"
                     [emptyPanelText]="l('DragColumnHereForGrouping')">
    </dxo-group-panel>

    <dxo-grouping [autoExpandAll]="false"
                  [allowCollapsing]="true"
                  expandMode="buttonClick">
    </dxo-grouping>
    <dxo-summary [calculateCustomSummary]="calculateMySummary">
        <dxi-group-item column="target"
                        summaryType="sum"
                        name="myTarget"
                        [valueFormat]="{type:'fixedPoint',precision:2}"
                        displayFormat="{0}"
                        [showInGroupFooter]="true">
        </dxi-group-item>
        <dxi-group-item column="result"
                        name="myResult"
                        summaryType="sum"
                        [valueFormat]="{type:'fixedPoint',precision:2}"
                        displayFormat="{0}"
                        [showInGroupFooter]="true">
        </dxi-group-item>
        <dxi-group-item column="percent"
                        summaryType="custom"
                        name="myPercent"
                        [valueFormat]="{type:'fixedPoint',precision:2}"
                        displayFormat="{0}"
                        [alignByColumn]="true"
                        [showInGroupFooter]="true">
        </dxi-group-item>
    </dxo-summary>

    <dxi-sort-by-group-summary-info summaryItem="count"></dxi-sort-by-group-summary-info>

    <dxo-pager [showPageSizeSelector]="true"
               [allowedPageSizes]="devExtremeDatatableHelper.predefinedRecordsCountPerPage"
               [showInfo]="true"
               [visible]="true"
               infoText="{2} {{l('Plan')}}">
    </dxo-pager>

    <dxi-column dataField="itemGroup"
                caption="{{l('ItemGroup')}}"
                [allowSorting]="true">
    </dxi-column>
    <dxi-column [allowGrouping]="true" dataField="lineNr"
                caption="{{l('LineNr')}}">
    </dxi-column>
    <dxi-column dataField="firmName"
                [visible]="false"
                caption="{{l('Firm')}}">
    </dxi-column>

    <dxi-column dataField="groupSpecialCode"
                [visible]="false"
                caption="{{l('GroupSpecialCode1')}}">
    </dxi-column>
    <dxi-column dataField="groupSpecialCode2"
                [visible]="false"
                caption="{{l('GroupSpecialCode2')}}">
    </dxi-column>
    <dxi-column dataField="groupSpecialCode3"
                [visible]="false"
                caption="{{l('GroupSpecialCode3')}}">
    </dxi-column>

    <dxi-column dataField="username"
                caption="{{l('Salesman')}}">
    </dxi-column>
    <dxi-column dataField="salesPersonHeadName"
                caption="{{l('SalesPersonHead')}}">
    </dxi-column>
    <dxi-column dataField="saleManagerName"
                caption="{{l('SaleManager')}}">
    </dxi-column>

    <dxi-column [allowGrouping]="false" dataField="target"
                [format]="{type:'fixedPoint',precision:2}"
                caption="{{l('Target')}}">
    </dxi-column>
    <dxi-column [allowGrouping]="false" dataField="result"
                [format]="{type:'fixedPoint',precision:2}"
                caption="{{l('Result')}}">
    </dxi-column>
    <dxi-column [allowGrouping]="false" dataField="percent"
                [format]="{type:'fixedPoint',precision:2}" alignment="right"
                caption="{{l('AmountPercentDecember')}}">
    </dxi-column>

</dx-data-grid>

我的自定义摘要函数如下:

calculateMySummary(options) {
    if (options.name == 'myPercent') {

       let totalResult = options.component.getTotalSummaryValue('myResult'); // always returns undefined

       let totalTarget = options.component.getTotalSummaryValue('myTarget'); // always returns undefined

       options.totalValue = (totalResult / totalTarget) * 100;
    }
}

我希望百分比为Percent = (结果/目标) * 100,但我不知道如何实现这一点。因为

getTotalSummmaryValue
函数仅适用于 dxi-total-item,但我的组件是 dxi-group-item 并且
getTotalSummmaryValue
总是为 dxi-group-item 返回未定义。

dxi-group-itemgetTotalSummmaryValue 替代方案是什么?谢谢

enter image description here

typescript devextreme devextreme-angular
1个回答
0
投票

dxi-group-item 上,您可以使用打开 options.summaryProcess 来计算totalValue,例如:

calculateMySummary(options) {

 if (options.name == 'myPercent') {
      switch (options.summaryProcess) {
        case 'start':
          // Initializing "totalValue" here
          options.totalValue = 0;

          break;
        case 'calculate':
          // Modifying "totalValue" here

          options.totalValue = (options.value.totalResult / options.value.totalTarget) * 100

        case 'finalize':
          // Assigning the final value to "totalValue" here
          const pipe = new DecimalPipe('he');

          options.totalValue =
            pipe.transform(options.totalValue, '1.0-0') + ' %'; // options.totalValue + ' %';
          break;
      }
    }
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.