React 칼럼 요약
Ignite UI for React 열 요약을 지원합니다. 어떤 경우에는 최종 사용자가 그리드에 표시된 데이터 양에 압도당하여 종종 데이터 요약을 찾고 있을 수 있습니다. 최종 사용자는 특정 열의 데이터에서 추가 정보를 얻고 싶어할 수도 있습니다. 요약은 최종 사용자가 이를 달성하는 데 도움이 되며 summaryScope
속성을 설정하여 이를 활성화할 수 있습니다.
React Column Summaries Example
export class DataGridSharedData {
public static getEmployees(count?: number ): any [] {
if (count === undefined ) {
count = 250 ;
}
const employees: any [] = [];
let maleCount: number = 0 ;
let femaleCount: number = 0 ;
for (let i = 0 ; i < count; i++) {
const age: number = Math .round(this .getRandomNumber(20 , 40 ));
const gender: string = this .getRandomGender();
const firstName: string = this .getRandomNameFirst(gender);
const lastName: string = this .getRandomNameLast();
const street: string = this .getRandomStreet();
const country: string = this .getRandomItem(this .countries);
const city: string = this .getRandomCity(country);
const generation = Math .floor(age / 10 ) * 10 + "s" ;
const email: string = firstName.toLowerCase() + "@" + this .getRandomItem(this .emails);
const website: string = firstName.toLowerCase() + "-" + this .getRandomItem(this .websites);
let photoPath: any ;
if (gender === "male" ) {
maleCount++;
if (maleCount > 26 ) {
maleCount = 1 ;
}
photoPath = this .getPhotoMale(maleCount);
}
else {
femaleCount++;
if (femaleCount > 24 ) {
femaleCount = 1 ;
}
photoPath = this .getPhotoFemale(femaleCount);
}
let person: any = {};
person.Address = street + "," + city;
person.Age = age;
person.Birthday = this .getBirthday(age);
person.City = city;
person.Country = country;
person.CountryFlag = this .getCountryFlag(country);
person.Email = email;
person.FirstName = firstName;
person.Gender = this .getGenderPhoto(gender);
person.Generation = generation;
person.ID = this .pad(i + 1 , 5 );
person.LastName = lastName;
person.Name = firstName + " " + lastName;
person.Phone = this .getRandomPhone();
person.Photo = photoPath;
person.Street = street;
person.Salary = this .getRandomNumber(40 , 200 ) * 1000 ;
person.Sales = this .getRandomNumber(200 , 980 ) * 1000 ;
person.Website = website;
person.Productivity = this .getProductivity();
if (person.Salary < 50000 ) {
person.Income = "Low" ;
} else if (person.Salary < 100000 ) {
person.Income = "Average" ;
} else {
person.Income = "High" ;
}
employees.push(person);
}
return employees;
}
public static getProductivity(weekCount?: number ): any [] {
if (weekCount === undefined ) {
weekCount = 52 ;
}
const productivity: any [] = [];
for (let w = 0 ; w < weekCount; w++) {
const value = this .getRandomNumber(-50 , 50 );
productivity.push({Value : value, Week : w});
}
return productivity;
}
public static getSales(count?: number ): any [] {
if (count === undefined ) {
count = 250 ;
}
const names: string [] = [
"Intel CPU" , "AMD CPU" ,
"Intel Motherboard" , "AMD Motherboard" , "NVIDIA Motherboard" ,
"NVIDIA GPU" , "GIGABYTE GPU" , "Asus GPU" , "AMD GPU" , "MSI GPU" ,
"Corsair Memory" , "Patriot Memory" , "Skill Memory" ,
"Samsung HDD" , "WD HDD" , "Seagate HDD" , "Intel HDD" ,
"Samsung SSD" , "WD SSD" , "Seagate SSD" , "Intel SSD" ,
"Samsung Monitor" , "Asus Monitor" , "LG Monitor" , "HP Monitor" ];
const countries: string [] = ["USA" , "UK" , "France" , "Canada" , "Poland" , "Japan" , "Germany" ];
const status: string [] = ["Packing" , "Shipped" , "Delivered" ];
const sales: any [] = [];
for (let i = 0 ; i < count; i++) {
const price = this .getRandomNumber(100 , 900 );
const items = this .getRandomNumber(10 , 80 );
const value = price * items;
const margin = this .getRandomNumber(3 , 10 );
const profit = Math .round((price * margin / 100 ) * items);
const country = this .getRandomItem(countries);
sales.push({
BundlePrice : price,
ProductPrice : price,
Margin : margin,
OrderDate : this .getRandomDate(new Date (2012 , 0 , 1 ), new Date ()),
OrderItems : items,
OrderValue : value,
ProductID : 1001 + i,
ProductName : this .getRandomItem(names),
Profit : profit,
Countries : country,
CountryFlag : this .getCountryFlag(country),
Status : this .getRandomItem(status)
});
}
return sales;
}
public static getHouses(count?: number ): any [] {
if (count === undefined ) {
count = 250 ;
}
const houses: any [] = [];
const property: string [] = [ "Townhouse" , "Single" , "Condo" , "Villa" ];
const emails: string [] = [ "estates.com" , "remax.com" , "zillow.com" , "realtor.com" , "coldwell.com" ];
const countries: string [] = ["USA" , "UK" , "France" , "Canada" , "Poland" , "Japan" , "Germany" ];
for (let i = 0 ; i < count; i++) {
const year: number = this .getRandomNumber(1950 , 2015 );
const age: number = 2020 - year;
const gender: string = this .getRandomGender();
const firstName: string = this .getRandomNameFirst(gender);
const lastName: string = this .getRandomNameLast();
const initials = firstName.substr(0 , 1 ).toLowerCase();
const email: string = initials + lastName.toLowerCase() + "@" + this .getRandomItem(emails);
const street: string = this .getRandomStreet();
const country: string = this .getRandomItem(countries);
const city: string = this .getRandomCity(country);
houses.push({
Address : street + "," + city,
Age : age,
Agent : firstName + " " + lastName,
Area : this .getRandomNumber(50 , 300 ),
Baths : this .getRandomNumber(1 , 3 ),
Built : year,
City : city,
Country : country,
CountryFlag : this .getCountryFlag(country),
Email : email,
ID : this .pad(i + 1 , 5 ),
Phone : this .getRandomPhone(),
Price : this .getRandomNumber(210 , 900 ) * 1000 ,
Property : this .getRandomItem(property),
Rooms : this .getRandomNumber(2 , 5 ),
SaleDate : this .getRandomDate(new Date (2015 , 0 , 1 ), new Date ()),
Street : street,
});
}
return houses;
}
private static websites: string [] = [ ".com" , ".gov" , ".edu" , ".org" ];
private static emails: string [] = [ "gmail.com" , "yahoo.com" , "twitter.com" ];
private static genders: string [] = ["male" , "female" ];
private static maleNames: string [] = ["Kyle" , "Oscar" , "Ralph" , "Mike" , "Bill" , "Frank" , "Howard" , "Jack" , "Larry" , "Pete" , "Steve" , "Vince" , "Mark" , "Alex" , "Max" , "Brian" , "Chris" , "Andrew" , "Martin" , "Mike" , "Steve" , "Glenn" , "Bruce" ];
private static femaleNames: string [] = ["Gina" , "Irene" , "Katie" , "Brenda" , "Casey" , "Fiona" , "Holly" , "Kate" , "Liz" , "Pamela" , "Nelly" , "Marisa" , "Monica" , "Anna" , "Jessica" , "Sofia" , "Isabella" , "Margo" , "Jane" , "Audrey" , "Sally" , "Melanie" , "Greta" , "Aurora" , "Sally" ];
private static lastNames: string [] = ["Adams" , "Crowley" , "Ellis" , "Martinez" , "Irvine" , "Maxwell" , "Clark" , "Owens" , "Rooney" , "Lincoln" , "Thomas" , "Spacey" , "MOrgan" , "King" , "Newton" , "Fitzgerald" , "Holmes" , "Jefferson" , "Landry" , "Berry" , "Perez" , "Spencer" , "Starr" , "Carter" , "Edwards" , "Stark" , "Johnson" , "Fitz" , "Chief" , "Blanc" , "Perry" , "Stone" , "Williams" , "Lane" , "Jobs" , "Adams" , "Power" , "Tesla" ];
private static countries: string [] = ["USA" , "UK" , "France" , "Canada" , "Poland" ];
private static citiesUS: string [] = ["New York" , "Los Angeles" , "Miami" , "San Francisco" , "San Diego" , "Las Vegas" ];
private static citiesUK: string [] = ["London" , "Liverpool" , "Manchester" ];
private static citiesFR: string [] = ["Paris" , "Marseille" , "Lyon" ];
private static citiesCA: string [] = ["Toronto" , "Vancouver" , "Montreal" ];
private static citiesPL: string [] = ["Krakow" , "Warsaw" , "Wroclaw" , "Gdansk" ];
private static citiesJP: string [] = ["Tokyo" , "Osaka" , "Kyoto" , "Yokohama" ];
private static citiesGR: string [] = ["Berlin" , "Bonn" , "Cologne" , "Munich" , "Hamburg" ];
private static roadSuffixes: string [] = ["Road" , "Street" , "Way" ];
private static roadNames: string [] = ["Main" , "Garden" , "Broad" , "Oak" , "Cedar" , "Park" , "Pine" , "Elm" , "Market" , "Hill" ];
private static getRandomNumber(min: number , max : number ): number {
return Math .round(min + Math .random() * (max - min));
}
private static getRandomItem(array: any []): any {
const index = Math .round(this .getRandomNumber(0 , array.length - 1 ));
return array[index];
}
private static getRandomDate(start: Date , end : Date ): Date {
return new Date (start.getTime() + Math .random() * (end.getTime() - start.getTime()));
}
private static getRandomPhone(): string {
const phoneCode = this .getRandomNumber(100 , 900 );
const phoneNum1 = this .getRandomNumber(100 , 900 );
const phoneNum2 = this .getRandomNumber(1000 , 9000 );
const phone = phoneCode + "-" + phoneNum1 + "-" + phoneNum2;
return phone;
}
private static getRandomGender(): string {
return this .getRandomItem(this .genders);
}
private static getRandomNameLast(): string {
return this .getRandomItem(this .lastNames);
}
private static getRandomNameFirst(gender: string ): string {
if (gender === "male" ) {
return this .getRandomItem(this .maleNames);
}
else {
return this .getRandomItem(this .femaleNames);
}
}
private static getRandomCity(country: string ): string {
if (country === "Canada" ) {
return this .getRandomItem(this .citiesCA);
} else if (country === "France" ) {
return this .getRandomItem(this .citiesFR);
} else if (country === "Poland" ) {
return this .getRandomItem(this .citiesPL);
} else if (country === "USA" ) {
return this .getRandomItem(this .citiesUS);
} else if (country === "Japan" ) {
return this .getRandomItem(this .citiesJP);
} else if (country === "Germany" ) {
return this .getRandomItem(this .citiesGR);
} else {
return this .getRandomItem(this .citiesUK);
}
}
private static getRandomStreet(): string {
const num = Math .round(this .getRandomNumber(100 , 300 )).toString();
const road = this .getRandomItem(this .roadNames);
const suffix = this .getRandomItem(this .roadSuffixes);
return num + " " + road + " " + suffix;
}
private static getBirthday(age: number ): Date {
const today: Date = new Date ();
const year: number = today.getFullYear() - age;
const month: number = this .getRandomNumber(0 , 8 );
const day: number = this .getRandomNumber(10 , 27 );
return new Date (year, month, day);
}
private static getPhotoMale(id: number ): string {
return 'https://static.infragistics.com/xplatform/images/people//GUY' + this .pad(id, 2 ) + '.png' ;
}
private static getPhotoFemale(id: number ): string {
return 'https://static.infragistics.com/xplatform/images/people/GIRL' + this .pad(id, 2 ) + '.png' ;
}
private static getGenderPhoto(gender: string ): string {
return 'https://static.infragistics.com/xplatform/images/genders/' + gender + '.png' ;
}
private static getCountryFlag(country: string ): string {
return 'https://static.infragistics.com/xplatform/images/flags/' + country + '.png' ;
}
private static pad(num: number , size : number ): string {
let s = num + "" ;
while (s.length < size) {
s = "0" + s;
}
return s;
}
}
ts コピー import React from 'react' ;
import ReactDOM from 'react-dom/client' ;
import './index.css' ;
import { DataGridSharedData } from './DataGridSharedData' ;
import { IgrDataGridModule } from "@infragistics/igniteui-react-data-grids" ;
import { IgrDataGrid } from "@infragistics/igniteui-react-data-grids" ;
import { IgrColumnGroupDescription } from "@infragistics/igniteui-react-data-grids" ;
import { IgrColumnSummaryDescription } from "@infragistics/igniteui-react-data-grids"
import { IgrProvideCalculatorEventArgs } from "@infragistics/igniteui-react-core" ;
import { IgrTextColumn } from "@infragistics/igniteui-react-data-grids" ;
import { IgrNumericColumn } from "@infragistics/igniteui-react-data-grids" ;
import { IgrDateTimeColumn } from "@infragistics/igniteui-react-data-grids" ;
import { DataSourceSummaryOperand, SummaryCalculator, DefaultSummaryResult, IDataSource, ISummaryResult } from "@infragistics/igniteui-react-core" ;
import { IgrGridColumnOptionsModule } from "@infragistics/igniteui-react-data-grids" ;
IgrDataGridModule.register();
IgrGridColumnOptionsModule.register();
export default class DataGridColumnSummaries extends React.Component <any, any> {
public data: any [];
public grid: IgrDataGrid;
constructor (props: any ) {
super (props);
this .state = { componentVisible: true , isGroupCollapsible: true , summaryScope: "Root" , groupSummaryDisplayMode: "RowBottom" }
this .data = DataGridSharedData.getSales(50 );
}
public render (): JSX .Element {
return (
<div className ="container sample" >
<div className ="options horizontal" >
<label className ="options-label" style ={{ width: "150px " }}> Summary Scope:</label >
<select className ="options-select" style ={{ width: "100px " }} defaultValue ="Root" onChange ={this.onSummaryScopeChanging} >
<option > Root</option >
<option > Groups</option >
<option > Both</option >
<option > None</option >
</select >
<label className ="options-label" style ={{ width: "100 " }}> Group Summary Display Mode:</label >
<select className ="options-select" style ={{ width: "110px " }} defaultValue ="RowBottom" onChange ={this.onGroupSummaryDisplayModeChanging} >
<option > List</option >
<option > Cells</option >
<option > RowTop</option >
<option > RowBottom</option >
<option > None</option >
</select >
</div >
<IgrDataGrid
ref ={this.onGridRef}
summaryScope = {this.state.summaryScope}
groupSummaryDisplayMode = {this.state.groupSummaryDisplayMode}
height ="calc(100% - 40px)"
width ="100%"
autoGenerateColumns ="false"
isGroupCollapsable ={this.state.isGroupCollapsible}
groupHeaderDisplayMode = "combined"
isColumnOptionsEnabled ="true"
dataSource ={this.data} >
<IgrNumericColumn field ="ProductID" width ="*> 120 " headerText=" ID" horizontalAlignment=" center" />
<IgrTextColumn field=" ProductName" width=" *>130 " headerText=" Product"/>
<IgrNumericColumn positivePrefix=" $" field=" BundlePrice" width=" *>120 " showGroupingSeparator=" true " headerText=" Price" />
<IgrNumericColumn field=" OrderItems" width=" *>140 " headerText=" Orders"/>
<IgrNumericColumn field=" OrderValue" width=" *>160 " showGroupingSeparator=" true " headerText=" Order Totals"
positivePrefix=" $" />
<IgrDateTimeColumn field=" OrderDate" width=" *>150 " headerText=" Order Date"
horizontalAlignment=" right" />
<IgrNumericColumn field=" Profit" width=" *>140 " showGroupingSeparator=" true " headerText=" Profit"
positivePrefix=" $" />
<IgrTextColumn field=" Countries" width=" *>170 " headerText=" Ship Country"/>
</IgrDataGrid>
</div>
);
}
public onSummaryScopeChanging = (e: any) => {
this.grid.summaryScope = e.target.value;
this.setState( {summaryScope: e.target.value} );
}
public onGroupSummaryDisplayModeChanging = (e: any) => {
this.grid.groupSummaryDisplayMode = e.target.value;
this.setState( {groupSummaryDisplayMode: e.target.value} );
}
public onGridRef = (grid: IgrDataGrid) => {
if (!grid) { return; }
this.grid = grid;
this.grid.actualDataSource.isSectionExpandedDefault = true;
}
public componentDidMount() {
window.addEventListener('load', this.onLoad);
}
public onLoad = () => {
const productGroup = new IgrColumnGroupDescription();
productGroup.field = " ProductName";
productGroup.displayName = " ProductName";
this.grid.groupDescriptions.add(productGroup);
const productCount = new IgrColumnSummaryDescription();
productCount.field = " ProductName";
productCount.operand = DataSourceSummaryOperand.Count;
this.grid.summaryDescriptions.add(productCount);
const priceMin = new IgrColumnSummaryDescription();
priceMin.field = " BundlePrice";
priceMin.operand = DataSourceSummaryOperand.Min;
priceMin.formatOverride = new Intl.NumberFormat('en-EN', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0 });
this.grid.summaryDescriptions.add(priceMin);
const priceMax = new IgrColumnSummaryDescription();
priceMax.field = " BundlePrice";
priceMax.operand = DataSourceSummaryOperand.Max;
priceMax.formatOverride = new Intl.NumberFormat('en-EN', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0 });
this.grid.summaryDescriptions.add(priceMax);
const orderSum = new IgrColumnSummaryDescription();
orderSum.field = " OrderItems";
orderSum.operand = DataSourceSummaryOperand.Sum;
this.grid.summaryDescriptions.add(orderSum);
const orderValueSum = new IgrColumnSummaryDescription();
orderValueSum.field = " OrderValue";
orderValueSum.operand = DataSourceSummaryOperand.Sum;
orderValueSum.formatOverride = new Intl.NumberFormat('en-EN', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0});
this.grid.summaryDescriptions.add(orderValueSum);
const orderValueAvg = new IgrColumnSummaryDescription();
orderValueAvg.field = " OrderValue";
orderValueAvg.operand = DataSourceSummaryOperand.Average;
orderValueAvg.formatOverride = new Intl.NumberFormat('en-EN', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0 });
this.grid.summaryDescriptions.add(orderValueAvg);
const orderDateMin = new IgrColumnSummaryDescription();
orderDateMin.field = " OrderDate";
orderDateMin.operand = DataSourceSummaryOperand.Min;
orderDateMin.calculatorDisplayName = " First"
orderDateMin.formatOverride = new Intl.DateTimeFormat('en-EN');
this.grid.summaryDescriptions.add(orderDateMin);
const orderDateMax = new IgrColumnSummaryDescription();
orderDateMax.field = " OrderDate";
orderDateMax.operand = DataSourceSummaryOperand.Max;
orderDateMax.calculatorDisplayName = " Last"
orderDateMax.formatOverride = new Intl.DateTimeFormat('en-EN');
this.grid.summaryDescriptions.add(orderDateMax);
const sum1 = new IgrColumnSummaryDescription();
sum1.field = " Profit";
sum1.operand = DataSourceSummaryOperand.Sum;
sum1.formatOverride = new Intl.NumberFormat('en-EN', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0 });
this.grid.summaryDescriptions.add(sum1);
const avg2 = new IgrColumnSummaryDescription();
avg2.field = " Profit";
avg2.operand = DataSourceSummaryOperand.Average;
avg2.formatOverride = new Intl.NumberFormat('en-EN', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0 });
this.grid.summaryDescriptions.add(avg2);
const countries = new IgrColumnSummaryDescription();
countries.field = " Countries";
countries.operand = DataSourceSummaryOperand.Custom;
countries.provideCalculator = this.onProvideCalculator;
// countries.calculator = new CustomDomestic();
this.grid.summaryDescriptions.add(countries);
}
public onProvideCalculator = (s: IgrColumnSummaryDescription, e: IgrProvideCalculatorEventArgs) => {
e.calculator = new CustomDomestic();
}
}
// Custom Calculator - calculates the count for all USA.
class CustomDomestic extends SummaryCalculator
{
get displayName(): string {
return " USA";
}
public usCountries: number;
public beginCalculation(a: IDataSource, b: string): void {
super.beginCalculation(a,b);
this.usCountries = 0;
}
public endCalculation(): ISummaryResult {
return new DefaultSummaryResult(this.propertyName, DataSourceSummaryOperand.Custom, this.usCountries)
}
public aggregate(a: any): void {
if(a.Countries === " USA")
{
this.usCountries++;
}
}
}
// rendering above class to the React DOM
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<DataGridColumnSummaries/>);
tsx コピー
Like this sample? Get access to our complete Ignite UI for React toolkit and start building your own apps in minutes. Download it for free.
Summary Scope Property
React 데이터 그리드는 summaryScope
속성을 사용하여 구성할 수 있는 4가지 요약 설정을 지원합니다. 다음은 나열하고 설명합니다.
Root
: 요약이 적용되는 열에 대한 그리드의 모든 행에 대한 총합계가 표시됩니다.
Groups
: 그룹화된 행에만 적용되며 특정 그룹의 모든 행에 대한 총계를 표시합니다.
Both
: Groups
및 Root
옵션을 동시에 사용합니다.
None
: 그리드에 대한 요약을 비활성화합니다.
Group Summary Display Mode Property
React 데이터 그리드는 요약이 표시되는 위치 구성을 지원합니다. groupSummaryDisplayMode
속성을 사용하여 이를 구성할 수 있습니다. 이 속성에 대한 다양한 옵션은 아래에 나열되어 설명되어 있습니다.
목록 : 그룹 요약을 스패닝 그룹 헤더의 단순 목록으로 렌더링합니다.
셀 : 그룹 헤더를 셀로 렌더링하고 요약 값은 해당 열에 맞춰 셀 내부에 렌더링됩니다. 이 옵션을 사용하면 그리드에 열당 단일 요약만 표시됩니다.
RowTop : 그룹 요약을 그룹 상단의 요약 행으로 렌더링합니다.
RowBottom : 그룹 요약을 그룹 하단의 요약 행으로 렌더링합니다.
없음 : 그룹 요약 렌더링이 비활성화됩니다.
Code Snippets
<IgrDataGrid
summaryScope = "Groups"
groupSummaryDisplayMode = "RowTop"
height ="calc(100% - 40px)"
width ="100%"
autoGenerateColumns ="false"
dataSource ={this.data} >
<IgrTextColumn field ="ProductName" headerText ="Product" />
<IgrNumericColumn positivePrefix ="$" field ="BundlePrice" showGroupingSeparator ="true" headerText ="Price" />
<IgrNumericColumn field ="OrderItems" headerText ="Order Items" />
<IgrNumericColumn field ="OrderValue" showGroupingSeparator ="true" headerText ="Order Totals"
positivePrefix ="$" />
<IgrTextColumn field ="Countries" headerText ="Ship Country" />
</IgrDataGrid >
tsx
import { IgrColumnGroupDescription } from 'igniteui-react-data-grids' ;
import { IgrColumnSummaryDescription } from 'igniteui-react-data-grids'
import { SummaryOperand, SummaryCalculator, DefaultSummaryResult, IDataSource, ISummaryResult } from 'igniteui-react-core' ;
public componentDidMount ( ) {
window .addEventListener('load' , this .onLoad);
}
public onLoad ( ) {
const productCount = new IgrColumnSummaryDescription();
productCount.field = "ProductName" ;
productCount.operand = SummaryOperand.Count;
this .grid.summaryDescriptions.add(productCount);
const priceMin = new IgrColumnSummaryDescription();
priceMin.field = "BundlePrice" ;
priceMin.operand = SummaryOperand.Min;
priceMin.formatOverride = new Intl .NumberFormat('en-EN' , { style : 'currency' , currency : 'USD' , minimumFractionDigits : 0 , maximumFractionDigits : 0 });
this .grid.summaryDescriptions.add(priceMin);
const priceMax = new IgrColumnSummaryDescription();
priceMax.field = "BundlePrice" ;
priceMax.operand = SummaryOperand.Max;
priceMax.formatOverride = new Intl .NumberFormat('en-EN' , { style : 'currency' , currency : 'USD' , minimumFractionDigits : 0 , maximumFractionDigits : 0 });
this .grid.summaryDescriptions.add(priceMax);
const orderSum = new IgrColumnSummaryDescription();
orderSum.field = "OrderItems" ;
orderSum.operand = SummaryOperand.Sum;
this .grid.summaryDescriptions.add(orderSum);
const orderValueAvg = new IgrColumnSummaryDescription();
orderValueAvg.field = "OrderValue" ;
orderValueAvg.operand = SummaryOperand.Average;
orderValueAvg.formatOverride = new Intl .NumberFormat('en-EN' , { style : 'currency' , currency : 'USD' , minimumFractionDigits : 0 , maximumFractionDigits : 0 });
this .grid.summaryDescriptions.add(orderValueAvg);
}
ts
Custom Summaries
어떤 상황에서는 기본 요약 세트를 확장해야 할 수도 있습니다. 예를 들어, 열의 특정 값이 나타나는 횟수를 표시하려는 경우 이를 위해서는 사용자 정의 요약이 필요합니다.
아래 조각은 열에 나타나는 "USA" 값의 개수를 표시하는 방법을 보여줍니다.
import { IgrProvideCalculatorEventArgs } from 'igniteui-react-core' ;
public onLoad ( )
{
const countries = new IgrColumnSummaryDescription();
countries.field = "Countries" ;
countries.operand = SummaryOperand.Custom;
countries.provideCalculator = this .onProvideCalculator;
this .grid.summaryDescriptions.add(countries);
}
onProvideCalculator (s: IgrColumnSummaryDescription, e: IgrProvideCalculatorEventArgs ) {
e.calculator = new CustomDomestic();
}
class CustomDomestic extends SummaryCalculator
{
get displayName (): string {
return "USA" ;
}
public usCountries: number ;
public beginCalculation(a: IDataSource, b : string ): void {
super .beginCalculation(a,b);
this .usCountries = 0 ;
}
public endCalculation(): ISummaryResult {
return new DefaultSummaryResult(this .propertyName, SummaryOperand.Custom, this .usCountries)
}
public aggregate(a: any ): void {
if (a.Countries === "USA" )
{
this .usCountries++;
}
}
}
ts
API References