Syncfusion Ej2 React Part5
Syncfusion Ej2 React Part5
Syncfusion Ej2 React Part5
File manager
Getting Started
This section explains how to create and configure the simple Link to the Video component.
To get started quickly with React File Manager, you can check the video below.
Dependencies
The following list of dependencies are required to use the File Manager component in your application.
`javascript
|-- @syncfusion/ej2-react-filemanager
|-- @syncfusion/ej2-base
|-- @syncfusion/ej2-grids
|-- @syncfusion/ej2-buttons
|-- @syncfusion/ej2-layouts
|-- @syncfusion/ej2-navigations
`
Installation and configuration
You can use create-react-app to setup the applications. To install create-react-app run the following
command.
`
npm install -g create-react-app
`
To set-up a React application in TypeScript environment, run the following command.
`
npx create-react-app my-app --template typescript
cd my-app
`
To set-up a React application in JavaScript environment, run the following command.
`
npx create-react-app my-app
cd my-app
`
Adding Syncfusion packages
All the available Essential JS 2 packages are published in npmjs.com public registry.
You can choose the component that you want to install. For this application, we are going to use File
Manager component.
[src/App.tsx]
{% raw %}
`ts
import { FileManagerComponent } from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div className="control-section">
<FileManagerComponent id="file" ajaxSettings = {{
url: hostUrl + "api/FileManager/FileOperations"
}} />
</div>
);
}
export default App;
`
{% endraw %}
{% raw %}
`ts
import { FileManagerComponent } from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div className="control-section">
<FileManagerComponent id="file" ajaxSettings={{
url: hostUrl + "api/FileManager/FileOperations"
}}/>
</div>);
}
export default App;
`
{% endraw %}
Run the application
Now run the npm start command in the console, it will run your application and open the browser
window.
`
npm start
`
The following sample, shows the basic File Manager component.
APP.JSX
{% raw %}
import { FileManagerComponent } from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div className="control-section">
<FileManagerComponent id="file" ajaxSettings={{
url: hostUrl + "api/FileManager/FileOperations"
}}/>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { FileManagerComponent } from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div className="control-section">
<FileManagerComponent id="file" ajaxSettings = {{
url: hostUrl + "api/FileManager/FileOperations"
}} />
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
`
{% endraw %}
Image Preview support
To perform the image preview support in the File Manager component, need to initialize the
getImageUrl property in a ajaxSettings of File Manager component.
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons" ajaxSettings={{
getImageUrl: hostUrl + "api/FileManager/GetImage",
url: hostUrl + "api/FileManager/FileOperations"
}}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons" ajaxSettings = {{
getImageUrl: hostUrl + "api/FileManager/GetImage",
url: hostUrl + "api/FileManager/FileOperations"
}} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons" ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
Note: The appearance of the File Manager can be customized by using cssClass property. This adds a css
class to the root of the File Manager which can be used to add new styles or override existing styles to
the File Manager.
Switching initial view of the File Manager
The initial view of the File Manager can be changed to details or largeicons view with the help of view
property. By default, the File Manager will be rendered in large icons view. When the File Manager is
initially rendered, created will be triggered. This event can be utilized for performing operations once
the File Manager has been successfully created.
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
function onCreated(args) {
console.log("File Manager has been created successfully");
}
return (<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons" ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} created={onCreated.bind(this)}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
For every operation in File Manager, ajax request will be sent to the server which then processes the
request and sends back the response. When the ajax request is success, success event will be triggered
and failure event will be triggered if the request gets failed.
APP.JSX
{% raw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject,
SuccessEventArgs, FailureEventArgs } from '@syncfusion/ej2-react-
filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
function onSuccess(args: SuccessEventArgs) {
console.log("Ajax request successful");
}
function onFailure(args: FailureEventArgs) {
console.log("Ajax request has failed");
}
return (
<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons"
enablePersistence={true} ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} success={onSuccess.bind(this)} failure={onFailure.bind(this)} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
Note: The files of the current folder opened in the File manager can be refreshed programatically by
calling refreshFiles method.
Rendering component in right-to-left direction
It is possible to render the File Manager in right-to-left direction by setting the enableRtl API to true.
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div className="control-section">
<FileManagerComponent id="file" enableRtl={true} ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div className="control-section">
<FileManagerComponent id="file" enableRtl={true} ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
`
{% endraw %}
{% raw %}
`ts
import { FileManagerComponent } from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div className="control-section">
<FileManagerComponent id="file" ajaxSettings={{
url: hostUrl + "api/FileManager/FileOperations"
}}/>
</div>);
}
export default App;
`
{% endraw %}
Note: You can refer to our React File Manager feature tour page for its groundbreaking feature
representations. You can also explore our React File Manager example that shows you how to render
the File Manager in React.
Creating a Next.js Application Using Syncfusion React Components
This section provides a step-by-step guide for setting up a Next.js application and integrating the
Syncfusion React File manager component.
What is Next.js?
Next.js is a React framework that makes it easy to build fast, SEO-friendly, and user-friendly web
applications. It provides features such as server-side rendering, automatic code splitting, routing, and
API routes, making it an excellent choice for building modern web applications.
Prerequisites
Before getting started with the Next.js application, ensure the following prerequisites are met:
YARN
yarn create next-app
Using one of the above commands will lead you to set up additional configurations for the project as
below:
1.Define the project name: Users can specify the name of the project directly. Let's specify the name of
the project as ej2-nextjs-file-manager.
CMD
√ What is your project named? » ej2-nextjs-file-manager
3.Once complete the above mentioned steps to create ej2-nextjs-file-manager, navigate to the
directory using the below command:
CMD
cd ej2-nextjs-file-manager
The application is ready to run with default settings. Now, let's add Syncfusion components to the
project.
Install Syncfusion React packages
Syncfusion React component packages are available at npmjs.com. To use Syncfusion React components
in the project, install the corresponding npm package.
Here, the React File Manager component is used as an example. To install the React File manager
component in the project, use the following command:
NPM
npm install @syncfusion/ej2-react-filemanager --save
YARN
yarn add @syncfusion/ej2-react-filemanager
To know more about built-in themes and CSS reference for individual components, refer to the themes
section.
Add Syncfusion React component
Follow the below steps to add the React File manager component to the Next.js project:
1.Define the File manager component in the src/app/page.tsx file, as shown below:
PAGE.TSX
'use client'
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
let ajaxSettings: object = {
url: hostUrl + "api/FileManager/FileOperations",
getImageUrl: hostUrl + "api/FileManager/GetImage"
};
return (
<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons" ajaxSettings =
{ajaxSettings} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
);
}
export default App;
NPM
npm run dev
YARN
yarn run dev
To learn more about the functionality of the File manager component, refer to the documentation.
View the NEXT.js File manager sample in the GitHub repository.
User interface in React File manager component
The file manager UI is comprised of several sections like view, toolbar, breadcrumb, context menu, and
so on. The UI of the file manager is enhanced with injectable modules like Details View for browsing
files and folders in a grid, Navigation Pane for folder navigation, and Toolbar for file operations. The
file manager with all feature modules have the following sections in its UI.
The basic file manager is a light weight component with all the basic functions. The basic file manager
have the following sections in its UI to browse files and folders and manage them with file operations.
Toolbar
The toolbar is an injectable module in file manager. It should be injected before rendering the file
manager to avail its functionality. It is present at the top of the file manager. Toolbar provides easy
access to the file operations using different buttons.
If the toolbar items exceed the size of the toolbar, then the exceeding toolbar size will be moved to
toolbar popup with a dropdown button at the end of toolbar.
*Refer Toolbar section in file operations to know more about the buttons present in toolbar*.
• Navigation Pane
• Breadcrumb
Navigation pane
The navigation pane is an injectable module so, it should be injected before rendering the file manager
to use its functionality.
It displays the folder hierarchy of the file system and provides easy navigation to the desired folder.
Using navigationPaneSettings minimum and maximum width of the navigation pane can be changed.
The navigation pane can be shown or hidden using the visible option in the navigationPaneSettings.
BreadCrumb
The file manager provides breadcrumb for navigating to the parent folders. The breadcrumb in the file
manager is responsible for resizing.
Whenever the path length exceeds the breadcrumb length, a dropdown button will be added at the
starting of the breadcrumb to hold the parent folders adjacent to root.
View
View is the section where the files and folders are displayed for the user to browse. The file manager has
two types of views to display the files and folders.
The large icons view is the default starting view in the file manager. The view can be changed by using
the toolbar view button or by using the view menu in context menu. The view API can also be used to
change the initial view of the file manager.
Large icons view
In the large icons view, the thumbnail icons will be shown in a larger size, which displays the data in a
form that best suits their content. For image and video type files, a preview will be displayed. Extension
thumbnails will be displayed for other type files.
Details view
Details view is an injectable module in the file manager so, it should be injected before rendering the file
manager to avail its functionality. In the details view, the files are displayed in a sorted list order. This
file list comprises of several columns of information about the files such as Name, Date Modified, Type,
and Size. Each file has its own small icon representing the file type. Additional columns can be added
using detailsViewSettings API. The details view allows you to perform sorting using column header.
Context menu
The context menu appears on user interaction such as right-click. The file manager is provided with
context menu support to perform list of file operations with the files and folders. Context menu appears
with varying menu items based on the targets such as file, folder (including navigation pane folders),
and layout (empty area in view).
Context menu can be customized using the contextMenuSettings, menuOpen, and menuClick events.
*Refer Context Menu section in file operations to know more about the menu items present in context
menu*.
}} created={onCreated.bind(this)}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import * as React from 'react';
import { FileManagerComponent, Inject, NavigationPane, DetailsView, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import { DropDownButton, ItemModel } from '@syncfusion/ej2-splitbuttons';
/**
* File Manager folder upload sample
*/
function App() {
let fmObj: FileManagerComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
let items: ItemModel[] = [{ text: 'Folder' }, { text: 'Files' }];
function onCreated(args) {
(document.getElementById('file_tb_upload') as HTMLElement).onclick =
(e) => {
e.stopPropagation();
};
let drpDownBtn: DropDownButton = new DropDownButton({
items: items,
select: (args) => {
if (args.item.text === 'Folder') {
fmObj.uploadSettings.directoryUpload = true;
} else {
fmObj.uploadSettings.directoryUpload = false;
}
setTimeout(function () {
let uploadBtn: HTMLElement = document.querySelector('.e-file-
select-wrap button');
uploadBtn.click();
}, 100);
},
},
'#file_tb_upload'
);
}
return(
<div>
<div className="control-section">
<FileManagerComponent id="file" ref={(scope) => { fmObj =
scope; }} ajaxSettings = {{
url: hostUrl + "api/FileManager/FileOperations",
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
downloadUrl: hostUrl + 'api/FileManager/Download'
}}
created={onCreated.bind(this)}>
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
</div>
);
}
export default App;
{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
this.operation.ToCamelCase(this.operation.Create(path, folders[i]));
}
path += folders[i] + "/";
}
}
}
uploadResponse = operation.Upload(path, uploadFiles, action, null);
if (uploadResponse.Error != null)
{
Response.Clear();
Response.ContentType = "application/json; charset=utf-8";
Response.StatusCode = Convert.ToInt32(uploadResponse.Error.Code);
Response.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase =
uploadResponse.Error.Message;
}
return Content("");
}
`
Refer to the GitHub for more details
And also add the below code snippet in FileManagerResponse Upload method in
Models/PhysicalFileProvider.cs file.
`ts
string[] folders = name.Split('/');
string fileName = folders[folders.Length - 1];
var fullName = Path.Combine((this.contentRootPath + path), fileName);
`
Refer to the GitHub for more details.
Azure file service provider
For Azure file service provider, no customizations are needed for directory upload with server side and
this will work with the below default upload method code.
Refer to the GitHub for more details.
NodeJS file service provider
To perform the directory upload in the NodeJS file service provider, use the below code snippet in
app.post method in the filesystem-server.js file.
`ts
|----|----|----|----|
|action|String|read|Name of the file operation.|
|path|String|-|Relative path from which the data has to be read.|
|showHiddenItems|Boolean|-|Defines show or hide the hidden items.|
|data|FileManagerDirectoryContent|-|Details about the current path (directory).|
*Refer File request and response contents for the contents of data*.
Example:
`ts
{
action: "read",
path: "/",
showHiddenItems: false,
data: []
}
`
The following table represents the response parameters of read operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|cwd|FileManagerDirectoryContent|-|Path (Current Working Directory) details.|
|files|FileManagerDirectoryContent[]|-|Details of files and folders present in given path or directory.|
|error|ErrorDetails|-|Error Details|
*Refer File request and response contents for the contents of cwd, files, and error*.
Example:
`ts
{
cwd:
{
name:"Download",
size:0,
dateModified:"2019-02-28T03:48:19.8319708+00:00",
dateCreated:"2019-02-27T17:36:15.812193+00:00",
hasChild:false,
isFile:false,
type:"",
filterPath:"//Download//"
},
files:[
{
name:"Sample Work Sheet.xlsx",
size:6172,
dateModified:"2019-02-27T17:23:50.9651206+00:00",
dateCreated:"2019-02-27T17:36:15.8151955+00:00",
hasChild:false,
isFile:true,
type:".xlsx",
filterPath:"//Download//"
}
],
error:null,
details:null
}
`
Create
The following table represents the request parameters of create operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|create|Name of the file operation.|
|path|String|-|Relative path in which the folder has to be created.|
|name|String|-|Name of the folder to be created.|
|data|FileManagerDirectoryContent|-|Details about the current path (directory).|
*Refer File request and response contents for the contents of data*
Example:
`ts
{
action: "create",
data: [
{
dateCreated: "2019-02-27T17:36:15.6571949+00:00",
dateModified: "2019-03-12T10:17:31.8505975+00:00",
filterPath: "/",
hasChild: true,
isFile: false,
name: files,
nodeId: "fe_tree",
size: 0,
type: ""
}
],
name: "Hello",
path: "/"
}
`
The following table represents the response parameters of create operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|files|FileManagerDirectoryContent[]|-|Details of the created folder|
|error|ErrorDetails|-|Error Details|
*Refer File request and response contents for the contents of files and error*.
Example:
`ts
{
cwd: null,
files: [
{
dateCreated: "2019-03-15T10:25:05.3596171+00:00",
dateModified: "2019-03-15T10:25:05.3596171+00:00",
filterPath: null,
hasChild: false,
isFile: false,
name: "New",
size: 0,
type: ""
}
],
details: null,
error: null
}
`
Rename
The following table represents the request parameters of rename operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|rename|Name of the file operation.|
|path|String|-|Relative path in which the item is located.|
|name|String|-|Current name of the item to be renamed.|
|newname|String|-|New name for the item.|
|data|FileManagerDirectoryContent|-|Details of the item to be renamed.|
*Refer File request and response contents for the contents of data*.
Example:
`ts
{
action: "rename",
data: [
{
dateCreated: "2019-03-20T05:22:34.621Z",
dateModified: "2019-03-20T08:45:56.000Z",
filterPath: "/Pictures/Nature/",
hasChild: false,
iconClass: "e-fe-image",
isFile: true,
name: "seaviews.jpg",
size: 95866,
type: ".jpg"
}
],
newname: "seaview.jpg",
name: "seaviews.jpg",
path: "/Pictures/Nature/"
}
`
The following table represents the response parameters of rename operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|files|FileManagerDirectoryContent[]|-|Details of the renamed item.|
|error|ErrorDetails|-|Error Details|
*Refer File request and response contents for the contents of files and error*.
Example:
`ts
{
cwd:null,
files:[
{
name:"seaview.jpg",
size:95866,
dateModified:"2019-03-20T08:45:56+00:00",
dateCreated:"2019-03-20T05:22:34.6214847+00:00",
hasChild:false,
isFile:true,
type:".jpg",
filterPath:"//Pictures//Nature//seaview.jpg"
}
],
error:null,
details:null
}
`
Delete
The following table represents the request parameters of delete operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|delete|Name of the file operation.|
|path|String|-|Relative path where the items to be deleted are located.|
|names|String[]|-|List of the items to be deleted.|
|data|FileManagerDirectoryContent|-|Details of the item to be deleted.|
*Refer File request and response contents for the contents of data*.
Example:
`ts
{
action: "delete",
path: "/Hello/",
names: ["New"],
data: []
}
`
The following table represents the response parameters of delete operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|files|FileManagerDirectoryContent[]|-|Details about the deleted item(s).|
|error|ErrorDetails|-|Error Details|
*Refer File request and response contents for the contents of files and error*.
Example:
`ts
{
cwd: null,
details: null,
error: null,
files: [
{
dateCreated: "2019-03-15T10:13:30.346309+00:00",
dateModified: "2019-03-15T10:13:30.346309+00:00",
filterPath: "/Hello/folder",
hasChild: true,
isFile: false,
name: "folder",
size: 0,
type: ""
}
]
}
`
Details
The following table represents the request parameters of details operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|details|Name of the file operation.|
|path|String|-|Relative path where the items are located.|
|names|String[]|-|List of the items to get details.|
|data|FileManagerDirectoryContent|-|Details of the selected item.|
*Refer File request and response contents for the contents of data*.
Example:
`ts
{
action: "details",
path: "/FileContents/",
names: ["All Files"],
data: []
}
`
The following table represents the response parameters of details operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
{
action: "search",
path: "/",
searchString: "nature",
showHiddenItems: false,
caseSensitive: false,
data: []
}
`
The following table represents the response parameters of search operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|cwd|FileManagerDirectoryContent|-|Path (Current Working Directory) details.|
|files|FileManagerDirectoryContent[]|-|Files and folders in the searched directory that matches the
search input.|
|error|ErrorDetails|-|Error Details|
*Refer File request and response contents for the contents of cwd, files and error.*
Example:
`ts
{
cwd:
{
name:files,
size:0,
dateModified:"2019-03-15T10:07:00.8658158+00:00",
dateCreated:"2019-02-27T17:36:15.6571949+00:00",
hasChild:true,
isFile:false,
type:"",
filterPath:"//"
},
files:[
{
name:"Nature",
size:0,
dateModified:"2019-03-08T10:18:42.9937708+00:00",
dateCreated:"2019-03-08T10:18:42.5907729+00:00",
hasChild:true,
isFile:false,
type:"",
filterPath:"//FileContents//Nature"
}
],
error:null,
details:null
}
`
Copy
The following table represents the request parameters of copy operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|copy|Name of the file operation.|
|path|String|-|Relative path to the directory where the files should be copied.|
|names|String[] |-|List of files to be copied.|
|targetPath|String|-|Relative path where the items to be pasted are located.|
|data|FileManagerDirectoryContent|-|Details of the copied item.|
|renameFiles|String[]|-|Details of the renamed item.|
Example:
`ts
{
action: "copy",
path: "/",
names: ["6.png"],
renameFiles: ["6.png"],
targetPath: "/Videos/"
}
`
The following table represents the response parameters of copy operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|cwd|FileManagerDirectoryContent|-|Path (Current Working Directory) details.|
|files|FileManagerDirectoryContent[]|-|Details of copied files or folders|
|error|ErrorDetails|-|Error Details|
*Refer File request and response contents for the contents of cwd, files and error.*
Example:
`ts
{
cwd:null,
files:[
{
path:null,
action:null,
newName:null,
names:null,
name:"justin.mp4",
size:0,
previousName:"album.mp4",
dateModified:"2019-06-21T06:58:32+00:00",
dateCreated:"2019-06-24T04:22:14.6245618+00:00",
hasChild:false,
isFile:true,
type:".mp4",
id:null,
filterPath:"//"
}
],
error:null,
details:null
}
`
Move
The following table represents the request parameters of move operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|move|Name of the file operation.|
|path|String|-|Relative path to the directory where the files should be copied.|
|names|String[] |-|List of files to be moved.|
|targetPath|String|-|Relative path where the items to be pasted are located.|
|data|FileManagerDirectoryContent|-|Details of the moved item.|
|renameFiles|String[]|-|Details of the renamed item.|
Example:
`ts
{
action: "move",
path: "/",
names: ["6.png"],
renameFiles: ["6.png"],
targetPath: "/Videos/"
}
`
The following table represents the response parameters of copy operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|cwd|FileManagerDirectoryContent|-|Path (Current Working Directory) details.|
|files|FileManagerDirectoryContent[]|-|Details of cut files or folders|
|error|ErrorDetails|-|Error Details|
*Refer File request and response contents for the contents of cwd, files and error.*
Example:
`ts
{
cwd:null,
files:[
{
path:null,
action:null,
newName:null,
names:null,
name:"justin biber.mp4",
size:0,
previousName:"justin biber.mp4",
dateModified:"2019-06-21T06:58:32+00:00",
dateCreated:"2019-06-24T04:26:49.2690476+00:00",
hasChild:false,
isFile:true,
type:".mp4",
id:null,
filterPath:"//Videos//"
}
],
error:null,
details:null
}
`
Upload
The following table represents the request parameters of Upload operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|Save|Name of the file operation.|
|path|String|-|Relative path to the location where the file has to be uploaded.|
|uploadFiles|IList<IFormFile>|-|File that are uploaded.|
Example:
`ts
uploadFiles: (binary),
path: /,
action: Save,
data: {
path:null,
action:null,
newName:null,
names:null,
name:"Downloads",
size:0,
previousName:null,
dateModified:"2019-07-22T11:23:46.7153977 00:00",
dateCreated:"2019-07-22T11:26:13.9047229 00:00",
hasChild:false,
isFile:false,
type:"",
id:null,
filterPath:"//",
targetPath:null,
renameFiles:null,
uploadFiles:null,
caseSensitive:false,
searchString:null,
showHiddenItems:false,
fmiconClass:null,
fmid:"fetree1",
fmpId:null,
fmselected:false,
fmicon:null,
data:null,
targetData:null,
permission:null
}
`
The upload response is an empty string.
Download
The following table represents the request parameters of download operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|download|Name of the file operation|
|path|String|-|Relative path to location where the files to download are present.|
|names|String[]|-|Name list of the items to be downloaded.|
|data|FileManagerDirectoryContent|-|Details of the download item.|
Example:
`ts
{
action:"download",
path:"/",
names:["1.png"],
data:[
{
path:null,
action:null,
newName:null,
names:null,
name:"1.png",
size:49792,
previousName:null,
dateModified:"2019-07-22T12:15:45.0972405+00:00",
dateCreated:"2019-07-22T12:15:45.0816042+00:00",
hasChild:false,
isFile:true,
type:".png",
id:null,
filterPath:"//",
targetPath:null,
renameFiles:null,
uploadFiles:null,
caseSensitive:false,
searchString:null,
showHiddenItems:false,
fmiconClass:"e-fe-image",
fmid:null,
fmpId:null,
fmselected:false,
fmicon:null,
data:null,
targetData:null,
permission:null,
fmcreated:"2019-07-22T12:15:45.081Z",
fmmodified:"2019-07-22T12:15:45.097Z",
fmimageUrl:"https://ej2-aspcore-service.azurewebsites.net/api/FileManager/GetImage?path=/1.png",
fmimageAttr:
{
alt:"1.png"
},
fmhtmlAttr:
{
class:"e-large-icon",
title:"1.png"
}
}
]
}
`
Downloads the requested items from the file server in response.
GetImage
The following table represents the request parameters of GetImage operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|path|String|-|Relative path to the image file|
|multipleFiles|Boolean|-|Say whether the details are about single file or multiple files.|
Action Buttons
The file manager has several menu buttons to access the file operations. The list of menu buttons
available in the file manager is given in the following table.
|Menu Button|Behaviour|
|----|----|
|SortBy| Opens the sub menu to choose the sorting order and sorting parameter.|
|View| Opens the sub menu to choose the View.|
|Open| Navigates to the selected folder. Opens the preview for image files.|
|Refresh| Initiates the read operation for the current directory and displays the updated directory
content.|
|NewFolder| Opens the new folder dialog box to receive the name for the new folder.|
|Rename| Opens the rename dialog box to receive the new name for the selected item.|
|Delete| Opens the delete dialog box to confirm the removal of the selected items from the file
system.|
|Upload| Opens the upload box to select the items to upload to the file system.|
|Download| Downloads the selected item(s).|
|Details| Get details about the selected items and display them in details dialog box.|
|SelectAll| Selects all the files and folders displayed in the view section.|
The action menu buttons are present in the toolbar and context menu. The toolbar contains the buttons
based on the selected items count, while the context menu will appear with a list based on the target.
Toolbar
The toolbar can be divided into two sections as right and left. Whenever the toolbar buttons exceed the
size, the buttons present in the left section of the toolbar will be moved to the toolbar popup.
The following table provides the toolbar buttons that appear based on the selection.
<!-- markdownlint-disable MD033 -->
Selected Items Count Left section Right section
1 (single item selected) Delete Download* Rename Selected items count View* Details
>1 (multiple selection) Delete Download Selected items count View* Details
Context menu
The following table provides the default context menu item and the corresponding target areas.
<!-- markdownlint-disable MD033 -->
• LargeIcons View
• Details View
LargeIcons View
By Default, File Manager is rendered with largeicons view. The following example demonstrate this.
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, Inject, NavigationPane, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj;
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div>
<div className="control-section">
<FileManagerComponent ref={s => (fileObj = s)} id="file"
ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
Details View
Details view is an injectable module in the file manager so, it should be injected before rendering the file
manager to avail its functionality. The default appearance of the file manager can be changed from
largeicons to details view by using the view property. The following example demonstrate the file
manager with details view.
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Inject, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj;
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div>
<div className="control-section">
<FileManagerComponent ref={s => (fileObj = s)} id="file"
view="Details" ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Inject, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj: FileManagerComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div>
<div className="control-section">
<FileManagerComponent ref={ s => (fileObj = s as
FileManagerComponent)} id="file" view="Details"
ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, Inject, NavigationPane, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj: FileManagerComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div>
<div className="control-section">
<FileManagerComponent ref={ s => (fileObj = s as
FileManagerComponent)} id="file" view="Details"
ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}
contextMenuSettings = {{
file: ['Open', '|', 'Details'],
folder: ['Open', '|', 'Details'],
layout: ['SortBy', 'View', 'Refresh', '|', 'Details', '|']
}} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, Inject, NavigationPane, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div className="control-section">
<FileManagerComponent id="file" view="Details" ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}
detailsViewSettings ={
{
columns : [
{field: 'name', headerText: 'File Name', minWidth: 120, width:
'auto', customAttributes: { class: 'e-fe-grid-name' },template: '${name}'},
{field: 'size', headerText: 'File Size',minWidth: 50, width:
'110', template: '${size}'},
{ field: '_fm_modified', headerText: 'Date Modified',minWidth:
50, width: '190'}
]
}
}>
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Inject, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
function onBeforeFileLoad(args: any) {
console.log(args.fileDetails.name + " is loading");
}
function onBeforeFileOpen(args: any) {
console.log(args.fileDetails.name + " is opened");
}
return (
<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons"
showFileExtension={false} ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} fileLoad={onBeforeFileLoad.bind(this)}
fileOpen={onBeforeFileOpen.bind(this)} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons"
showHiddenItems={true} ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Inject, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons"
showThumbnail={false} ajaxSettings = {{
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
Toolbar customization
The toolbar settings like, items to be displayed in toolbar and visibility can be customized using
toolbarSettings property.
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj;
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div>
<div className="control-section">
<FileManagerComponent ref={s => (fileObj = s)} id="file"
view="Details" ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} toolbarSettings={{ items: ['NewFolder', 'Refresh', 'View',
'Details'] }}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj: FileManagerComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div>
<div className="control-section">
<FileManagerComponent ref={ s => (fileObj = s as
FileManagerComponent)} id="file" view="Details"
ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}
toolbarSettings = {
{ items: ['NewFolder', 'Refresh', 'View', 'Details']}
} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]}
/>
</FileManagerComponent>
</div>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
See Also
Upload customization
The upload settings like, minimum and maximum file size and enabling auto upload can be customized
using uploadSettings property.
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons" ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} uploadSettings={{ maxFileSize: 233332, minFileSize: 120,
autoUpload: true }}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div className="control-section">
<FileManagerComponent id="file" view="LargeIcons" ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} uploadSettings={{ maxFileSize: 233332, minFileSize: 120,
autoUpload: true}}>
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
Tooltip customization
The tooltip value can be customized by adding extra content to the title of the toolbar, navigation pane,
details view and large icons of the file manager element.
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
import { getValue, select } from '@syncfusion/ej2-base';
import { TooltipComponent } from '@syncfusion/ej2-react-popups';
function App() {
let fileObj;
let tooltipObj;
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
function onTooltipBeforeRender(args) {
const buttonId = select('button', args.target).id;
let description = '';
switch (buttonId) {
case fileObj.element.id + '_tb_newfolder':
description = 'Create a new folder';
break;
case fileObj.element.id + '_tb_upload':
description = 'Upload new files';
break;
case fileObj.element.id + '_tb_cut':
description = 'Cut files and folders from the current
location';
break;
case fileObj.element.id + '_tb_copy':
description = 'Copy files and folders from the current
location';
break;
case fileObj.element.id + '_tb_paste':
description = 'Paste files and folders in the current
location';
break;
case fileObj.element.id + '_tb_delete':
description = 'Delete selected files and folders';
break;
case fileObj.element.id + '_tb_download':
description = 'Download selected files and folders';
break;
case fileObj.element.id + '_tb_rename':
</TooltipComponent>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
import { getValue, select } from '@syncfusion/ej2-base';
import { TooltipComponent, TooltipEventArgs } from '@syncfusion/ej2-react-
popups';
function App() {
let fileObj: FileManagerComponent;
let tooltipObj: TooltipComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
function onTooltipBeforeRender(args: TooltipEventArgs): void {
const buttonId: string = select('button', args.target).id;
let description: string = '';
switch (buttonId) {
case fileObj.element.id + '_tb_newfolder':
description = 'Create a new folder';
break;
case fileObj.element.id + '_tb_upload':
description = 'Upload new files';
break;
case fileObj.element.id + '_tb_cut':
description = 'Cut files and folders from the current
location';
break;
case fileObj.element.id + '_tb_copy':
description = 'Copy files and folders from the current
location';
break;
case fileObj.element.id + '_tb_paste':
description = 'Paste files and folders in the current
location';
break;
case fileObj.element.id + '_tb_delete':
description = 'Delete selected files and folders';
break;
case fileObj.element.id + '_tb_download':
description = 'Download selected files and folders';
break;
case fileObj.element.id + '_tb_rename':
description = 'Rename selected file or folder';
break;
case fileObj.element.id + '_tb_sortby':
description = 'Change the file sorting order';
break;
case fileObj.element.id + '_tb_refresh':
description = 'Refresh the current location';
break;
case fileObj.element.id + '_tb_selection':
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
Note: The File Manager has support to select files and folders initially or dynamically by specifying their
names in selectedItems property.
Drag and drop in React File manager component
The file manager allows files or folders to be moved from one folder to another by using the
allowDragAndDrop property. It also supports uploading a file by dragging it from Windows Explorer to
FileManager control. You can enable or disable this support by using the allowDragAndDrop property of
file manager.
The event triggered in drag and drop support are
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, Inject, NavigationPane, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj;
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
// File Manager Drag start event
function onFileDragStart(args) {
console.log("File Drag Start");
}
// File Manager Drag start event
function onFileDragStop(args) {
console.log("File Drag Stop");
}
// File Manager Drag start event
function onFileDragging(args) {
console.log("File Dragging");
}
// File Manager Drag start event
function onFileDropped(args) {
console.log("File Dropped");
}
return (<div>
<div className="control-section">
<FileManagerComponent ref={s => (fileObj = s)} id="file"
allowDragAndDrop={true} ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} fileDragStart={onFileDragStart.bind(this)}
fileDragStop={onFileDragStop.bind(this)}
fileDragging={onFileDragging.bind(this)}
fileDropped={onFileDropped.bind(this)}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, Inject, NavigationPane, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj: FileManagerComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
// File Manager Drag start event
function onFileDragStart(args: any) {
console.log("File Drag Start");
}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
The following file providers are added in Syncfusion EJ2 File Manager component.
}} >
</FileManagerComponent>
</div>
</div>
`
{% endraw %}
Note: To learn more about file actions that can be performed with ASP.NET Core file system provider,
refer to this link
ASP.NET MVC 5 file provider
The ASP.NET MVC5 file system provider allows the users to access and manage the physical file system.
To get started, clone the ej2-aspmvc-file-provider using the following command.
`ts
git clone https://github.com/SyncfusionExamples/ej2-aspmvc-file-provider ej2-aspmvc-file-provider
cd ej2-aspmvc-file-provider
`
After cloning, just open the project in Visual Studio and restore the NuGet packages. Now, set the root
directory of the physical file system in the FileManager controller using the Root Folder method.
After setting the root directory of the file system, just build and run the project. Now, the project will be
hosted in http://localhost:{port} and just mapping the ajaxSettings property of the FileManager
component to the appropriate controller methods allows to manage the files in the physical file system.
{% raw %}
`ts
// Initializing File Manager ASP.NET MVC service.
<div>
<div className="control-section">
<FileManagerComponent id="file"
ajaxSettings = {{
// Replace the hosted port number in the place of "{port}"
url="http://localhost:{port}/api/FileManager/FileOperations",
downloadUrl="http://localhost:{port}/api/FileManager/Download",
uploadUrl="http://localhost:{port}/api/FileManager/Upload",
getImageUrl="http://localhost:{port}/api/FileManager/GetImage"
}} >
</FileManagerComponent>
</div>
</div>
`
{% endraw %}
Note: To learn more about file actions that can be performed with ASP.NET MVC 5 file system provider,
refer to this link
ASP.NET Core Azure cloud file system provider
In ASP.NET Core, Azure cloud file system provider allows the users to access and manage the blobs in
the Azure blob storage. To get started, clone the azure-aspcore-file-provider using the following
command
`ts
git clone https://github.com/SyncfusionExamples/azure-aspcore-file-provider azure-aspcore-file-
provider
`
After cloning, just open the project in Visual Studio and restore the NuGet packages. Now, register the
Azure storage by passing details like name, password, and blob name to the Register Azure method in
the FileManager controller.
`ts
void RegisterAzure(string accountName, string accountKey, string blobName)
`
Then, set the blob container and the root blob directory by passing the corresponding URLs as
parameters in the setBlobContainer method as follows.
`ts
void setBlobContainer(string blobPath, string filePath)
`
Note: Also, assign the same blobPath URL and filePath URL in AzureFileOperations and AzureUpload
methods in the FileManager controller to determine the original path of the Azure blob.
After setting the blob container references, just build and run the project. Now, the project will be
hosted in http://localhost:{port} and just mapping the ajaxSettings property of the FileManager
component to the appropriate controller methods allows to manage the Azure blob storage.
{% raw %}
`ts
// Initializing File Manager Azure cloud file system service.
<div>
<div className="control-section">
<FileManagerComponent id="file"
ajaxSettings = {{
Note: To learn more about creating and configuring an Amazon S3 bucket, refer to this link.
After cloning, open the project in Visual Studio and restore the NuGet packages. Now, register Amazon
S3 client account details like awsAccessKeyId, awsSecretKeyId and awsRegion details in
RegisterAmazonS3 method in the FileManager controller to perform the file operations.
`ts
void RegisterAmazonS3(string bucketName, string awsAccessKeyId, string awsSecretAccessKey, string
bucketRegion)
`
After registering the Amazon client account details, just build and run the project. Now, the project will
be hosted in http://localhost:{port} and just mapping the ajaxSettings property of the FileManager
component to the appropriate controller methods allows to manage the Amazon S3 (Simple Storage
Service) bucket's objects storage.
{% raw %}
`ts
// Initializing File Manager Amazon S3 cloud file system service.
<div>
<div className="control-section">
<FileManagerComponent id="file"
ajaxSettings = {{
// Replace the hosted port number in the place of "{port}"
url="http://localhost:{port}/api/AmazonS3Provider/AmazonS3FileOperations",
downloadUrl="http://localhost:{port}/api/AmazonS3Provider/AmazonS3Download",
uploadUrl="http://localhost:{port}/api/AmazonS3Provider/AmazonS3Upload",
getImageUrl="http://localhost:{port}/api/AmazonS3Provider/AmazonS3GetImage"
}} >
</FileManagerComponent>
</div>
</div>
`
{% endraw %}
Note: To learn more about the file actions that can be performed with Amazon S3 cloud file provider,
refer to this link
ASP.NET MVC Amazon S3 cloud file provider
In ASP.NET MVC, Amazon S3 (Simple Storage Service) cloud file provider allows the users to access and
manage a server hosted files as collection of objects stored in the Amazon S3 Bucket. To get started,
clone the ej2-amazon-s3-aspmvc-file-provider using the following command
`ts
git clone https://github.com/SyncfusionExamples/ej2-amazon-s3-aspmvc-file-provider.git ej2-amazon-
s3-aspmvc-file-provider.git
`
Note: To learn more about creating and configuring an Amazon S3 bucket, refer to this link.
After cloning, open the project in Visual Studio and restore the NuGet packages. Now, register Amazon
S3 client account details like awsAccessKeyId, awsSecretKeyId and awsRegion details in
RegisterAmazonS3 method in the FileManager controller to perform the file operations.
`ts
void RegisterAmazonS3(string bucketName, string awsAccessKeyId, string awsSecretAccessKey, string
bucketRegion)
`
After registering the Amazon client account details, just build and run the project. Now, the project will
be hosted in http://localhost:{port} and just mapping the ajaxSettings property of the FileManager
component to the appropriate controller methods allows to manage the Amazon S3 (Simple Storage
Service) bucket's objects storage.
{% raw %}
`ts
// Initializing File Manager Amazon S3 cloud file service.
<div>
<div className="control-section">
<FileManagerComponent id="file"
ajaxSettings = {{
// Replace the hosted port number in the place of "{port}"
url="http://localhost:{port}/FileManager/FileOperations",
downloadUrl="http://localhost:{port}/FileManager/Download",
uploadUrl="http://localhost:{port}/FileManager/Upload",
getImageUrl="http://localhost:{port}/FileManager/GetImage"
}} >
</FileManagerComponent>
</div>
</div>
`
{% endraw %}
Note: To learn more about the file actions that can be performed with ASP.NET MVC Amazon S3 Cloud
File Provider, refer to this link
File Transfer Protocol file system provider
In ASP.NET Core, File Transfer Protocol file system provider allows the users to access to the hosted file
system as collection of objects stored in the file storage using File Transfer Protocol. To get started,
clone the ftp-aspcore-file-provider using the following command
`ts
git clone https://github.com/SyncfusionExamples/ftp-aspcore-file-provider.git ftp-aspcore-file-
provider.git
`
After cloning, open the project in Visual Studio and restore the NuGet packages. Now, register File
Transfer Protocol details like hostName, userName and password in SetFTPConnection method in the
FileManager controller to perform the file operations.
`ts
void SetFTPConnection(string hostName, string userName, string password)
`
After registering the File Transfer Protocol details, just build and run the project. Now, the project will
be hosted in http://localhost:{port} and just mapping the ajaxSettings property of the FileManager
component to the appropriate controller methods allows you to manage the FTP’s objects storage.
{% raw %}
`ts
// Initializing File Manager file transfer protocol file system service.
<div>
<div className="control-section">
<FileManagerComponent id="file"
ajaxSettings = {{
// Replace the hosted port number in the place of "{port}"
url="http://localhost:{port}/api/FTPProvider/FTPFileOperations",
downloadUrl="http://localhost:{port}/api/FTPProvider/FTPDownload",
uploadUrl="http://localhost:{port}/api/FTPProvider/FTPUpload",
getImageUrl="http://localhost:{port}/api/FTPProvider/FTPGetImage"
}} >
</FileManagerComponent>
</div>
</div>
`
{% endraw %}
Note: To learn more about the file actions that can be performed with File Transfer Protocol file system
provider, refer to this link
SQL database file system provider
In ASP.NET Core, SQL database file system provider allows the users to manage the file system being
maintained in a SQL database table. Unlike the other file system providers, the SQL database file system
provider works on ID basis. Here, each file and folder have a unique ID based on which all the file
operations will be performed. To get started, clone the sql-server-database-aspcore-file-provider using
the following command.
`ts
<add name="FileExplorerConnection" connectionString="Data
Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\FileManager.mdf;Integrated
Security=True;Trusted_Connection=true" />
`
After cloning, just open the project in Visual Studio and restore the NuGet packages. To establish the
SQL server connection with the database file (for eg: FileManager.mdf), specify the connection string in
the web config file as follows.
`ts
<add name="FileExplorerConnection" connectionString="Data
Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\FileManager.mdf;Integrated
Security=True;Trusted_Connection=true" />
`
Then, make an entry for the connection string in appsettings.json file as follows.
`ts
"ConnectionStrings": {
"FileManagerConnection": "Data
Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\App_Data\\FileManager.mdf;In
tegrated Security=True;Connect Timeout=30"
}
`
Now, to configure the database connection, set the connection name, table name and root folder ID
value by passing these values to the SetSQLConnection method.
`ts
void SetSQLConnection(string name, string tableName, string tableID)
`
Refer to this FileManager.mdf, to learn about the pre-defined file system SQL database for the EJ2 File
Manager.
After configuring the connection, just build and run the project. Now, the project will be hosted in
http://localhost:{port} and just mapping the ajaxSettings property of the FileManager component to
the appropriate controller methods allows to manage the files in the SQL database table.
{% raw %}
`ts
// Initializing File Manager with SQL Server Database service configuration.
<div>
<div className="control-section">
<FileManagerComponent id="file"
ajaxSettings = {{
// Replace the hosted port number in the place of "{port}"
url="http://localhost:{port}/api/SQLProvider/SQLFileOperations",
downloadUrl="http://localhost:{port}/api/SQLProvider/SQLDownload",
uploadUrl="http://localhost:{port}/api/SQLProvider/SQLUpload",
getImageUrl="http://localhost:{port}/api/SQLProvider/SQLGetImage"
}} >
</FileManagerComponent>
</div>
</div>
`
{% endraw %}
Note: To learn more about file actions that can be performed with SQL database file system provider,
refer to this link
NodeJS file system provider
The NodeJS file system provider allows the users to manage the files and folders in a physical file
system. It provides methods for performing all basic file operations like creating a folder, copy, move,
delete, and download files and folders in the file system. We can use of the NodeJS file system provider
either by installing the ej2-filemanager-node-filesystem package or by cloning the file system provider
from the GitHub.
Using ej2-filemanager-node-filesystem package
`ts
npm install @syncfusion/ej2-filemanager-node-filesystem
`
`ts
git clone https://github.com/SyncfusionExamples/ej2-filemanager-node-filesystem.git node-filesystem-
provider
`
• After cloning, open the root folder and run the command npm install command.
After installing the packages, set the root folder directory of the physical file system in the package JSON
under scripts sections as follows.
`ts
"start": "node filesystem-server.js -d D:/Projects"
`
Note: By default, the root directory will be configured to set C:/Users as the root directory.
To set the port in which the project to be hosted and the root directory of the file system. Run the
following command.
`ts
set PORT=3000 && node filesystem-server.js -d D:/Projects
`
Note: By default, the service will run 8090 port.
Now, just mapping the ajaxSettings property of the FileManager component to the appropriate file
operation methods in the filesystem-server.js file will allow to manage the physical file system with
NodeJS file system provider.
{% raw %}
`ts
// File Manager sample with nodejs service.
<div>
<div className="control-section">
<FileManagerComponent id="file"
ajaxSettings = {{
url="http://localhost:{port}/",
downloadUrl="http://localhost:{port}/Download",
uploadUrl="http://localhost:{port}/Upload",
getImageUrl="http://localhost:{port}/GetImage"
}} >
</FileManagerComponent>
</div>
</div>
`
{% endraw %}
Note: To learn more about file actions that can be performed with NodeJS file system provider, refer to
this link
Google Drive file system provider
In ASP.NET Core, Google Drive file system provider allows the users to manage the files and folders in a
Google Drive account. The Google Drive file system provider works on ID basis where each file and
folder have a unique ID. To get started, clone the google-drive-aspcore-file-provider using the following
command.
`ts
git clone https://github.com/SyncfusionExamples/google-drive-aspcore-file-provider google-drive-
aspcore-file-provider
cd google-drive-aspcore-file-provider
`
Google Drive file system provider use the Google Drive APIs to read the file in the file system and uses
the OAuth 2.0 protocol for authentication and authorization. To authenticate from the client end, obtain
OAuth 2.0 client credentials from the Google API Console. To learn more about generating the client
credentials from the from Google API Console, refer to this link.
After generating the client secret data, copy the JSON data to the following specified JSON files in the
cloned location.
After updating the credentials, just build and run the project. Now, the project will be hosted in
http://localhost:{port}, and it will ask to log on to the Gmail account created the client secret
credentials. Then, provide permission to access the Google Drive files by clicking the allow access button
in the page. Now, just mapping the ajaxSettings property of the FileManager component to the
appropriate controller methods will allows to manage the files from the Google Drive.
{% raw %}
`ts
// File Manager sample with Google Drive service.
<div>
<div className="control-section">
<FileManagerComponent id="file"
ajaxSettings = {{
// Replace the hosted port number in the place of "{port}"
url="http://localhost:{port}/api/GoogleDriveProvider/GoogleDriveFileOperations",
downloadUrl="http://localhost:{port}/api/GoogleDriveProvider/GoogleDriveDownload",
uploadUrl="http://localhost:{port}/api/GoogleDriveProvider/GoogleDriveUpload",
getImageUrl="http://localhost:{port}/api/GoogleDriveProvider/GoogleDriveGetImage"
}} >
</FileManagerComponent>
</div>
</div>
`
{% endraw %}
Note: To learn more about file actions that can be performed with Google Drive file system provider,
refer to this link
Firebase Realtime Database file system provider
The Firebase Realtime Database file system provider in ASP.NET Core provides the efficient way to store
the File Manager file system in a cloud database as JSON representation.
Generate Secret access key from service account
Follow the given steps to generate the secret access key:
• To access the Firebase console, please click on this link. Once you have accessed the console,
you can create a new project by filling in the necessary fields and clicking on the relevant
buttons.
• Within the Firebase console, navigate to the Build tab. Under this tab, select the option for
Realtime Database. From there, you can create a new database by clicking on the Create
Database button.
• To get started, create a root node and add any desired children to it. Please refer to the
following code snippet for guidance on the structure of the JSON:
`ts
{
"Files" : [ {
"caseSensitive" : false,
"dateCreated" : "8/22/2019 5:17:55 PM",
Here, the Files denotes the rootNode and the subsequent object refers to the children of the root
node. rootNode will be taken as the root folder of the file system loaded which will be loaded in File
Manager component.
• To import a JSON file into the Firebase Realtime Database, navigate to the Data tab and click on
the action icon shown in the accompanying image. From there, select the Import JSON option
and upload the JSON file that was created using the code provided above.
• To interact with the Firebase Realtime Database through your application, it is necessary to
grant read and write permissions by defining appropriate rules in the Firebase project's Rules
tab, as shown in the following code snippet. Once you have specified the rules, you can publish
them by clicking the Publish button to enable the necessary authentication.
`ts
{
/ Visit https://firebase.google.com/docs/database/security to learn more about security rules. /
"rules": {
".read": "auth!=null",
".write": "auth!=null"
}
}
`
Note: By default, rules of a Firebase project will be false. To read and write the data, configure the
Rules as given in the following code snippet in the Rules tab in the Firebase Realtime Database project.
• Navigate to the project settings as instructed and then click on the Service Account tab.
• To obtain the access key JSON file, simply click on the Generate new private key button and
then confirm by clicking the Generate key button in the pop-up window that appears.
Register the Firebase Realtime Database by assigning Firebase Realtime Database REST API link,
rootNode, and serviceAccountKeyPath parameters in the RegisterFirebaseRealtimeDB method of class
FirebaseRealtimeDBFileProvider in the controller part of the ASP.NET Core application.
`ts
this.operation.RegisterFirebaseRealtimeDB(string apiUrl, string rootNode, string serviceAccountKeyPath)
`
Example:
`ts
this.operation.RegisterFirebaseRealtimeDB("{copy your API URL here}", "Files",
hostingEnvironment.ContentRootPath + \\FirebaseRealtimeDBHelper\\access_key.json);
`
In the above code,
• {copy your API URL here} denotes Firebase Realtime Database REST API link.
• Files denotes newly created root node in Firebase Realtime Database.
• hostingEnvironment.ContentRootPath + \\FirebaseRealtimeDBHelper\\access_key.json
denotes service account key path which has authentication key for the Firebase Realtime
Database data.
After configuring the Firebase Realtime Database service link, build and run the project. Now, the
project will be hosted in http://localhost:{port} and just mapping the ajaxSettings property of the File
Manager component to the appropriate controller methods allows to manage the files in the Firebase
Realtime Database.
{% raw %}
`ts
// File Manager sample with IBM COS service.
<div>
<div className="control-section">
<FileManagerComponent id="file"
ajaxSettings = {{
// Replace the hosted port number in the place of "{port}"
url="http://localhost:{port}/api/FirebaseProvider/FirebaseRealtimeFileOperations",
downloadUrl="http://localhost:{port}/api/FirebaseProvider/FirebaseRealtimeDownload",
uploadUrl="http://localhost:{port}/api/FirebaseProvider/FirebaseRealtimeUpload",
getImageUrl="http://localhost:{port}/api/FirebaseProvider/FirebaseRealtimeGetImage"
}} >
</FileManagerComponent>
</div>
</div>
`
{% endraw %}
> Note: To learn more about the file actions that can be performed with Firebase Realtime Database file
system provider, refer to this link
IBM Cloud Object Storage file provider
The IBM Cloud Object Storage file provider module allows you work with the IBM Cloud Object Storage.
It also provides the methods for performing various file actions such as creating a new folder, renaming
files, and deleting files. The IBM Cloud Object Storage file provider serves the file provider support for
the File Manager component with the IBM Cloud Object Storage. We can make use of IBM Cloud Object
Storage file provider by installing theej2-filemanager-ibm-cos-node-file-providernpm package or by
cloning the file provider from the GitHub.
Using ej2-filemanager-ibm-cos-node-file-provider npm package
`ts
npm install @syncfusion/ej2-filemanager-ibm-cos-node-file-provider
`
`ts
git clone https://github.com/SyncfusionExamples/filemanager-ibm-cos-node-file-provider.git
`
• After cloning, open the root folder and run the command npm install command.
To set the port in which the project to be hosted. Run the following command.
`ts
set PORT=3000 && node index.js
`
Note: By default, the service will run 8090 port.
Now, just mapping the ajaxSettings property of the FileManager component to the appropriate file
operation methods in the index.js file will allow to manage the IBM Cloud Object Storage.
{% raw %}
`ts
// File Manager sample with IBM COS service.
<div>
<div className="control-section">
<FileManagerComponent id="file"
ajaxSettings = {{
url="http://localhost:{port}/",
downloadUrl="http://localhost:{port}/Download",
uploadUrl="http://localhost:{port}/Upload",
getImageUrl="http://localhost:{port}/GetImage"
}} >
</FileManagerComponent>
</div>
</div>
`
{% endraw %}
Note: To learn more about the file actions that can be performed with IBM Cloud Object Storage file
provider, refer to this link
|Tooltip-Details|Details|
|Tooltip-SelectAll|Select all|
|Name|Name|
|Size|Size|
|DateModified|Modified|
|DateCreated|Date created|
|Path|Path|
|Created|Created|
|Modified|Modified|
|Location|Location|
|Type|Type|
|Permission|Permission|
|Ascending|Ascending|
|Descending|Descending|
|None|None|
|View-LargeIcons|Large icons|
|View-Details|Details|
|Search|Search|
|Button-Ok|OK|
|Button-Cancel|Cancel|
|Button-Yes|Yes|
|Button-No|No|
|Button-Create|Create|
|Button-Save|Save|
|Header-NewFolder|Folder|
|Content-NewFolder|Enter your folder name|
|Header-Rename|Rename|
|Content-Rename|Enter your new name|
|Header-Rename-Confirmation|Rename Confirmation|
|Content-Rename-Confirmation|If you change a file name extension| the file might become unstable.
Are you sure you want to change it?|
|Header-Delete|Delete File|
|Content-Delete|Are you sure you want to delete this file?|
"View-Details": "Einzelheiten",
"Search": "Suche",
"Button-Ok": "OK",
"Button-Cancel": "Stornieren",
"Button-Yes": "Ja",
"Button-No": "Nein",
"Button-Create": "Erstellen",
"Button-Save": "Sparen",
"Header-NewFolder": "Mappe",
"Content-NewFolder": "Geben Sie Ihren Ordnernamen ein",
"Header-Rename": "Umbenennen",
"Content-Rename": "Geben Sie Ihren neuen Namen ein",
"Header-Rename-Confirmation": "Bestätigung umbenennen",
"Content-Rename-Confirmation": "Wenn Sie eine
Dateinamenerweiterung ändern, wird die Datei möglicherweise instabil.
Möchten Sie sie wirklich ändern?",
"Header-Delete": "Datei löschen",
"Content-Delete": "Möchten Sie diese Datei wirklich löschen?",
"Header-Multiple-Delete": "Mehrere Dateien löschen",
"Content-Multiple-Delete": "Möchten Sie diese {0} Dateien
wirklich löschen?",
"Header-Folder-Delete": "Lösche Ordner",
"Content-Folder-Delete": "Möchten Sie diesen Ordner wirklich
löschen?",
"Header-Duplicate": "Datei / Ordner existiert",
"Content-Duplicate": "{0} existiert bereits. Möchten Sie
umbenennen und einfügen?",
"Header-Upload": "Daten hochladen",
"Error": "Error",
"Validation-Empty": "Der Datei - oder Ordnername darf nicht leer
sein.",
"Validation-Invalid": "Der Datei- oder Ordnername {0} enthält
ungültige Zeichen. Bitte verwenden Sie einen anderen Namen. Gültige Datei-
oder Ordnernamen dürfen nicht mit einem Punkt oder Leerzeichen enden und
keines der folgenden Zeichen enthalten: \\ /: *? \" < > | ",
"Validation-NewFolder-Exists": "Eine Datei oder ein Ordner mit
dem Namen {0} existiert bereits.",
"Validation-Rename-Exists": "{0} kann nicht in {1} umbenannt
werden: Ziel existiert bereits.",
"Folder-Empty": "Dieser Ordner ist leer",
"File-Upload": "Dateien zum Hochladen hierher ziehen",
"Search-Empty": "Keine Ergebnisse gefunden",
"Search-Key": "Versuchen Sie es mit anderen Stichwörtern",
"Filter-Empty": "keine Ergebnisse gefunden",
"Filter-Key": "Versuchen Sie es mit einem anderen Filter",
"Sub-Folder-Error": "Der Zielordner ist der Unterordner des
Quellordners.",
"Same-Folder-Error": "Der Zielordner ist derselbe wie der
Quellordner.",
"Access-Denied": "Zugriff verweigert",
"Access-Details": "Sie haben keine Berechtigung, auf diesen
Ordner zuzugreifen.",
"Header-Retry": "Die Datei existiert bereits",
"Content-Retry": "In diesem Ordner ist bereits eine Datei mit
diesem Namen vorhanden. Was möchten Sie tun?",
"Button-Keep-Both": "Behalte beides",
"Button-Replace": "Ersetzen",
"Button-Skip": "Überspringen",
"ApplyAll-Label": "Mache das für alle aktuellen Artikel",
"KB": "KB",
"Access-Message": "{0} ist nicht zugänglich. Sie benötigen die
Berechtigung, um die Aktion {1} auszuführen.",
"Network-Error": "NetworkError: Fehler beim Senden auf
XMLHTTPRequest: Fehler beim Laden",
"Server-Error": "ServerError: Ungültige Antwort von"
}
}
});
function App() {
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div className="control-section">
<FileManagerComponent id="file" view="Details" locale='de'
ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { L10n } from '@syncfusion/ej2-base';
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar,Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
// Load Locale text to FileManager component
L10n.load({
'de': {
'filemanager': {
"NewFolder": "Neuer Ordner",
"Upload": "Hochladen",
"Delete": "Löschen",
"Rename": "Umbenennen",
"Download": "Herunterladen",
"Cut": "Schnitt",
"Copy": "Kopieren",
"Paste": "Einfügen",
"SortBy": "Sortiere nach",
"Refresh": "Aktualisierung",
"Item-Selection": "Artikel ausgewählt",
"Items-Selection": "Elemente ausgewählt",
"View": "Aussicht",
"Details": "Einzelheiten",
"SelectAll": "Wählen Sie Alle",
"Open": "Öffnen",
"Tooltip-NewFolder": "Neuer Ordner",
"Tooltip-Upload": "Hochladen",
"Tooltip-Delete": "Löschen",
"Tooltip-Rename": "Umbenennen",
"Tooltip-Download": "Herunterladen",
"Tooltip-Cut": "Schnitt",
"Tooltip-Copy": "Kopieren",
"Tooltip-Paste": "Einfügen",
"Tooltip-SortBy": "Sortiere nach",
"Tooltip-Refresh": "Aktualisierung",
"Tooltip-Selection": "Auswahl aufheben",
"Tooltip-View": "Aussicht",
"Tooltip-Details": "Einzelheiten",
"Tooltip-SelectAll": "Wählen Sie Alle",
"Name": "Name",
"Size": "Größe",
"DateModified": "Geändert",
"DateCreated": "Datum erstellt",
"Path": "Pfad",
"Modified": "Geändert",
"Created": "Erstellt",
"Location": "Ort",
"Type": "Art",
"Permission": "Genehmigung",
"Ascending": "Aufsteigend",
"Descending": "Absteigend",
"None": "Keiner",
"View-LargeIcons": "Große Icons",
"View-Details": "Einzelheiten",
"Search": "Suche",
"Button-Ok": "OK",
"Button-Cancel": "Stornieren",
"Button-Yes": "Ja",
"Button-No": "Nein",
"Button-Create": "Erstellen",
"Button-Save": "Sparen",
"Header-NewFolder": "Mappe",
"Content-NewFolder": "Geben Sie Ihren Ordnernamen ein",
"Header-Rename": "Umbenennen",
"Content-Rename": "Geben Sie Ihren neuen Namen ein",
"Header-Rename-Confirmation": "Bestätigung umbenennen",
"Content-Rename-Confirmation": "Wenn Sie eine Dateinamenerweiterung
ändern, wird die Datei möglicherweise instabil. Möchten Sie sie wirklich
ändern?",
"Header-Delete": "Datei löschen",
"Content-Delete": "Möchten Sie diese Datei wirklich löschen?",
"Header-Multiple-Delete": "Mehrere Dateien löschen",
"Content-Multiple-Delete": "Möchten Sie diese {0} Dateien wirklich
löschen?",
"Header-Folder-Delete": "Lösche Ordner",
"Content-Folder-Delete": "Möchten Sie diesen Ordner wirklich
löschen?",
"Header-Duplicate": "Datei / Ordner existiert",
"Content-Duplicate": "{0} existiert bereits. Möchten Sie umbenennen
und einfügen?",
"Header-Upload": "Daten hochladen",
"Error": "Error",
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import { FileManagerComponent, Inject, NavigationPane, DetailsView, Toolbar,
Virtualization } from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
/**
* File Manager virtualization feature sample
*/
function App() {
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
function onBeforeSend(args) {
args.ajaxSettings.beforeSend = function (args) {
args.httpRequest.setRequestHeader('Authorization',
'FileBrowser');
};
}
function beforeImageLoad(args) {
args.imageUrl = args.imageUrl + '&rootName=' + 'FileBrowser';
}
function beforeDownload(args) {
args.data.rootFolderName = 'FileBrowser';
}
return(
<div>
<div className="control-section">
<FileManagerComponent id="filemanager"
ajaxSettings = {{
url: hostUrl + "api/FileManager/FileOperations",
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
downloadUrl: hostUrl + 'api/FileManager/Download'
}}
view = {"Details"}
enableVirtualization = {true}
beforeSend={onBeforeSend.bind(this)}
beforeImageLoad={beforeImageLoad.bind(this)}
beforeDownload={beforeDownload.bind(this)}>
<Inject services={[ NavigationPane, DetailsView, Toolbar,
Virtualization]} />
</FileManagerComponent>
</div>
</div>
);
};
export default App;
{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
• Programmatic selection using the selectAll method is not supported with virtual scrolling.
• The keyboard shortcut CTRL+A will only select the files and directories that are currently visible
within the viewport, rather than selecting all files and directories in the entire directory tree.
• Selected file items are not maintained while scrolling, considering the performance of the
component.
display: inline-block;
margin: 0.5em 0;
}
</style>
<div><img src="https://cdn.syncfusion.com/content/images/documentation/full.png" alt="Yes"> - All
features of the component meet the requirement.</div>
<div><img src="https://cdn.syncfusion.com/content/images/documentation/partial.png"
alt="Intermediate"> - Some features of the component do not meet the requirement.</div>
<div><img src="https://cdn.syncfusion.com/content/images/documentation/not-supported.png"
alt="No"> - The component does not meet the requirement.</div>
WAI-ARIA attributes
The File Manager component followed the WAI-ARIA patterns to meet the accessibility. The following
ARIA attributes are used in the File Manager component:
| Attributes | Purpose |
| --- | --- |
| role | Used to convey a significant and contextual message to the user. |
| aria-disabled | Indicates whether the File Manager component is in disabled state.|
| aria-haspopup | Indicates whether the toolbar item has a popup list or not. |
| aria-orientation | Indicates whether the File Manager element is oriented horizontally or vertically. |
| aria-expanded | Indicates whether the Treeview node has been expanded. |
| aria-owns | Contains the ID of the suggestion list to indicate popup as a child element. |
| aria-activedescendent | Holds the ID of the active list item to focus its descendant child element. |
| aria-level | Specifies the level of the element in Treeview Structure. |
| aria-selected | Indicates whether a particular node is in selected state. |
| aria-placeholder | Represents a hint (word or phrase) to the user about what to enter in the text
field. |
| aria-label | Provides an accessible name for the element. |
| aria-checked | Indicates whether the checkbox is in checked state. |
| aria-labelledby | Provides a label for the dialog. Typically, the "aria-labelledby" attribute will contain
the id of the element used as the dialog's title. |
| aria-describedby | This attribute points to the Dialog element describing the one it's set on. |
| aria-modal | Indicates whether an element is a modal when display. |
| aria-colcount | Specifies the number of columns in full table. |
| aria-colindexnt | Defines the number of columns within a table in details view. |
| aria-rowspan | Defines the number of rows a cell spanned within a table in details view. |
| aria-colspan | Defines the number of columns a cell spanned within a table in details view. |
| aria-sort | Indicates whether items in the table are sorted in ascending or descending order. |
| aria-grabbed | When the folder/file item is chosen for dragging, the aria-grabbed attribute is set to
"true." If it's set to "false," the element can be grabbed for drag-and-drop, but it won't be actively held.
|
| aria-busy | This attribute is set to false when table content is loaded. |
| aria-multiselectable | Defines more than one item has been selected. |
Keyboard interaction
The File Manager component followed the keyboard interaction guidelines, making it easy for people
who use assistive technologies (AT) and those who completely rely on keyboard navigation. The
following keyboard shortcuts are supported by the File Manager component.
| Press | To do this |
| --- | --- |
| Page Down | Scrolls down to the next folder or file and selects the first item when files are
loaded. |
| Page Up | Scrolls up to previous folder and select the first item when files are loaded. |
| Enter | Selects the focused item and navigate through the child elements. |
| Tab | Focuses on the first element of toolbar and navigates through the next tab indexed
element. |
| Esc(Escape) | Closes the image when it is in open state. |
| Alt+N | Creates a new folder dialog.|
| F5 | Refresh the file manager element. |
| Home | Navigate through the first element of details view or large icons view. |
| End | Navigate through the last element of details view or large icons view. |
| Move Left | Scrolls left to the previous folder and select the first item when files are loaded |
| Move Right | Scrolls right to the previous folder and select the first item when files are loaded
|
| Alt+Enter | Shows the get details info for selected folder. |
| Shift+Right | Allows multiselection. Select the file or folder at the right of the previously
selected folder. |
| Shift+Left | Allows multiselection. Select the file or folder at the left of the previously selected
folder. |
| Shift+Down | Allows multiselection. Select the file or folder till the focused index. |
| Shift+Delete | Permanently deletes the selected file or folder in the file manager element. |
| Delete | Deletes the selected file or folder in the file manager element. |
| Shift+Up | Allows multiselection. Select the file or folder till the focused index. |
| Ctrl+C | Copies the selected file or folder in the file manager element. |
| Ctrl+V | Pastes the copied/cut file or folder in the file manager element. |
| Ctrl+X | Cuts the selected file or folder in the file manager element. |
| Ctrl+A | Select all the files or folders in the details view or large icons view. |
| F2 | Creates a rename dialog for a selected file or folder in the file manager element. |
| Shift+F10 | Opens the context menu for the selected file or folder in the file manager
element. |
| Ctrl+D | Downloads the list of selected files or folders in the file manager element. |
| Ctrl+Shift+1 | Changes the file manager layout to details view. |
| Ctrl+Shift+2 | Changes the file manager layout to large icons view. |
Ensuring accessibility
The File Manager component's accessibility levels are ensured through an accessibility-checker and axe-
core software tools during automated testing.
The accessibility compliance of the File Manager component is shown in the following sample. Open the
sample in a new window to evaluate the accessibility of the File Manager component with accessibility
tools.
See also
• Access Rules
• Permissions
Access Rules
The FileAccessController allows you to define security permissions for folders and files using a set of
folder or file access rules.
To set up access rules for folders (including their files and sub-folders) and individual files, use the
SetRules() method in the controller. The following table represents the AccessRule properties available
for file and folder:
| Properties | Applicable for file | Applicable for folder | Description |
| --- | --- | --- | --- |
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, Inject, NavigationPane,
Toolbar} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj: FileManagerComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div>
<div className="control-section">
<FileManagerComponent ref={ s => (fileObj = s as
FileManagerComponent)} id="file"
ajaxSettings = {{
downloadUrl: hostUrl +'api/FileManagerAccess/Download',
getImageUrl: hostUrl +'api/FileManagerAccess/GetImage',
uploadUrl: hostUrl +'api/FileManagerAccess/Upload',
url: hostUrl + 'api/FileManagerAccess/FileOperations'
}} view={"Details"}>
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
How To
Adding custom item to context menu in React File manager component
The context menu can be customized using the contextMenuSettings, menuOpen, and menuClick
events.
The following example shows adding a custom item in the context menu.
The contextMenuSettings is used to add new menu item. The menuOpen event is used to add the icon
to the new menu item. The menuClick event is used to add an event handler to the new menu item.
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj;
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
function menuClick(args) {
if (args.item.text === 'Custom') {
alert('You have clicked custom menu item');
}
}
function menuOpen(args) {
for (const i in args.items) {
if (args.items[i].id === fileObj.element.id + '_cm_custom') {
args.items[i].iconCss = 'e-icons e-fe-tick';
}
}
}
return (<div>
<div className="control-section">
<FileManagerComponent ref={s => (fileObj = s)} id="file"
view="Details" ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} contextMenuSettings={{
file: ['Open', '|', 'Delete', 'Rename', '|', 'Details',
'Custom'],
folder: ['Open', '|', 'Delete', 'Rename', '|', 'Details',
'Custom'],
layout: ['SortBy', 'View', 'Refresh', '|', 'NewFolder',
'Upload', '|', 'Details', '|', 'SelectAll', 'Custom'],
}} menuClick={menuClick} menuOpen={menuOpen}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj: FileManagerComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
function menuClick(args: any): void {
if (args.item.text === 'Custom') {
alert('You have clicked custom menu item')
}
}
function menuOpen(args: any): void {
for(const i in args.items) {
if(args.items[i].id === fileObj.element.id +'_cm_custom') {
args.items[i].iconCss= 'e-icons e-fe-tick';
}
}
}
return (
<div>
<div className="control-section">
<FileManagerComponent ref={ s => (fileObj = s as
FileManagerComponent)} id="file" view="Details"
ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}
contextMenuSettings = {{
file: ['Open', '|', 'Delete', 'Rename', '|', 'Details',
'Custom'],
folder: ['Open', '|', 'Delete', 'Rename', '|', 'Details',
'Custom'],
layout: ['SortBy', 'View', 'Refresh', '|', 'NewFolder',
'Upload', '|', 'Details', '|', 'SelectAll', 'Custom'],
}}
menuClick={menuClick} menuOpen={menuOpen} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]} />
</FileManagerComponent>
</div>
</div>
);
}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
function onChange(args) {
if (args.checked) {
fileObj.selectAll();
checkbox.label = 'Unselect All';
}
else {
fileObj.clearSelection();
checkbox.label = 'Select All';
}
}
return (<div>
<div className="control-section">
<FileManagerComponent ref={s => (fileObj = s)} id="file"
view="Details" ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}>
<ToolbarItemsDirective>
<ToolbarItemDirective name= 'NewFolder' text= 'Create
folder' prefixIcon= 'e-plus' tooltipText= 'Create folder'/>
<ToolbarItemDirective name= 'Upload'/>
<ToolbarItemDirective name= 'SortBy'/>
<ToolbarItemDirective name= 'Refresh'/>
<ToolbarItemDirective name= 'Cut'/>
<ToolbarItemDirective name= 'Copy'/>
<ToolbarItemDirective name= 'Paste'/>
<ToolbarItemDirective name= 'Delete'/>
<ToolbarItemDirective name= 'Download'/>
<ToolbarItemDirective name= 'Rename'/>
<ToolbarItemDirective name= 'Select'
template={checkboxTemplate}/>
<ToolbarItemDirective name= 'Selection'/>
<ToolbarItemDirective name= 'View'/>
<ToolbarItemDirective name= 'Details'/>
</ToolbarItemsDirective>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject,
ToolbarItemsDirective, ToolbarItemDirective } from '@syncfusion/ej2-react-
filemanager';
import { CheckBoxComponent, ChangeEventArgs } from '@syncfusion/ej2-react-
buttons';
import * as React from 'react';
function App() {
let fileObj: FileManagerComponent;
let checkbox: CheckBoxComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
function checkboxTemplate() {
return (
<CheckBoxComponent ref={ scope => ((checkbox as any) = scope as
CheckBoxComponent)} label="Select All" checked={false} change={onChange} />
);
}
function onChange(args: ChangeEventArgs) {
if (args.checked) {
fileObj.selectAll();
checkbox.label = 'Unselect All';
}
else {
fileObj.clearSelection();
checkbox.label = 'Select All';
}
}
return (
<div>
<div className="control-section">
<FileManagerComponent ref={ s => ((fileObj as any) = s as
FileManagerComponent)} id="file" view="Details"
ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}>
<ToolbarItemsDirective>
<ToolbarItemDirective name= 'NewFolder' text= 'Create
folder' prefixIcon= 'e-plus' tooltipText= 'Create folder'/>
<ToolbarItemDirective name= 'Upload'/>
<ToolbarItemDirective name= 'SortBy'/>
<ToolbarItemDirective name= 'Refresh'/>
<ToolbarItemDirective name= 'Cut'/>
<ToolbarItemDirective name= 'Copy'/>
<ToolbarItemDirective name= 'Paste'/>
<ToolbarItemDirective name= 'Delete'/>
<ToolbarItemDirective name= 'Download'/>
<ToolbarItemDirective name= 'Rename'/>
<ToolbarItemDirective name= 'Select'
template={checkboxTemplate}/>
<ToolbarItemDirective name= 'Selection'/>
<ToolbarItemDirective name= 'View'/>
<ToolbarItemDirective name= 'Details'/>
</ToolbarItemsDirective>
<Inject services={[ NavigationPane, DetailsView, Toolbar]}
/>
</FileManagerComponent>
</div>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
function App() {
let fileObj: FileManagerComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
function onEnable() {
fileObj.enableToolbarItems(["newfolder"]);
}
function onDisable() {
fileObj.disableToolbarItems(["newfolder"]);
}
return (
<div>
<ButtonComponent id='enable' style= {{"margin": "10px"}}
onClick={onEnable.bind(this)} cssClass='e-success'>Enable New Folder toolbar
item</ButtonComponent>
<ButtonComponent id='disable' style= {{"margin": "10px"}}
onClick={onDisable.bind(this)} cssClass='e-danger'>Disable New Folder
toolbar item</ButtonComponent>
<div className="control-section">
<FileManagerComponent ref={ s => (fileObj = s as
FileManagerComponent)} id="file" height={"330px"} view="Details"
ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}}
toolbarSettings = {
{ items: ['NewFolder', 'Refresh', 'View', 'Details']}
} >
<Inject services={[ NavigationPane, DetailsView, Toolbar]}
/>
</FileManagerComponent>
</div>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import { FileManagerComponent, Inject, NavigationPane, Toolbar} from
'@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj: FileManagerComponent;
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
return (
<div>
<div className="control-section">
<FileManagerComponent ref={ s => (fileObj = s as
FileManagerComponent)} id="file" showThumbnail={false}
ajaxSettings = {{
downloadUrl: hostUrl +'api/FileManager/Download',
getImageUrl: hostUrl +'api/FileManager/GetImage',
uploadUrl: hostUrl +'api/FileManager/Upload',
url: hostUrl + 'api/FileManager/FileOperations'
}} >
<Inject services={[ NavigationPane, Toolbar]} />
</FileManagerComponent>
</div>
</div>
);
}
export default App;{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import { DetailsView, Inject, FileManagerComponent, NavigationPane, Toolbar
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
import { UploaderComponent } from '@syncfusion/ej2-react-inputs';
import { DialogComponent,AnimationSettingsModel } from '@syncfusion/ej2-
react-popups';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
function App() {
let fileUploadObj: UploaderComponent;
let dialogObj: DialogComponent;
let filemanagerObj: FileManagerComponent;
let animationSettings:AnimationSettingsModel = { effect: 'None' };
// 'Uploader' will be shown, if Dialog is closed
function dialogClose(): void {
document.getElementById('uploadFileManager').style.display = 'block';
}
// 'Uploader' will be hidden, if Dialog is opened
function dialogOpen(): void {
document.getElementById('uploadFileManager').style.display = 'none';
}
// File Manager's fileOpen event function
function onFileOpen(args: any): void {
let file = (args as any).fileDetails;
if (file.isFile) {
args.cancel = true;
if (file.size <= 0 ) { file.size = 10000; }
fileUploadObj.files = [{name: file.name, size: file.size, type:
file.type }];
dialogObj.hide();
}
}
function btnClick(): void {
dialogObj.show();
filemanagerObj.path ="/";
filemanagerObj.selectedItems =[];
filemanagerObj.refresh();
}
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
let contextmenuItems: string[] = ['Open', '|', 'Cut', 'Copy', 'Delete',
'Rename', '|', 'Details'];
return (
<div>
<div className="control-section">
<div id='uploadFileManager' className="fileupload">
<UploaderComponent id='fileUpload' type='file' ref = {(scope)
=> {fileUploadObj = scope}}></UploaderComponent>
<ButtonComponent id="openBtn" onClick={ btnClick.bind(this)
}>File Browser</ButtonComponent>
</div>
<div id='target' className="control-section">
<DialogComponent width='850px' id='dialog' target={'#target'}
ref={(scope) => {(dialogObj as any) = scope}} header="Select a file"
showCloseIcon={true}
visible={false} open={dialogOpen.bind(this)}
close={dialogClose.bind(this)} animationSettings={animationSettings} >
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
APP.TSX
{% raw %}
import * as React from 'react';
import { TabComponent, TabItemDirective, TabItemsDirective } from
'@syncfusion/ej2-react-navigations';
import { DetailsView, FileManagerComponent, Inject, NavigationPane, Toolbar
} from '@syncfusion/ej2-react-filemanager';
function App() {
let fileObj: FileManagerComponent;
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
• express
• @azure/storage-blob
• archiver
• body-parser
• cors
• esm
• multer
Open your text editor or integrated development environment (IDE) and create the index.js file start
writing your NodeJS code. This file will serve as the entry point of your application.
`ts
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello, NodeJS!');
});
app.listen(port, () => {
console.log(Server running on http://localhost:${port});
});
`
To start your NodeJS application, simply run the following command in your terminal, pointing to the
entry point file:
`ts
node index.js
`
Initialize container client
We need to first get the BlobServiceClient. By using the connection string, we can obtain the
BlobServiceClient. So, format the connection string as shown below.
`ts
Const connectionString =
DefaultEndpointsProtocol=https;AccountName=${accountName};AccountKey=${accountKey};E
ndpointSuffix=${EndpointSuffix};
`
We can obtain the BlobServiceClient and the containerClient using this connection String and the
BlobServiceClient. the containerName is the container from your Azure blob storage account that you
need to access.
`ts
isFile:false,
type:"Directory",
filterPath:"/",
fmicon: "e-fe-folder",
fmiconClass: "e-fe-folder",
fmid: "fetree0",
fmmodified: "September 14, 2023 19:58"
}
]
}
`
The following table represents the response parameters of read operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|cwd|FileManagerDirectoryContent|-|Path (Current Working Directory) details.|
|files|FileManagerDirectoryContent[]|-|Details of files and folders present in given path or directory.|
|error|ErrorDetails|-|Error Details|
<a id="file-manager-directory-content"></a>
The following table represents the contents of FileManagerDirectoryContent in the file manager
request and response.
|Parameter|Type|Default|Explanation|Is required|
|----|----|----|----|----|
|name|String|-|File name|Yes|
|dateCreated|String|-|Date in which file was created (UTC Date string).|Yes|
|dateModified|String|-|Date in which file was last modified (UTC Date string).|Yes|
|filterPath|String|-|Relative path to the file or folder.|Yes|
|hasChild|Boolean|-|Defines this folder has any child folder or not.|Yes|
|isFile|Boolean|-|Say whether the item is file or folder.|Yes|
|size|Number|-|File size|Yes|
|type|String|-|File extension|Yes|
|permission |AccessRules|-|File extension|Optional|
|caseSensitive|Boolean|-|Defines search is case sensitive or not.|Optional|
|action|String|read|Name of the file operation.|Optional|
0:{
dateCreated: "2023-09-14T11:16:57.000Z"
dateModified: "2023-09-14T11:16:57.000Z"
filterPath: "/Videos/"
hasChild: false
isFile: true
name: "about.txt"
size: 29
type: ".txt"
}
],
error:null
}
`
Get image
Create the app.get method with URL ‘/fileManager/GetImage’.
The following table represents the request parameters of GetImage operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|path|String|-|Relative path to the image file|
The req.query.path contains the exact path of the images. For example: "/Jack.png".
Download the blob (image) from Azure Blob Storage using the blobClient and stores the result in the
downloadResponse variable.
Pipe the readableStreamBody from the blob to the res response. It means the image data will be
streamed from the Azure Blob Storage directly to the client's browser when the image URL is accessed.
Handle the exception if the image is not available in the given path.
Download
Create the app.post method with URL ‘/fileManager/Download’.
The following table represents the request parameters of download operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|download|Name of the file operation|
|path|String|-|Relative path to location where the files to download are present.|
|names|String[]|-|Name list of the items to be downloaded.|
|----|----|----|----|
|action|String|Save|Name of the file operation.|
|path|String|-|Relative path to the location where the file has to be uploaded.|
|uploadFiles|IList<IFormFile>|-|File that are uploaded.|
Example for request:
`ts
{
path: '/Pictures/',
action: 'save',
data: [
0:{
name: 'Pictures',
type: 'File Folder',
isFile: true,
size: 0,
dateModified: '2023-09-14T06:03:52.000Z',
hasChild: true,
filterPath: '',
fmid: 'fetree1',
}
],
filename: 'bird (2).jpg'
}
`
Multer is a popular middleware used to handle file uploads in Express-based web applications. Create
the Multer config to store the upload files in buffer.
`ts
const multerConfig = {
storage: memoryStorage()
};
`
Need to handle the 3 cases here.
• Save
Create the getBlockBlobClient with the req.body.filename. If the blob does not exist, then upload the
data to that blob. If the blob already exists, then create an error message containing "File Already Exists"
and send the response.
Create a new folder
The following table represents the request parameters of create operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|create|Name of the file operation.|
|path|String|-|Relative path in which the folder has to be created.|
|name|String|-|Name of the folder to be created.|
|data|FileManagerDirectoryContent|-|Details about the current path (directory).|
Example for request:
`ts
action: "create",
data: [
0:{
filterPath: "/",
hasChild: true,
isFile: false,
name: "files",
nodeId: "fe_tree",
size: 0,
type: ""
}
],
name: "Hello",
path: "/test/"
`
Check the existence of the folder, If the folder exists then send the error message containing “Folder
already exists”. If it does not exist, then create the folder. Create the folder by creating the file in that
folder’s path.
The following table represents the response parameters of create operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|files|FileManagerDirectoryContent[]|-|Details of the created folder|
|error|ErrorDetails|-|Error Details|
Example for response:
`ts
{
cwd: null,
files: [
0:{
dateCreated: "2023-09-14T10:52:25.000Z",
dateModified: "2023-09-14T10:52:25.000Z",
filterPath: null,
hasChild: false,
isFile: false,
name: "New",
size: 0,
type: "Directory"
}
],
details: null,
error: null
}
`
Rename
The following table represents the request parameters of rename operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|rename|Name of the file operation.|
|path|String|-|Relative path in which the item is located.|
|name|String|-|Current name of the item to be renamed.|
|newName|String|-|New name for the item.|
|data|FileManagerDirectoryContent|-|Details of the item to be renamed.|
Example for request:
`ts
{
action: "rename",
data: [
0:{
dateCreated: "2023-09-14T10:41:17.000Z",
filterPath: "/Pictures/Nature/",
hasChild: false,
iconClass: "e-fe-image",
isFile: true,
name: "seaviews.jpg",
size: 95866,
type: ".jpg"
}
],
newName: "seaview.jpg",
name: "seaviews.jpg",
path: "/Pictures/Nature/"
}
`
Renaming can be done by copy the folder or file from the source blob instance to target blob instance. If
the file exists, then send the error message as response.
The following table represents the response parameters of rename operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|files|FileManagerDirectoryContent[]|-|Details of the renamed item.|
|error|ErrorDetails|-|Error Details|
Example for response:
`ts
{
cwd:null,
files:[
0:{
name:"seaview.jpg",
size:95866,
dateModified:"2023-09-14T11:16:57.000Z",
dateCreated:"2023-09-14T10:41:17.000Z",
hasChild:false,
isFile:true,
type:".jpg",
filterPath:"/Pictures/Nature/"
}
],
error:null,
details:null
}
`
Delete
The following table represents the request parameters of delete operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|delete|Name of the file operation.|
|path|String|-|Relative path where the items to be deleted are located.|
|names|String[]|-|List of the items to be deleted.|
|data|FileManagerDirectoryContent|-|Details of the item to be deleted.|
Example for request:
`ts
{
action: "delete",
path: "/",
names: ["bird.jpg"],
data: [
0:{
dateModified: "2023-09-14T09:12:53.000Z",
filterPath: "/",
hasChild: false,
iconClass: "e-fe-image",
isFile: true,
name: "bird.jpg",
size: 102182,
type: ".jpg"
}
]
}
`
To delete the file, directly get the file instance and delete the file. To delete the folder, we need to get
all files inside that folder and delete all those files.
Handle the null exception if file or folder is not available.
The following table represents the response parameters of delete operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|files|FileManagerDirectoryContent[]|-|Details about the deleted item(s).|
|error|ErrorDetails|-|Error Details|
Example for response:
`ts
{
cwd: null,
details: null,
error: null,
files: [
0:{
dateModified: "2023-09-14T09:12:53.000Z",
filterPath: "/",
hasChild: false,
iconClass: "e-fe-image",
isFile: true,
name: "bird.jpg",
size: 102182,
type: ".jpg"
}
]
}
`
Details
The following table represents the request parameters of details operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|details|Name of the file operation.|
|path|String|-|Relative path where the items are located.|
|names|String[]|-|List of the items to get details.|
|data|FileManagerDirectoryContent|-|Details of the selected item.|
Example:
`ts
{
action: "details",
path: "/FileContents/",
names: ["bird.jpg"],
data: [
0:{
dateModified: "2023-09-14T09:12:53.000Z",
filterPath: "/",
hasChild: false,
iconClass: "e-fe-image",
isFile: true,
name: "bird.jpg",
size: 102182,
type: ".jpg"
}
]
}
`
To get the file and folder details, iterate the req.body.names to get the details of files and folders. If the
data is file, then get the file instance and get the properties using the getProperties method. If the data
is Folder, then get the blobs details under that folder using listBlobsFlat method. Get the required
properties and send final response. Handled the null exception if the file or folder is not available.
The following table represents the response parameters of details operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|details|FileManagerDirectoryContent|-|Details of the requested item(s).|
|error|ErrorDetails|-|Error Details|
Example:
`ts
{
cwd:null,
files:null,
error:null,
details:
{
created: "2023-09-15T06:04:12.000Z"
isFile: true
location: "Files/bird.jpg"
modified: "2023-09-15T06:04:12.000Z"
multipleFiles: false
name: "bird.jpg"
size: "100.0 KB"
}
}
`
Search
The following table represents the request parameters of search operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|search|Name of the file operation.|
|path|String|-|Relative path to the directory where the files should be searched.|
|showHiddenItems|Boolean|-|Defines show or hide the hidden items.|
|caseSensitive|Boolean|-|Defines search is case sensitive or not.|
|searchString|String|-|String to be searched in the directory.|
{
name:"asia",
size:0,
dateModified:"2023-09-14T14:28:27.000Z",
dateCreated:"2023-09-14T11:16:57.000Z",
hasChild:true,
isFile:false,
type:"File Folder",
filterPath:"/"
},
files:[
0: {
dateModified: "2023-09-15T06:22:00.000Z",
filterPath: "/asia/",
hasChild: false,
isFile: true,
name: "about.txt",
size: 42,
type: ".txt"
}
],
error:null,
details:null
}
`
Copy and move
The following table represents the request parameters of copy operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|action|String|copy|Name of the file operation.|
|path|String|-|Relative path to the directory where the files should be copied.|
|names|String[] |-|List of files to be copied.|
|targetPath|String|-|Relative path where the items to be pasted are located.|
fmimageUrl: "http://localhost:3000/GetImage?path=%2Fbird.jpg&time=1694760243307",
fmmodified: "September 15, 2023 11:34",
}
]
}
`
Action name will be move for move action.
The following table represents the response parameters of copy operations.
|Parameter|Type|Default|Explanation|
|----|----|----|----|
|cwd|FileManagerDirectoryContent|-|Path (Current Working Directory) details.|
|files|FileManagerDirectoryContent[]|-|Details of copied files or folders|
|error|ErrorDetails|-|Error Details|
Example for response:
`ts
{
cwd:null,
files:[
0:{
dateCreated: "2023-09-15T06:55:03.000Z"
dateModified: "2023-09-15T06:55:03.000Z"
filterPath: "/asia/"
hasChild: false
isFile: true
name: "bird.jpg"
previousName: null
size: 102182
type: ".jpg"
}
],
error:null,
details:null
}
`
Need to handle two cases.
Create the isRename variable to store the is request is rename or not. If the isRename is false then
check the existence of the folders, and if folder is existing, then send the error message. If isRename is
true, then don’t check the existence of the folder.
To move or copy the folders you need to get all the blobs from that folder and create the new path for
each blob and copy the data from the old path to the new path. To move or copy the files copy the data
from the source blob client to target client. If the action is move then delete the old blob.
Note: To get the complete project, refer to this link
Preselect the items in React File manager component
You can preselect the items in the File Manager component by utilizing the fileLoad event. The required
file and folder names must be stated in the declared string array variable. In the event handler, we have
to assign the array of file and folder names to the selectedItems property.
The following example shows how to preselect the items.
APP.JSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject
} from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj;
let fileNames = [
'Documents',
'EJ2 File Manager.docx',
'EJ2 File Manager.pdf',
'File Manager PPT.pptx'
];
let hostUrl = "https://ej2-aspcore-service.azurewebsites.net/";
function fileLoad(args) {
// Set the array of file names to enable selection.
fileObj.selectedItems = fileNames;
}
return (<div>
<div className="control-section">
<FileManagerComponent ref={s => (fileObj = s)} id="file"
view="Details" ajaxSettings={{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} fileLoad={fileLoad}>
<Inject services={[NavigationPane, DetailsView, Toolbar]}/>
</FileManagerComponent>
</div>
</div>);
}
export default App;
{% endraw %}
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject,
FileLoadEventArgs } from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let fileObj: FileManagerComponent;
let fileNames: string[] = [
'EJ2 File Manager.docx',
'EJ2 File Manager.pdf',
'File Manager PPT.pptx',
'Documents'
];
let hostUrl: string = "https://ej2-aspcore-service.azurewebsites.net/";
function fileLoad(args: FileLoadEventArgs) {
// Set the array of file names to enable selection.
fileObj.selectedItems = fileNames;
}
return (
<div>
<div className="control-section">
<FileManagerComponent ref={ s => ((fileObj as any) = s as
FileManagerComponent)} id="file" view="Details"
ajaxSettings = {{
downloadUrl: hostUrl + 'api/FileManager/Download',
getImageUrl: hostUrl + "api/FileManager/GetImage",
uploadUrl: hostUrl + 'api/FileManager/Upload',
url: hostUrl + "api/FileManager/FileOperations"
}} fileLoad={fileLoad}>
<Inject services={[ NavigationPane, DetailsView, Toolbar]}
/>
</FileManagerComponent>
</div>
</div>
);
}
export default App;
{% endraw %}
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
APP.TSX
{% raw %}
import { DetailsView, FileManagerComponent, NavigationPane, Toolbar, Inject,
sortComparer } from '@syncfusion/ej2-react-filemanager';
import * as React from 'react';
function App() {
let hostUrl : string = "https://ej2-aspcore-service.azurewebsites.net/";
return (<div className="control-section">
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render( <App />, document.getElementById('root') as HTMLElement);
FloatingActionButton
Getting Started with React Floating Action Button Component
This section explains how to create a simple Floating Action Button and demonstrate the basic usage of
the Floating Action Button component in an React environment.
To get start quickly with React Floating Action Button component, you can check on this video:
Dependencies
The list of dependencies required to use the Floating Action Button component in your application is
given below:
`js
|-- @syncfusion/ej2-react-buttons
|-- @syncfusion/ej2-react-base
|-- @syncfusion/ej2-base
|-- @syncfusion/ej2-buttons
`
Installation and Configuration
You can use Create-react-app to setup
the applications. To install create-react-app run the following command.
`bash
npm install -g create-react-app
`
Start a new project using create-react-app command as follows
`
create-react-app quickstart --scripts-version=react-scripts-ts
cd quickstart
`
`
create-react-app quickstart
cd quickstart
`
'react-scripts-ts' is used for creating React app with typescript.
Adding Syncfusion packages
All the available Essential JS 2 packages are published in npmjs.com public registry.
To install Floating Action Button component, use the following command
`bash
npm install @syncfusion/ej2-react-buttons --save
`
Adding Floating Action Button Component to the Application
To include the Floating Action Button component in your application import
the FabComponent from ej2-react-buttons package in App.tsx.
Add the Floating Action Button component in application as shown in below code example.
`ts
{ / Import the Floating Action Button / }
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import './App.css';
{ / To render Floating Action Button. / }
function App() {
return (
<FabComponent id='fab'></FabComponent>
);
}
export default App;
`
Adding CSS reference
Import the Floating Action Button component's required CSS references as follows in src/App.css.
`css
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-buttons/styles/material.css";
`
Running the application
Run the application in the browser using the following command:
`
npm start
`
The following example shows a basic Floating Action Button component.
APP.JSX
{% raw %}
import { enableRipple } from '@syncfusion/ej2-base';
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
enableRipple(true);
function App() {
return (<div>
<div id="targetElement" style={{ position: 'relative',
minHeight: '350px', border: '1px solid' }}></div>
{/* To render Floating Action Button with position. */}
<FabComponent id='fab' content='Add'
target='#targetElement'></FabComponent>
</div>);
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
APP.TSX
{% raw %}
import { enableRipple } from '@syncfusion/ej2-base';
Click event
The floating action button control triggers the onclick event when you click on the floating action
button. You can use this event to perform the required action.
APP.JSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
function App() {
function onClick() {
alert("Edit is clicked!");
}
return (<div>
<div id="targetElement" style={{ position: 'relative',
minHeight: '350px', border: '1px solid' }}></div>
{/* To render Floating Action Button */}
<FabComponent id='fab' iconCss='e-icons e-edit' content='Edit'
onClick={onClick} target='#targetElement'></FabComponent>
</div>);
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
APP.TSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
function App() {
function onClick(): void {
alert("Edit is clicked!");
}
return (
<div>
<div id="targetElement" style={{ position: 'relative',
minHeight: '350px', border: '1px solid' }}></div>
{/* To render Floating Action Button */ }
<FabComponent id='fab' iconCss='e-icons e-edit' content='Edit'
onClick={onClick} target='#targetElement'></FabComponent>
</div>
);
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
INDEX.CSS
/* Represents the styles for loader */
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
APP.TSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
function App() {
return (
<div>
<div id="targetElement" style={{ position: 'relative',
minHeight: '350px', border: '1px solid' }}></div>
{/* To render Floating Action Button */}
<FabComponent id='fab' iconCss='fab-icons fab-icon-people'
content='Contacts' iconPosition='Right'
target='#targetElement'></FabComponent>
</div>
);
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
INDEX.CSS
/* Represents the styles for loader */
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
/* Represents the styles for fab icon */
@font-face {
font-family: 'fab-icons';
src: url(data:application/x-font-ttf;charset=utf-
8;base64,AAEAAAAKAIAAAwAgT1MvMj1tSgIAAAEoAAAAVmNtYXDnYOfNAAAByAAAAFZnbHlmkfZ
LRAAAAkgAABboaGVhZCF5f3EAAADQAAAANmhoZWEIUQQTAAAArAAAACRobXR4SAAAAAAAAYAAAAB
IbG9jYTveNR4AAAIgAAAAJm1heHABIQIXAAABCAAAACBuYW1lkwSegQAAGTAAAAIxcG9zdKKfPWY
AABtkAAAAzQABAAAEAAAAAFwEAAAAAAAD9AABAAAAAAAAAAAAAAAAAAAAEgABAAAAAQAAbzQqW18
PPPUACwQAAAAAAN8znUAAAAAA3zOdQAAAAAAD9AP0AAAACAACAAAAAAAAAAEAAAASAgsABQAAAAA
AAgAAAAoACgAAAP8AAAAAAAAAAQQAAZAABQAAAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA5wDnEAQAAAAAXAQAAAAAAAABAAAAAAAABAAAAAQAAAA
EAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQ
AAAAEAAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABABCAAAABAAEAAEAAOcQ//8AAOcA//8AAAABAAQ
AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAAAAAAAABpAPmBFQEggSaBK4FQAX
sBrgG1AfcCBAI5gj8CR4KPAt0AAAABAAAAAAD9APoAD0AewC5AXAAACUfCRUPDiMvDjU/Dh8CAR8
LFQ8OIy8PPw4XAR8LHQEPDi8OPQE/DDMXJw8KHQEfAgUvCSsBDw4VHw4zPwcBDwEdAR8NPw41Lw4
jDwkBNzUvASUfCTM/DT0BLw4rAQ8BA5AGBgYFBAQDAgIBAQECAwMFBAUGBgcHBwgHCAcIBwcHBgY
GBQQEAwICAQEBAgMDBQQGBQYHBwcKCwoJCv0nBwcGBgYFBAQDAwIBAQECAgQEBQUFBgcHBwcHCAc
ICAcHBgYGBQQEAwMBAQEBAQIDAwQEBgUGBwkICQoLAtwHBwcGBQUFBAMCAgEBAgMDBAUFBgYGBwg
HBwgIBwcIBwYGBQUFBAMCAgEBAgMDBAUFBQcGCQkJCQxMDAsKCQgHBgUDAgEBAQP+HwYHCAgICQk
KDQ4ODQ4NDAwMCwoJCAcHBAQCAQIDBQYHCAgKCwwMDQoLCgoREBAPDg0MCgHdAgICAgQGBggJCQs
MEBESERMSDQwMCwsJCAgGBQQCAQIDBAYGCAkJCwwMDQ0NDQ4NDgoKCQkJCAcH/h4CAQMB4gcOBwg
JCQkKCwoLEBAQEAsLCwkIBwYFAwMCAwUFBwgJCgsLDA0KCgoKEREQ2QQEBQYGBgYHBwcHBwcHBwY
HBQUFBAMDAgIBAQECAgQEBAUFBgYHBwcHBwcHBwYHBgYFBAQEAwICAQECAwFvAgMEBAUGBQcGBwc
HBwcHBwcHBgUFBQQEAwICAQEBAgIDBAQFBQYGBwcHBwcHBwcHBgYGBQUEBAMDAQEBAV0DAwQEBQU
GBgcHBggHBwcHBgcGBgUEBQMDAwEBAQEBAgIEAwUEBgYGBgcHBwcHBwcHBwYFBQUEBAMDAgEsBwc
ICgoLCwwKCQkKCQkJCeoHBgYFBQUEAwMDAgMEBQcHCAkLCgwNDA0NDA0MDAwLCwkJBwcGBAMCAQE
CBQYICQsM/v8IERAJCAgNCwsLCQkIBwgFAwEBAwQFBggICQoLDAwMDA0NDA0MDAsLCQkIBwYEBAI
BAgIDBAQFBgYHBwEDDg0NDewHDAUFBAQDAwIBAQMEBwYICAkKCwwMDA0NDA0MDAwLCwkJCAYGBAM
CAQMEAAAABQAAAAAD7wP0AD8AfwEQAVACCgAAARUPDSsBLw4/DjsBHw0FFQ8NKwEvDT0BPw07AR8
NAR8QFQcvAiMPDx8HDwcjLwc/By8PDwMvAj8QHw8/DycVDw0rAS8NPQE/DTsBHw0nDxUdAR8DDwg
fDjsBPwIfDjsBPw4fAjsBPw4vCD8CPQEvLSMPDgOxAgIDBAUFBwYHCAgJCQkKCQoJCAgIBwcGBgQ
EAwMBAQEBAwMEBAYGBwcICAgJCgkKCQkJCAgHBgcFBQQDAgL9WQEDAwQFBQYHBwgICAkKCQoJCQk
ICAcHBgUFBAMCAgICAwQFBQYHBwgICQkJCgkKCQgICAcHBgUFBAMDAQGEDg0aGRcWFBMSDw4MCQg
GAwEDDAwMDBAPDw4ODQwLCgkIBwUEAgEBAgMFBgcIDRAaGhwcHR4eHh4dHR0bGxoQDQgHBgUDAgE
BAgQFBwgJCgsMDQ4ODw8QDAwMDAECAQEDBQcJCgwODxETExULFxkQBgYGBggICQkKCgsLDAwMDA4
NDQwMDAsKCggJBwcFBQQ6AgIDBAUFBgcHCAgICQoJCgkJCQgIBwcGBQUEAwICAgIDBAUFBgcHCAg
JCQkKCQoJCAgIBwcGBQUEAwIC+AEXDw8ODhoZGBYUEhAOCwoEAwMCAgEBAgMDBgoJCAYFBAMBAQM
EBQYICQoLDA0ODg8QEA4NDg8PEBAQERIREhISExMSFBMTExITEhITERIREREREBAPFg8ODQ4QEA8
ODg0MCwoJCAYFBAMBAQMEBQYICQoGBQICAQIDAwQEBQYGBwgICQkKCgsMDAwNDQ4ODw8PEBAQGgQ
EBQcHCAkKCwsLDQ0NDQ4PDg4NDQwLCwkJCQcGBQQBAAoJCQkICAcHBgUFBAMCAgICAwQFBQYHBwg
ICQkJCgkKCQgICAcHBgUFBAMDAQEDAwQFBQYHBwgICAkKCQoJCQkICAcHBgUFBAMCAgICAwQFBQY
HBwgICQkJCgkKCQgICAcHBgUFBAMDAQEDAwQFBQYHBwgICAkKAigGBg4PERMUFhYZGRobHBwdHRs
bAwICAQIEBQcICQoLDA0NDw8PEA8PDg0NDQsPCw8NCwkHBAICBAcJCwwPCxALDQ0NDg8PEA8PDw0
NDAsKCQgHBQQCAQEBAgMKFhYbGxsaGhkYFxYVFBMRCA8OBxALCgkJCQgHBgYFBAMDAQEBAgIEBQY
GCAgJCgoLCwwOJgoJCQkICAcHBgUFBAMCAgICAwQFBQYHBwgICQkJCgkKCQgICAcHBgUFBAMDAQE
DAwQFBQYHBwgICAkKDgcKBwgICRMVFxgZGxwdHx8PEBEQEBEQExMTEwwFCwwNDg4PDxAQEA8ODg0
MCwoJCAYFBAMCAwUMCwoJCQgHBwYFBAQDAgEBAgMDBAUGBgcICAkJCxAFAwIDBAUHBwkKDAwNDQ8
OEBAQDw8PDQ0MCwUYFRUWEhESERERERAREA8QDw8ODg4NDQ0MDAsKCgoJCAgIBgkQDQwMCwoKCAg
HBwUEAwIBAgMEBgYICAoKCwsNDA4AAAMAAAAAA/QD9AAHACoAUAAACQEVMwERIRElMx8ODwcBBzU
BPwUnByERIRE/CDUvDg8GApn+D8MB7fzyAyMIBwcGBwYFBgYEAwMCAQEBAQEBAgMDBAX9rmkCVwY
GBwcHB1o1/TUDijkJBwYGBAMBAQIDAwUGCAgMCwsMDQ0ODg0ODQ0MCwsDWP4QwAHz/a8DDl0BAgI
DBAQFBgYFBgcGBgcGBwYGBgYFBv2oAWgCVgUEAwICARY1/HYCzjoKCgsLDAwMDAwMDAwLCwoKDAg
HBgUDAgEBAgMFBgcIAAADAAAAAAP0A/QAAgAGABkAADclJzcXASc3Bxc/AzUvBw8CDAEk6jvpAdP
qqW7pcgUEAgIEBaYICQkKCQkJDDrqOukB0umpbulyCAkKCQoJCKYHBAMBAQMEAAAAAAEAAAAAA/Q
D9AALAAABIRUhETMRITUhESMBwv5KAbZ8Abb+SnwCPnz+SgG2fAG2AAEAAAAAA/MDDwAFAAATFwk
BNwEMLAHKAcYs/g4BHSwBxv48LQHvAAABAAAAAAP0A/QAgQAAEw8TFR8cPxw1LxMPDS8NB+0JCRM
TEhMREhAQDg0LCgQEAwIDAQICAwMFBQYGCAgKCgsMDg4PEBETExUWFxgZNzxBQTw3GRgXFhUTExE
QDw4ODAsKCggIBgYFBQMDAgIBAwIDBAQKCw0OEBASERMSExMfFx8TEhEQDw4ODQwMDBcXFxcMDAw
NDg4PEBESEyAXA/EBAgUGCQsMDxETFBcZGw4PDxAQETsQERARERISEhISExMUExQUFRQVFhUWFhc
XFy8wMjIwLxcXFxYWFRYVFBUUFBMUExMSEhISEhEREBEQOxEQEA8PDhsZFxQTEQ8MCwkGBQUBAQE
DBAUGBwgJCQsLGRwcGQsLCQkIBwYFBAMBAQEAAAAAAgAAAAADOwP0AEAAlAAAAR0BDw4vDz8PHw4
FFxUfBgEbAT8HNS8dKwEPHQKiAwQFBwgJCwsNDQ4PEBARERAQDw4NDQsLCQgHBQQDAQEDBAUHCAk
LCw0NDg8QEBEQEA8PDg4MDAsJCAcGBAP+IgEDBAYHCAoLAQqJhAoJCAcFAgQBAQIDAwQFBgYHCAg
JCQoLCgwMDA0NDg4ODw8PEBAQEBAQEBAPDw8ODg4NDQwMCwsLCgkJCAgHBgYFBAMDAgECvAkIDw8
PDgwMCwoJCAcFBAIBAQIEBQcICQoLDAwODw8PERAPDw8ODAwLCgkIBwUEAgEBAgQGBggKCgsMDQ0
PDw8GCwsVFRQUExMR/eYBEAEKERMTFBQKFRYbDw8PDw8ODQ4NDQwMCwsLCgkJCQcIBgYGBAUDAwE
CAgEDAwUEBgYGCAcJCQkKCwsLDAwNDQ4NDg8PDw8PAAACAAAAAAOTA/QAdAC2AAAlFSMVITUjNT8
eNSMPFS8VIxUfHQMRHw8/DxEvDw8OAdGJAXeKEhISEhEREBAPEA4ODg0NDAsLCwkJCQcHBgYEBAM
CAlcCAgMEBAUFBgcHCAgSFRYXGhocHh4fHx4eHBoaFxYVEggIBwcGBQUEBAMCAlcCAgMEBAYGBwg
ICQoKCwwMDQ0ODw4QEBARERESExJ2AQIFBggKCgwNDw8QERESExMSEREQDw8NDAoKBAcFBAIBAgU
GCAkKDA0OEBARERMTExMSERAPDw0MCwkHBgUCuFtRUVsCAwMEBQUGBgcICAgJCgoKCwsMDAwNDQ4
NDg8ODw8PEA0MCwwLDAsKCwoKCRIRDw0MCgcGBAEBBAYHCgwNDxESCQoKCwoLDAsMCwwNEA8PDw4
PDg0ODQ0MDAwLCwoKCgkICAgHBgYFBQQDAwKk/rgQDw4ODQ0LCwkJBwcEBAIBAQIEBQYICQkLDAw
HDQ4ODwFQEA8ODg0NCwsJCQcGBQQCAQECBAUGBwkJCwsNDQ4ODwAAAAABAAAAAAP0A/IACQAAASE
FAyUFAyUhAwGJ/oMBNXYBNQE1dgE1/oN3AnXq/oPq6gF96gF9AAAAAAIAAAAAA/QDvQB3AO4AAAE
VHxMPFSEvFT8VLw8PDicfFA8VIT8KLw8/Dy8OIw8OAcsCAwQFBgYICAoKCgwMDQ8GBgICAQEBAgI
DAwQeNRkZFxcVFRMSEA8ODAoC8QoMDg8QEhMVFRcXGRkaGxsDBwcCAgEBAQMDAwQUDQwLCwoKCAg
GBgUEAwEBAQMEBgcJCgsNDQ4QEBEREhISEhAQDg4NCwoJBwYFAvgBAQMEBQYGCAgKCgsLDA0QBgU
DAQEBAQICAwMEHjUZGRcXFRUTEhAPDgwKAQMMDAwNDg4dHh8gIQ0MCwoJCQgHBwUFBAMCAQEBAgM
FBgYICQoLCw0NDg4PBgcHCAgJCQkKCgsLCwsLDBIRERAQDg0NCwoJBwYEAwJWExISERAPDg4NDAw
KCgkICQYHBQQFBAUEBAQDAgwXCw0NDg4QERIUFRYYGhkYFxUTEhIQDw4NDQsLCwoCBQgEBQQGBQU
FAwQLCAkKCwsMDQ0PDw8RERISFhYVFRMSEQ8ODQsJBwUEAQEEBQcKCg0OEBASFBQVFncTExEREA8
PDQ0MDAoKCQkJBQcFBAUFBAUEAwMDDBYMDA0ODw8REhQVFhkaDQ0MDAsKFBMQEA8KDAwMDQ4ODhA
PEBARERISFRQUFBMSEREQDw8NDAsKCQwLCgoJCQgIBgYFBQMCAgEDBQgJCwwOEBESExQVFgAAAAE
AAAAAAvAD9AAkAAABERsBES8PIw8OAQ/t9QECAwUFBwgICgoLDAwNDQ7WDg0NDAwLCgoICAcFBQM
CA238nwEW/uoDYQ4NDQ0LCwsJCQgHBQUDAgEBAgMFBQcICQkLCwsNDQ0AAAAAAwAAAAAD9AP0AD8
AfwC1AAAlHw8/Dy8PDw4FHw8/Dy8PDw4DMxMPAhUfDiE1IS8ENyE/BhM/AjUvBiEnIwLIAQECBAQ
FBQcHCAgJCQoKCgoKCgkJCAgHBwUFBAQCAQEBAQIEBAUFBwcICAkJCgoKCgoKCQkICAcGBgUEBAI
B/gsBAQIEBAUFBwcICAkJCgoKCgoKCQkICAcHBQUEBAIBAQEBAgQEBQUHBwgICQkKCgoKCgoJCQg
IBwYGBQQEAgHJZLVICAECAgQEBQUHBwgICQkJCgsCW/27AwMCAQEsAXEPDQwMCggIvAMEAgIDBQc
ICQr9FSumcAoKCgkJCAgHBgYFBAQCAQEBAQIEBAUFBwcICAkJCgoKCgoKCQkICAcHBQUEBAIBAQE
BAgQEBQUHBwgICQkKCgoKCgoJCQgIBwYGBQQEAgEBAQECBAQFBQcHCAgJCQoKCgoKCgkJCAgHBwU
FBAQCAQEBAQIEBAUFBwcICAkJCgoDFv6DdyYMCgoKCQkICAcGBgUEBAIBAWQBAQMCCVQBAgUFBwk
KAVADBwUQCgkIBwUDAmQAAAACAAAAAAO2A/QAAgAFAAAJAQsBCQEDRf0+ATcDbPySAhL+XQMm/Hc
CCAHgAAQAAAAAAygD9AADAAcACwAPAAABESMRIREjEQEzESMBMxEjAu5e/uBeAUPT0/6D09MDufy
OA3L8jgNy/FMD6PwYA+gAAwAAAAADuAP0ABEAZgD6AAAlDwgvBxMzHwcVMx8SDwIfCCU/CS8CPxE
zNT8HBxUPFBUfAg8NFwUfDjsBPw4FNy8MPwI1LyUjDw4CHQEBAgMEBAUFBQUFBQQDAwICKAQECAY
GBQQBAjQLFBAQERERCAgJCAcFBQQDAgEBAQ0CAgICBAUGBwkL/ZUMCQcGBQQCAgEBAg0BAQECAwQ
FBQcICQcQEBAQDw4WOAECBAUGAwcIYh8UFBYLCwsLCwoKDQkIBwUFAwMBAQIGBwEDAwMEBAYGBxA
PDhIRBQFXAQICBAQEBgYGBwgHCQgJCQkJCAgIBwcGBgUFBAQDAgEBWQUXEw8PDwYGBAQEAgICAQw
CAQICBAQGBggJCw0LCwsMCwwLFhUTEwEBAwMFBQYGCAcJCQkKCgsYCgoKCQgJBwgGBgUFBAICYwE
FBAQEAwIBAQEBAgMEBAQGA1IBAgUFBwgECUMDCAcKDA8RCgsSERERERAQERAhIqc4HBIQEA4ODQ0
OAQ8NDQ4OEBASEhUtpyIhEBEQERARERESChIQDQoJBwg/CQgIBwUDAwIoBQoICw4ICQoLDA0OFxQ
UFBMTExMSEyUnRm0qGwwKCgkICAcLCQYHBT4BCQkICAgHBgcFBQUDAwICAgICBAQFBQYGBwcICAg
NAT4HCAcKDQgICQoKDA0dL58nJRMSExMTExQUFBQSDQwMCgkICAwJBwYMCgsKCQkJBwcGBgQEAwE
BAQEDAwQGBQcHCAkJCQoKAAACAAAAAAP0A/QAQAEMAAABFQ8PLw8/Dx8OARUPBS8EDwcdAR8DDwY
rAQ8FHQEfBjsBHwUPBB8IPwQfBh0BHwU7Aj8FPQE/BR8EPwgvBD8GOwE/BT0BLwYrAS8FPwQvBys
BDwMvBj0BLwUrAg8FAsgBAwUHCAoMDQ4QEBISExQUFBQTEhIQEA4NDAoIBwUDAQEDBQcICgwNDhA
QEhITFBQUFBMSEhAQDg0MCggHBQP+6A4cHA0ODVoDBAQFBAUDA1ICAgICAgJbCA4GBgUEBH0GBQQ
DAwICAQEDAwQEBAV9BAkMBwcIWwMCAQEBAQIDUgIEBQQFBAQDWg0aDg0ODw8CAgQDBQQFcAYFBAQ
CAwEOHBwNDg1aAwQEBQQFBAJSAgIBAQEBAgJbCA4GBgUEBH0GBQQDAwICAQEDAwQEBAV9BAkMBwc
IWwMCAQEBAQIDUQMEBAUFBAQDWg0aDg0ODw8CAgMEBAUFcAUEBQMEAgICAAoKFBMSEhAQDg0MCgg
HBQMBAQMFBwgKDA0OEBASEhMUFBQUExISEBAODQwKCAcFAwEBAwUHCAoMDQ4QEBISExQBx30ECQw
HBwhbAgIBAQEBAgJSAgQEBQUEBANXDRoODQ4PDwICAwQEBQVwBgUEAwMCAg4cHA0NDloEBAUEBQQ
FA1ICAgEBAQECAlsIDgYGBQQEfQYFBAMDAgICAwMDBQQFfQQJDAcHCFsCAgEBAQECAk4DBAQFBQQ
EA1oNGg0ODg8PAgIDBAQFBHEGBAUDAwICDhwcDQ0NWwQEBQQFBAUDUgICAgICAlsIDgYGBQQEfQY
FBAMDAgICAgMDBQQAAAAAABIA3gABAAAAAAAAAAEAAAABAAAAAAABAAgAAQABAAAAAAACAAcACQA
BAAAAAAADAAgAEAABAAAAAAAEAAgAGAABAAAAAAAFAAsAIAABAAAAAAAGAAgAKwABAAAAAAAKACw
AMwABAAAAAAALABIAXwADAAEECQAAAAIAcQADAAEECQABABAAcwADAAEECQACAA4AgwADAAEECQA
DABAAkQADAAEECQAEABAAoQADAAEECQAFABYAsQADAAEECQAGABAAxwADAAEECQAKAFgA1wADAAE
ECQALACQBLyBzYi1pY29uc1JlZ3VsYXJzYi1pY29uc3NiLWljb25zVmVyc2lvbiAxLjBzYi1pY29
uc0ZvbnQgZ2VuZXJhdGVkIHVzaW5nIFN5bmNmdXNpb24gTWV0cm8gU3R1ZGlvd3d3LnN5bmNmdXN
pb24uY29tACAAcwBiAC0AaQBjAG8AbgBzAFIAZQBnAHUAbABhAHIAcwBiAC0AaQBjAG8AbgBzAHM
AYgAtAGkAYwBvAG4AcwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcwBiAC0AaQBjAG8AbgBzAEYAbwB
uAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAHUAcwBpAG4AZwAgAFMAeQBuAGMAZgB1AHMAaQBvAG4
AIABNAGUAdAByAG8AIABTAHQAdQBkAGkAbwB3AHcAdwAuAHMAeQBuAGMAZgB1AHMAaQBvAG4ALgB
jAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBAgEDAQQBBQEGAQcBCAE
JAQoBCwEMAQ0BDgEPARABEQESARMABXNoYXJlCHNoYXJlLTAxBGVkaXQHZWRpdC0wMQNhZGQHdXB
hcnJvdwVoZWFydANtYXAMdm9pY2Utc2VhcmNoCWZhdm9yaXRlcwtjaGF0LXBlcnNvbghib29rbWF
yawhzaG9wcGluZwRwbGF5BXBhdXNlCHJlbWluZGVyCHNldHRpbmdzAAAAAAA=)
format('truetype');
font-weight: normal;
font-style: normal;
}
[class^="fab-icon-"],
[class*=" fab-icon-"] {
font-family: 'fab-icons' !important;
speak: none;
font-size: 55px;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.fab-icon-people:before {
content: "\e70a";
}
APP.TSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
function App() {
return (
<div>
<div id="targetElement" style={{ position: 'relative',
minHeight: '350px', border: '1px solid' }}> </div>
{/* To render Floating Action Button with applied warning style
*/}
<FabComponent id='fab' iconCss= 'e-icons e-edit' cssClass= 'e-
warning' target='#targetElement'></FabComponent>
</div>
);
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
INDEX.CSS
/* Represents the styles for loader */
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
Predefined Floating Action Button styles provide only the visual indication. So, Floating Action Button
content property should define the Floating Action Button style for the users of assistive technologies
such as screen readers.
Styles customization
To modify the Floating Action Button appearance, you need to override the default CSS of Floating
Action Button component. Please find the list of CSS classes and its corresponding section in Floating
Action Button component. Also, you have an option to create your own custom theme for the
components using our Theme Studio.
| CSS Class | Purpose of Class |
|-----|----- |
|.e-fab.e-btn|To customize the FAB.|
|.e-fab.e-btn:hover|To customize the FAB on hover.|
|.e-fab.e-btn:focus|To customize the FAB on focus.|
|.e-fab.e-btn:active|To customize the FAB on active.|
|.e-fab.e-btn-icon|To customize the style of FAB icon.|
Show text on hover
By using cssClass, you can customize the Floating Action Button to show text on hover with applied
transition effect. For detailed information, refer index.css file below.
The content will behave the same , when the enableHtmlSantiizer is enabled. Since we are adding only
the valid tags in content, sanitizing the content will not affect it.
APP.JSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
function App() {
return (<div>
<div id="targetElement" style={{ position: 'relative',
minHeight: '350px', border: '1px solid' }}></div>
{/* To render Floating Action Button */}
<FabComponent id='fab' iconCss='e-icons e-edit' content='<span
class="text-container"><span class="textEle">Edit</span></span>'
cssClass='fab-hover' target='#targetElement'></FabComponent>
</div>);
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
APP.TSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
function App() {
return (
<div>
<div id="targetElement" style={{ position: 'relative',
minHeight: '350px', border: '1px solid' }}></div>
{/* To render Floating Action Button */}
INDEX.CSS
/* Represents the styles for loader */
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
/* start of onhover customization */
.e-fab.e-btn.fab-hover {
padding: 6px 0px 10px 10px;
}
.fab-hover .text-container {
overflow: hidden;
width: 0;
margin: 0;
transition: width .5s linear 0s, margin .2s linear .5s;
}
.fab-hover:hover .text-container {
width: 35px;
margin: 0 5px;
transition: width .5s linear .2s, margin .2s linear 0s;
}
/* end of onhover customization */
• TopLeft
• TopCenter
• TopRight
• MiddleLeft
• MiddleCenter
• MiddleRight
• BottomLeft
• BottomCenter
• BottomRight
`ts
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
function App() {
return (
{/ To render Floating Action Button in BottomLeft Position. /}
<FabComponent id='fab' content='Add' position='BottomLeft'></FabComponent>
);
}
export default App;
`
Below example demonstrates different supported positions of FAB.
APP.JSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
function App() {
return (<div>
<div id="target" style={{ position: 'relative', minHeight:
'350px', border: '1px solid' }}></div>
<FabComponent id="fab1" iconCss='fab-icons fab-icon-people'
position='TopLeft' target='#target'></FabComponent>
<FabComponent id="fab2" iconCss='fab-icons fab-icon-people'
position='TopCenter' target='#target'></FabComponent>
<FabComponent id="fab3" iconCss='fab-icons fab-icon-people'
position='TopRight' target='#target'></FabComponent>
<FabComponent id="fab4" iconCss='fab-icons fab-icon-people'
position='MiddleLeft' target='#target'></FabComponent>
<FabComponent id="fab5" iconCss='fab-icons fab-icon-people'
position='MiddleCenter' target='#target'></FabComponent>
<FabComponent id="fab6" iconCss='fab-icons fab-icon-people'
position='MiddleRight' target='#target'></FabComponent>
<FabComponent id="fab7" iconCss='fab-icons fab-icon-people'
position='BottomLeft' target='#target'></FabComponent>
<FabComponent id="fab8" iconCss='fab-icons fab-icon-people'
position='BottomCenter' target='#target'></FabComponent>
<FabComponent id="fab9" iconCss='fab-icons fab-icon-people'
position='BottomRight' target='#target'></FabComponent>
</div>);
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
APP.TSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
function App() {
return (
<div>
<div id="target" style={{ position: 'relative', minHeight:
'350px', border: '1px solid' }}></div>
<FabComponent id="fab1" iconCss='fab-icons fab-icon-people'
position='TopLeft' target='#target'></FabComponent>
<FabComponent id="fab2" iconCss='fab-icons fab-icon-people'
position='TopCenter' target='#target'></FabComponent>
<FabComponent id="fab3" iconCss='fab-icons fab-icon-people'
position='TopRight' target='#target'></FabComponent>
<FabComponent id="fab4" iconCss='fab-icons fab-icon-people'
position='MiddleLeft' target='#target'></FabComponent>
<FabComponent id="fab5" iconCss='fab-icons fab-icon-people'
position='MiddleCenter' target='#target'></FabComponent>
<FabComponent id="fab6" iconCss='fab-icons fab-icon-people'
position='MiddleRight' target='#target'></FabComponent>
<FabComponent id="fab7" iconCss='fab-icons fab-icon-people'
position='BottomLeft' target='#target'></FabComponent>
<FabComponent id="fab8" iconCss='fab-icons fab-icon-people'
position='BottomCenter' target='#target'></FabComponent>
<FabComponent id="fab9" iconCss='fab-icons fab-icon-people'
position='BottomRight' target='#target'></FabComponent>
</div>
);
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
INDEX.CSS
/* Represents the styles for loader */
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
/* Represents the styles for fab icon */
@font-face {
font-family: 'fab-icons';
src: url(data:application/x-font-ttf;charset=utf-
8;base64,AAEAAAAKAIAAAwAgT1MvMj1tSgIAAAEoAAAAVmNtYXDnYOfNAAAByAAAAFZnbHlmkfZ
LRAAAAkgAABboaGVhZCF5f3EAAADQAAAANmhoZWEIUQQTAAAArAAAACRobXR4SAAAAAAAAYAAAAB
IbG9jYTveNR4AAAIgAAAAJm1heHABIQIXAAABCAAAACBuYW1lkwSegQAAGTAAAAIxcG9zdKKfPWY
AABtkAAAAzQABAAAEAAAAAFwEAAAAAAAD9AABAAAAAAAAAAAAAAAAAAAAEgABAAAAAQAAbzQqW18
PPPUACwQAAAAAAN8znUAAAAAA3zOdQAAAAAAD9AP0AAAACAACAAAAAAAAAAEAAAASAgsABQAAAAA
AAgAAAAoACgAAAP8AAAAAAAAAAQQAAZAABQAAAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA5wDnEAQAAAAAXAQAAAAAAAABAAAAAAAABAAAAAQAAAA
EAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQ
AAAAEAAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABABCAAAABAAEAAEAAOcQ//8AAOcA//8AAAABAAQ
AAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAAAAAAAABpAPmBFQEggSaBK4FQAX
sBrgG1AfcCBAI5gj8CR4KPAt0AAAABAAAAAAD9APoAD0AewC5AXAAACUfCRUPDiMvDjU/Dh8CAR8
LFQ8OIy8PPw4XAR8LHQEPDi8OPQE/DDMXJw8KHQEfAgUvCSsBDw4VHw4zPwcBDwEdAR8NPw41Lw4
jDwkBNzUvASUfCTM/DT0BLw4rAQ8BA5AGBgYFBAQDAgIBAQECAwMFBAUGBgcHBwgHCAcIBwcHBgY
GBQQEAwICAQEBAgMDBQQGBQYHBwcKCwoJCv0nBwcGBgYFBAQDAwIBAQECAgQEBQUFBgcHBwcHCAc
ICAcHBgYGBQQEAwMBAQEBAQIDAwQEBgUGBwkICQoLAtwHBwcGBQUFBAMCAgEBAgMDBAUFBgYGBwg
HBwgIBwcIBwYGBQUFBAMCAgEBAgMDBAUFBQcGCQkJCQxMDAsKCQgHBgUDAgEBAQP+HwYHCAgICQk
KDQ4ODQ4NDAwMCwoJCAcHBAQCAQIDBQYHCAgKCwwMDQoLCgoREBAPDg0MCgHdAgICAgQGBggJCQs
MEBESERMSDQwMCwsJCAgGBQQCAQIDBAYGCAkJCwwMDQ0NDQ4NDgoKCQkJCAcH/h4CAQMB4gcOBwg
JCQkKCwoLEBAQEAsLCwkIBwYFAwMCAwUFBwgJCgsLDA0KCgoKEREQ2QQEBQYGBgYHBwcHBwcHBwY
HBQUFBAMDAgIBAQECAgQEBAUFBgYHBwcHBwcHBwYHBgYFBAQEAwICAQECAwFvAgMEBAUGBQcGBwc
HBwcHBwcHBgUFBQQEAwICAQEBAgIDBAQFBQYGBwcHBwcHBwcHBgYGBQUEBAMDAQEBAV0DAwQEBQU
GBgcHBggHBwcHBgcGBgUEBQMDAwEBAQEBAgIEAwUEBgYGBgcHBwcHBwcHBwYFBQUEBAMDAgEsBwc
ICgoLCwwKCQkKCQkJCeoHBgYFBQUEAwMDAgMEBQcHCAkLCgwNDA0NDA0MDAwLCwkJBwcGBAMCAQE
CBQYICQsM/v8IERAJCAgNCwsLCQkIBwgFAwEBAwQFBggICQoLDAwMDA0NDA0MDAsLCQkIBwYEBAI
BAgIDBAQFBgYHBwEDDg0NDewHDAUFBAQDAwIBAQMEBwYICAkKCwwMDA0NDA0MDAwLCwkJCAYGBAM
CAQMEAAAABQAAAAAD7wP0AD8AfwEQAVACCgAAARUPDSsBLw4/DjsBHw0FFQ8NKwEvDT0BPw07AR8
NAR8QFQcvAiMPDx8HDwcjLwc/By8PDwMvAj8QHw8/DycVDw0rAS8NPQE/DTsBHw0nDxUdAR8DDwg
fDjsBPwIfDjsBPw4fAjsBPw4vCD8CPQEvLSMPDgOxAgIDBAUFBwYHCAgJCQkKCQoJCAgIBwcGBgQ
EAwMBAQEBAwMEBAYGBwcICAgJCgkKCQkJCAgHBgcFBQQDAgL9WQEDAwQFBQYHBwgICAkKCQoJCQk
ICAcHBgUFBAMCAgICAwQFBQYHBwgICQkJCgkKCQgICAcHBgUFBAMDAQGEDg0aGRcWFBMSDw4MCQg
GAwEDDAwMDBAPDw4ODQwLCgkIBwUEAgEBAgMFBgcIDRAaGhwcHR4eHh4dHR0bGxoQDQgHBgUDAgE
BAgQFBwgJCgsMDQ4ODw8QDAwMDAECAQEDBQcJCgwODxETExULFxkQBgYGBggICQkKCgsLDAwMDA4
NDQwMDAsKCggJBwcFBQQ6AgIDBAUFBgcHCAgICQoJCgkJCQgIBwcGBQUEAwICAgIDBAUFBgcHCAg
JCQkKCQoJCAgIBwcGBQUEAwIC+AEXDw8ODhoZGBYUEhAOCwoEAwMCAgEBAgMDBgoJCAYFBAMBAQM
EBQYICQoLDA0ODg8QEA4NDg8PEBAQERIREhISExMSFBMTExITEhITERIREREREBAPFg8ODQ4QEA8
ODg0MCwoJCAYFBAMBAQMEBQYICQoGBQICAQIDAwQEBQYGBwgICQkKCgsMDAwNDQ4ODw8PEBAQGgQ
EBQcHCAkKCwsLDQ0NDQ4PDg4NDQwLCwkJCQcGBQQBAAoJCQkICAcHBgUFBAMCAgICAwQFBQYHBwg
ICQkJCgkKCQgICAcHBgUFBAMDAQEDAwQFBQYHBwgICAkKCQoJCQkICAcHBgUFBAMCAgICAwQFBQY
HBwgICQkJCgkKCQgICAcHBgUFBAMDAQEDAwQFBQYHBwgICAkKAigGBg4PERMUFhYZGRobHBwdHRs
bAwICAQIEBQcICQoLDA0NDw8PEA8PDg0NDQsPCw8NCwkHBAICBAcJCwwPCxALDQ0NDg8PEA8PDw0
NDAsKCQgHBQQCAQEBAgMKFhYbGxsaGhkYFxYVFBMRCA8OBxALCgkJCQgHBgYFBAMDAQEBAgIEBQY
GCAgJCgoLCwwOJgoJCQkICAcHBgUFBAMCAgICAwQFBQYHBwgICQkJCgkKCQgICAcHBgUFBAMDAQE
DAwQFBQYHBwgICAkKDgcKBwgICRMVFxgZGxwdHx8PEBEQEBEQExMTEwwFCwwNDg4PDxAQEA8ODg0
MCwoJCAYFBAMCAwUMCwoJCQgHBwYFBAQDAgEBAgMDBAUGBgcICAkJCxAFAwIDBAUHBwkKDAwNDQ8
OEBAQDw8PDQ0MCwUYFRUWEhESERERERAREA8QDw8ODg4NDQ0MDAsKCgoJCAgIBgkQDQwMCwoKCAg
HBwUEAwIBAgMEBgYICAoKCwsNDA4AAAMAAAAAA/QD9AAHACoAUAAACQEVMwERIRElMx8ODwcBBzU
BPwUnByERIRE/CDUvDg8GApn+D8MB7fzyAyMIBwcGBwYFBgYEAwMCAQEBAQEBAgMDBAX9rmkCVwY
GBwcHB1o1/TUDijkJBwYGBAMBAQIDAwUGCAgMCwsMDQ0ODg0ODQ0MCwsDWP4QwAHz/a8DDl0BAgI
DBAQFBgYFBgcGBgcGBwYGBgYFBv2oAWgCVgUEAwICARY1/HYCzjoKCgsLDAwMDAwMDAwLCwoKDAg
HBgUDAgEBAgMFBgcIAAADAAAAAAP0A/QAAgAGABkAADclJzcXASc3Bxc/AzUvBw8CDAEk6jvpAdP
qqW7pcgUEAgIEBaYICQkKCQkJDDrqOukB0umpbulyCAkKCQoJCKYHBAMBAQMEAAAAAAEAAAAAA/Q
D9AALAAABIRUhETMRITUhESMBwv5KAbZ8Abb+SnwCPnz+SgG2fAG2AAEAAAAAA/MDDwAFAAATFwk
BNwEMLAHKAcYs/g4BHSwBxv48LQHvAAABAAAAAAP0A/QAgQAAEw8TFR8cPxw1LxMPDS8NB+0JCRM
TEhMREhAQDg0LCgQEAwIDAQICAwMFBQYGCAgKCgsMDg4PEBETExUWFxgZNzxBQTw3GRgXFhUTExE
QDw4ODAsKCggIBgYFBQMDAgIBAwIDBAQKCw0OEBASERMSExMfFx8TEhEQDw4ODQwMDBcXFxcMDAw
NDg4PEBESEyAXA/EBAgUGCQsMDxETFBcZGw4PDxAQETsQERARERISEhISExMUExQUFRQVFhUWFhc
XFy8wMjIwLxcXFxYWFRYVFBUUFBMUExMSEhISEhEREBEQOxEQEA8PDhsZFxQTEQ8MCwkGBQUBAQE
DBAUGBwgJCQsLGRwcGQsLCQkIBwYFBAMBAQEAAAAAAgAAAAADOwP0AEAAlAAAAR0BDw4vDz8PHw4
FFxUfBgEbAT8HNS8dKwEPHQKiAwQFBwgJCwsNDQ4PEBARERAQDw4NDQsLCQgHBQQDAQEDBAUHCAk
LCw0NDg8QEBEQEA8PDg4MDAsJCAcGBAP+IgEDBAYHCAoLAQqJhAoJCAcFAgQBAQIDAwQFBgYHCAg
JCQoLCgwMDA0NDg4ODw8PEBAQEBAQEBAPDw8ODg4NDQwMCwsLCgkJCAgHBgYFBAMDAgECvAkIDw8
PDgwMCwoJCAcFBAIBAQIEBQcICQoLDAwODw8PERAPDw8ODAwLCgkIBwUEAgEBAgQGBggKCgsMDQ0
PDw8GCwsVFRQUExMR/eYBEAEKERMTFBQKFRYbDw8PDw8ODQ4NDQwMCwsLCgkJCQcIBgYGBAUDAwE
CAgEDAwUEBgYGCAcJCQkKCwsLDAwNDQ4NDg8PDw8PAAACAAAAAAOTA/QAdAC2AAAlFSMVITUjNT8
eNSMPFS8VIxUfHQMRHw8/DxEvDw8OAdGJAXeKEhISEhEREBAPEA4ODg0NDAsLCwkJCQcHBgYEBAM
CAlcCAgMEBAUFBgcHCAgSFRYXGhocHh4fHx4eHBoaFxYVEggIBwcGBQUEBAMCAlcCAgMEBAYGBwg
ICQoKCwwMDQ0ODw4QEBARERESExJ2AQIFBggKCgwNDw8QERESExMSEREQDw8NDAoKBAcFBAIBAgU
GCAkKDA0OEBARERMTExMSERAPDw0MCwkHBgUCuFtRUVsCAwMEBQUGBgcICAgJCgoKCwsMDAwNDQ4
NDg8ODw8PEA0MCwwLDAsKCwoKCRIRDw0MCgcGBAEBBAYHCgwNDxESCQoKCwoLDAsMCwwNEA8PDw4
PDg0ODQ0MDAwLCwoKCgkICAgHBgYFBQQDAwKk/rgQDw4ODQ0LCwkJBwcEBAIBAQIEBQYICQkLDAw
HDQ4ODwFQEA8ODg0NCwsJCQcGBQQCAQECBAUGBwkJCwsNDQ4ODwAAAAABAAAAAAP0A/IACQAAASE
FAyUFAyUhAwGJ/oMBNXYBNQE1dgE1/oN3AnXq/oPq6gF96gF9AAAAAAIAAAAAA/QDvQB3AO4AAAE
VHxMPFSEvFT8VLw8PDicfFA8VIT8KLw8/Dy8OIw8OAcsCAwQFBgYICAoKCgwMDQ8GBgICAQEBAgI
DAwQeNRkZFxcVFRMSEA8ODAoC8QoMDg8QEhMVFRcXGRkaGxsDBwcCAgEBAQMDAwQUDQwLCwoKCAg
GBgUEAwEBAQMEBgcJCgsNDQ4QEBEREhISEhAQDg4NCwoJBwYFAvgBAQMEBQYGCAgKCgsLDA0QBgU
DAQEBAQICAwMEHjUZGRcXFRUTEhAPDgwKAQMMDAwNDg4dHh8gIQ0MCwoJCQgHBwUFBAMCAQEBAgM
FBgYICQoLCw0NDg4PBgcHCAgJCQkKCgsLCwsLDBIRERAQDg0NCwoJBwYEAwJWExISERAPDg4NDAw
KCgkICQYHBQQFBAUEBAQDAgwXCw0NDg4QERIUFRYYGhkYFxUTEhIQDw4NDQsLCwoCBQgEBQQGBQU
FAwQLCAkKCwsMDQ0PDw8RERISFhYVFRMSEQ8ODQsJBwUEAQEEBQcKCg0OEBASFBQVFncTExEREA8
PDQ0MDAoKCQkJBQcFBAUFBAUEAwMDDBYMDA0ODw8REhQVFhkaDQ0MDAsKFBMQEA8KDAwMDQ4ODhA
PEBARERISFRQUFBMSEREQDw8NDAsKCQwLCgoJCQgIBgYFBQMCAgEDBQgJCwwOEBESExQVFgAAAAE
AAAAAAvAD9AAkAAABERsBES8PIw8OAQ/t9QECAwUFBwgICgoLDAwNDQ7WDg0NDAwLCgoICAcFBQM
CA238nwEW/uoDYQ4NDQ0LCwsJCQgHBQUDAgEBAgMFBQcICQkLCwsNDQ0AAAAAAwAAAAAD9AP0AD8
AfwC1AAAlHw8/Dy8PDw4FHw8/Dy8PDw4DMxMPAhUfDiE1IS8ENyE/BhM/AjUvBiEnIwLIAQECBAQ
FBQcHCAgJCQoKCgoKCgkJCAgHBwUFBAQCAQEBAQIEBAUFBwcICAkJCgoKCgoKCQkICAcGBgUEBAI
B/gsBAQIEBAUFBwcICAkJCgoKCgoKCQkICAcHBQUEBAIBAQEBAgQEBQUHBwgICQkKCgoKCgoJCQg
IBwYGBQQEAgHJZLVICAECAgQEBQUHBwgICQkJCgsCW/27AwMCAQEsAXEPDQwMCggIvAMEAgIDBQc
ICQr9FSumcAoKCgkJCAgHBgYFBAQCAQEBAQIEBAUFBwcICAkJCgoKCgoKCQkICAcHBQUEBAIBAQE
BAgQEBQUHBwgICQkKCgoKCgoJCQgIBwYGBQQEAgEBAQECBAQFBQcHCAgJCQoKCgoKCgkJCAgHBwU
FBAQCAQEBAQIEBAUFBwcICAkJCgoDFv6DdyYMCgoKCQkICAcGBgUEBAIBAWQBAQMCCVQBAgUFBwk
KAVADBwUQCgkIBwUDAmQAAAACAAAAAAO2A/QAAgAFAAAJAQsBCQEDRf0+ATcDbPySAhL+XQMm/Hc
CCAHgAAQAAAAAAygD9AADAAcACwAPAAABESMRIREjEQEzESMBMxEjAu5e/uBeAUPT0/6D09MDufy
OA3L8jgNy/FMD6PwYA+gAAwAAAAADuAP0ABEAZgD6AAAlDwgvBxMzHwcVMx8SDwIfCCU/CS8CPxE
zNT8HBxUPFBUfAg8NFwUfDjsBPw4FNy8MPwI1LyUjDw4CHQEBAgMEBAUFBQUFBQQDAwICKAQECAY
GBQQBAjQLFBAQERERCAgJCAcFBQQDAgEBAQ0CAgICBAUGBwkL/ZUMCQcGBQQCAgEBAg0BAQECAwQ
FBQcICQcQEBAQDw4WOAECBAUGAwcIYh8UFBYLCwsLCwoKDQkIBwUFAwMBAQIGBwEDAwMEBAYGBxA
PDhIRBQFXAQICBAQEBgYGBwgHCQgJCQkJCAgIBwcGBgUFBAQDAgEBWQUXEw8PDwYGBAQEAgICAQw
CAQICBAQGBggJCw0LCwsMCwwLFhUTEwEBAwMFBQYGCAcJCQkKCgsYCgoKCQgJBwgGBgUFBAICYwE
FBAQEAwIBAQEBAgMEBAQGA1IBAgUFBwgECUMDCAcKDA8RCgsSERERERAQERAhIqc4HBIQEA4ODQ0
OAQ8NDQ4OEBASEhUtpyIhEBEQERARERESChIQDQoJBwg/CQgIBwUDAwIoBQoICw4ICQoLDA0OFxQ
UFBMTExMSEyUnRm0qGwwKCgkICAcLCQYHBT4BCQkICAgHBgcFBQUDAwICAgICBAQFBQYGBwcICAg
NAT4HCAcKDQgICQoKDA0dL58nJRMSExMTExQUFBQSDQwMCgkICAwJBwYMCgsKCQkJBwcGBgQEAwE
BAQEDAwQGBQcHCAkJCQoKAAACAAAAAAP0A/QAQAEMAAABFQ8PLw8/Dx8OARUPBS8EDwcdAR8DDwY
rAQ8FHQEfBjsBHwUPBB8IPwQfBh0BHwU7Aj8FPQE/BR8EPwgvBD8GOwE/BT0BLwYrAS8FPwQvBys
BDwMvBj0BLwUrAg8FAsgBAwUHCAoMDQ4QEBISExQUFBQTEhIQEA4NDAoIBwUDAQEDBQcICgwNDhA
QEhITFBQUFBMSEhAQDg0MCggHBQP+6A4cHA0ODVoDBAQFBAUDA1ICAgICAgJbCA4GBgUEBH0GBQQ
DAwICAQEDAwQEBAV9BAkMBwcIWwMCAQEBAQIDUgIEBQQFBAQDWg0aDg0ODw8CAgQDBQQFcAYFBAQ
CAwEOHBwNDg1aAwQEBQQFBAJSAgIBAQEBAgJbCA4GBgUEBH0GBQQDAwICAQEDAwQEBAV9BAkMBwc
IWwMCAQEBAQIDUQMEBAUFBAQDWg0aDg0ODw8CAgMEBAUFcAUEBQMEAgICAAoKFBMSEhAQDg0MCgg
HBQMBAQMFBwgKDA0OEBASEhMUFBQUExISEBAODQwKCAcFAwEBAwUHCAoMDQ4QEBISExQBx30ECQw
HBwhbAgIBAQEBAgJSAgQEBQUEBANXDRoODQ4PDwICAwQEBQVwBgUEAwMCAg4cHA0NDloEBAUEBQQ
FA1ICAgEBAQECAlsIDgYGBQQEfQYFBAMDAgICAwMDBQQFfQQJDAcHCFsCAgEBAQECAk4DBAQFBQQ
EA1oNGg0ODg8PAgIDBAQFBHEGBAUDAwICDhwcDQ0NWwQEBQQFBAUDUgICAgICAlsIDgYGBQQEfQY
FBAMDAgICAgMDBQQAAAAAABIA3gABAAAAAAAAAAEAAAABAAAAAAABAAgAAQABAAAAAAACAAcACQA
BAAAAAAADAAgAEAABAAAAAAAEAAgAGAABAAAAAAAFAAsAIAABAAAAAAAGAAgAKwABAAAAAAAKACw
AMwABAAAAAAALABIAXwADAAEECQAAAAIAcQADAAEECQABABAAcwADAAEECQACAA4AgwADAAEECQA
DABAAkQADAAEECQAEABAAoQADAAEECQAFABYAsQADAAEECQAGABAAxwADAAEECQAKAFgA1wADAAE
ECQALACQBLyBzYi1pY29uc1JlZ3VsYXJzYi1pY29uc3NiLWljb25zVmVyc2lvbiAxLjBzYi1pY29
uc0ZvbnQgZ2VuZXJhdGVkIHVzaW5nIFN5bmNmdXNpb24gTWV0cm8gU3R1ZGlvd3d3LnN5bmNmdXN
pb24uY29tACAAcwBiAC0AaQBjAG8AbgBzAFIAZQBnAHUAbABhAHIAcwBiAC0AaQBjAG8AbgBzAHM
AYgAtAGkAYwBvAG4AcwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcwBiAC0AaQBjAG8AbgBzAEYAbwB
uAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAHUAcwBpAG4AZwAgAFMAeQBuAGMAZgB1AHMAaQBvAG4
AIABNAGUAdAByAG8AIABTAHQAdQBkAGkAbwB3AHcAdwAuAHMAeQBuAGMAZgB1AHMAaQBvAG4ALgB
jAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBAgEDAQQBBQEGAQcBCAE
JAQoBCwEMAQ0BDgEPARABEQESARMABXNoYXJlCHNoYXJlLTAxBGVkaXQHZWRpdC0wMQNhZGQHdXB
hcnJvdwVoZWFydANtYXAMdm9pY2Utc2VhcmNoCWZhdm9yaXRlcwtjaGF0LXBlcnNvbghib29rbWF
yawhzaG9wcGluZwRwbGF5BXBhdXNlCHJlbWluZGVyCHNldHRpbmdzAAAAAAA=)
format('truetype');
font-weight: normal;
font-style: normal;
}
[class^="fab-icon-"],
[class*=" fab-icon-"] {
font-family: 'fab-icons' !important;
speak: none;
font-size: 55px;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.fab-icon-people:before {
content: "\e70a";
}
Custom position
You can define the custom position of the Floating Action Button by override the top, left, right, and
bottom CSS properties using cssClass. For detailed information, refer index.css file below.
APP.JSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
function App() {
return (<div>
<div id="targetElement" style={{ position: 'relative',
minHeight: '350px', border: '1px solid' }}></div>
{/* To render Floating Action Button */}
<FabComponent id='fab' iconCss='e-icons e-edit'
cssClass='custom-position' target='#targetElement'></FabComponent>
</div>);
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
APP.TSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
INDEX.CSS
/* Represents the styles for loader */
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
/* Represents the styles for button positioning */
.e-fab.e-btn.custom-position {
left: 40px;
top: 40px;
bottom: unset;
right: unset;
}
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
APP.TSX
{% raw %}
import { FabComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import * as ReactDom from 'react-dom';
function App() {
function onClick(): void {
alert("Edit is clicked!");
}
return (
<div>
<div id="targetElement" style={{ position: 'relative',
minHeight: '350px', border: '1px solid' }}></div>
{/* To render Floating Action Button */ }
<FabComponent id='fab' iconCss='e-icons e-edit' content='Edit'
onClick={onClick} target='#targetElement'></FabComponent>
</div>
);
}
export default App;
ReactDom.render(<App />, document.getElementById('button'));
{% endraw %}
INDEX.CSS
/* Represents the styles for loader */
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
| Press | To do this |
| --- | --- |
| Space | When the floating action button has focus, pressing the space key changes the state
of the floating action button. |
Ensuring accessibility
The Floating action button component's accessibility levels are ensured through an accessibility-checker
and axe-core software tools during automated testing.
The accessibility compliance of the Floating action button component is shown in the following sample.
Open the sample in a new window to evaluate the accessibility of the Floating action button component
with accessibility tools.
See also
Form Validator
Creating a Next.js Application Using Syncfusion React Components
This section provides a step-by-step guide for setting up a Next.js application and integrating the
Syncfusion React Form components.
What is Next.js?
Next.js is a React framework that makes it easy to build fast, SEO-friendly, and user-friendly web
applications. It provides features such as server-side rendering, automatic code splitting, routing, and
API routes, making it an excellent choice for building modern web applications.
Prerequisites
Before getting started with the Next.js application, ensure the following prerequisites are met:
YARN
yarn create next-app
Using one of the above commands will lead you to set up additional configurations for the project as
below:
1.Define the project name: Users can specify the name of the project directly. Let's specify the name of
the project as ej2-nextjs-form.
CMD
√ What is your project named? » ej2-nextjs-form
3.Once complete the above mentioned steps to create ej2-nextjs-form, navigate to the directory using
the below command:
CMD
cd ej2-nextjs-form
The application is ready to run with default settings. Now, let's add Syncfusion components to the
project.
Install Syncfusion React packages
Syncfusion React component packages are available at npmjs.com. To use Syncfusion React components
in the project, install the corresponding npm package.
Here, the React Form components is used in the project. To install the React From components, use the
following command:
NPM
npm install @syncfusion/ej2-react-inputs @syncfusion/ej2-react-calendars
@syncfusion/ej2-react-buttons @syncfusion/ej2-react-dropdowns
YARN
yarn add @syncfusion/ej2-react-inputs @syncfusion/ej2-react-calendars
@syncfusion/ej2-react-buttons @syncfusion/ej2-react-dropdowns
@import '../../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import "../../node_modules/@syncfusion/ej2-react-
buttons/styles/material.css";
@import "../../node_modules/@syncfusion/ej2-react-
inputs/styles/material.css";
@import "../../node_modules/@syncfusion/ej2-react-
calendars/styles/material.css";
@import "../../node_modules/@syncfusion/ej2-react-
dropdowns/styles/material.css";
.control_wrapper.textbox-form {
max-width: 400px;
margin: auto;
border: 0.5px solid #bebebe;
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 36%);
padding: 1% 4% 2%;
background: #f9f9f9;
}
.form-title {
text-align: center;
}
.submitBtn {
text-align: center;
margin: 30px;
}
#container {
margin: 20px auto 0;
width:450px;
}
.form-group {
padding-top: 11px;
}
.e-custom-label {
color: rgba(0, 0, 0, 0.54);
font-size: 13px;
font-weight: 500;
padding-top: 15px;
padding-bottom: 20px;
}
To know more about built-in themes and CSS reference for individual components, refer to the themes
section.
Add Syncfusion React component
Follow the below steps to add the React Form components to the Next.js project:
1.Before adding the Form components to your markup, import the From components in the
src/app/page.tsx file.
PAGE.TSX
'use client'
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { TextBoxComponent, FormValidator, MaskedTextBoxComponent,
UploaderComponent, FormValidatorModel } from '@syncfusion/ej2-react-inputs';
import { DatePickerComponent } from '@syncfusion/ej2-react-calendars';
2.Then, define the Form components in the src/app/page.tsx file, as shown below:
PAGE.TSX
'use client'
import { useState, useEffect, useRef, useReducer } from 'react';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { TextBoxComponent, FormValidator, MaskedTextBoxComponent,
UploaderComponent, FormValidatorModel } from '@syncfusion/ej2-react-inputs';
import { DatePickerComponent } from '@syncfusion/ej2-react-calendars';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
let formObject: FormValidator;
export default function Form() {
const userNameRef = useRef(null);
const [dateOfBirth, setDateOfBirth] = useState('');
const initialState = { email: '', password: '' };
const reducer = (state: any, action: any) => {
switch (action.type) {
case 'update':
return { ...state, [action.field]: action.value };
default:
return initialState;
}
};
const [state, dispatch] = useReducer(reducer, initialState);
const dateChangeHandler = (event: any) => {
setDateOfBirth(event.value);
};
const update = (field: any) => (event: any) => {
//update action is dispatched to update the email and password state value
dispatch({ type: 'update', field, value: event.value });
};
// checks the length of mask value and returns corresponding boolean value
const customFn: (args: { [key: string]: string }) => boolean = (args: {
[key: string]: string }) => {
const argsLength = (args.element as any).ej2_instances[0].value.length;
return argsLength >= 10;
};
useEffect(() => {
(userNameRef.current as any).focusIn();
const options: FormValidatorModel = {
// validation rules
rules: {
name: {
required: [true, '* Please enter your full name'],
},
email: {
required: [true, '* Please enter your email'],
},
password: {
required: [true, '* Please enter your password'],
},
mask_value: {
numberValue: [customFn, '* Please enter your phone number']
},
date: {
required: [true, '* Please enter your date of birth'],
},
dropdown: {
required: [true, '* Please select your gender']
},
Address: {
required: [true, '* Please enter your address']
}
},
};
// Initialize the form validator
formObject = new FormValidator('#form1', options);
}, []);
const onSubmit = () => {
formObject.validate();
if (formObject.validate()) {
formObject.element.reset();
}
};
const genderData: string[] = ['Male', 'Female', 'Others'];
return <>
<div id="container">
<h2>Syncfusion React From Component</h2>
<div>
<div className="control_wrapper" id="control_wrapper">
<h3 className="form-title">Personal Details</h3>
<div className="control_wrapper textbox-form">
<form id="form1" method="post">
<div className="form-group">
<TextBoxComponent ref={userNameRef} name="name" value={state.email}
change={update('name')} placeholder="Full Name" floatLabelType="Auto" data-
msg-containerid="errorForName" />
<div id="errorForName" />
</div>
<div className="form-group">
<TextBoxComponent type="email" name="email" value={state.email}
change={update('email')} placeholder="Email" floatLabelType="Auto" data-msg-
containerid="errorForEmail" />
<div id="errorForEmail" />
</div>
<div className="form-group">
<TextBoxComponent type="password" name="password" value={state.password}
change={update('password')} placeholder="Password" floatLabelType="Auto"
data-msg-containerid="errorForPassword" />
<div id="errorForPassword" />
</div>
<div className="form-group">
<DatePickerComponent name="date" value={dateOfBirth as any}
change={dateChangeHandler} placeholder="Date of Birth" floatLabelType="Auto"
data-msg-containerid="errorForDateOfBirth" />
<div id="errorForDateOfBirth" />
</div>
<div className="form-group">
YARN
yarn run dev
To know about the functionality of the react hooks, refer to the documentation.
View the NEXT.js Form sample in the GitHub repository.
Validation rules in React Form validator component
Default Rules
The FormValidator has following default validation rules, which are used to validate the form.
| Rules | Description | Example |
| rangeLength | Please enter a value between {0} and {1} characters long. |
| range | Please enter a value between {0} and {1}. |
| max | Please enter a value less than or equal to {0}. |
| min | Please enter a value greater than or equal to {0}. |
| regex | Please enter a correct value. |
Customizing Error Messages
The default error message for a rule can be customizable by defining it along with concern rule object as
follows.
INDEX.JSX
import { FormValidator } from '@syncfusion/ej2-inputs';
import { DialogComponent } from '@syncfusion/ej2-react-popups';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
export default class Validation extends React.Component {
dialogInstance;
formObject;
animationSettings = { effect: 'Zoom' };
// Dialog will be closed, while clicking on overlay
onOverlayClick() {
this.dialogInstance.hide();
}
componentDidMount() {
const options = {
// validation rules
rules: {
'email': {
required: [true, '* Enter your email']
},
'password': {
required: [true, '* Enter your password']
},
}
};
// Initialize the form validator
this.formObject = new FormValidator('#form1', options);
}
onSubmitClick() {
if (this.formObject.validate()) {
this.formObject.element.reset();
this.dialogInstance.show();
}
}
render() {
return (<div className='control-pane'>
<div className='control-section col-lg-12'>
<div className='validation_wrapper'>
<div className="control_wrapper" id="control_wrapper">
<form id="form1" method="post">
<div className="form-group">
<div className="e-float-input">
INDEX.TSX
import { select } from '@syncfusion/ej2-base';
import { FormValidator, FormValidatorModel } from '@syncfusion/ej2-inputs';
import { DialogComponent } from '@syncfusion/ej2-react-popups';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
export default class Validation extends React.Component<{}, {}> {
public dialogInstance: DialogComponent;
public formObject: FormValidator;
private animationSettings: object = { effect: 'Zoom' };
// Dialog will be closed, while clicking on overlay
public onOverlayClick() {
this.dialogInstance.hide();
}
public componentDidMount(): void {
const options: FormValidatorModel = {
// validation rules
rules: {
'email': {
required: [true, '* Enter your email']
},
'password': {
required: [true, '* Enter your password']
},
}
};
// Initialize the form validator
this.formObject = new FormValidator('#form1', options);
}
public onSubmitClick(): void {
if(this.formObject.validate()) {
this.formObject.element.reset();
this.dialogInstance.show();
}
}
public render(): JSX.Element {
return ( <div className = 'control-pane'>
<div className='control-section col-lg-12'>
<div className='validation_wrapper'>
<div className="control_wrapper" id="control_wrapper">
<form id="form1" method="post">
<div className="form-group">
<div className="e-float-input">
<input type="email" id="Email" name="email" data-msg-
containerid="mailError"/>
<span className="e-float-line"/>
<label className="e-float-text e-label-top" htmlFor="email"
>Email</label>
</div>
<div id="mailError"/>
</div>
<div className="form-group" >
<div className="e-float-input">
<input type="password" id="number" name="password" data-msg-
containerid="noError" />
<span className="e-float-line"/>
<label className="e-float-text e-label-top"
htmlFor="password" >Password</label>
</div>
<div id="noError"/>
</div>
</form>
<br/>
<br/>
<div className="submitBtn">
<button className="submit-btn e-btn" onClick={this.onSubmitClick =
this.onSubmitClick.bind(this)} id="submit-btn">Submit</button>
</div>
<div id="confirmationDialog"/> </div>
</div>
</div>
<DialogComponent id="defaultdialog" isModal={true} visible ={false}
content = 'Your details has been updated successfully, Thank you'
• validationBegin
• validationComplete
Validation Begin
validationBegin event triggers before the validation starts and also it invoke for each rules in validation
process. Please find the below code snippet.
`ts
validationBegin: function(args) {
// ("Validation begin");
},
`
The following values are passed in args. You can use this values in event validation.
| Fields | Description |
|---------|-------------|
|element| Specifies the input element |
|name | Specifies the event name (validationBegin) |
|param | Specifies the param value (true/false) |
|value | Specifies the input value |
Validation Complete
validationComplete event triggered after validation is completed and also it invoke for each rules in
validation process. Please find the below code snippet.
`ts
validationComplete: function(args) {
// ("Validation complete");
}
`
The following values are passed in args. You can use this values in event validation.
| Fields | Description |
|---------|-------------|
|element| Specifies the input element |
|name | Specifies the event name (validationComplete) |
|param | Specifies the param value (true/false) |
|value | Specifies the input value |
|status | Specifies the status (success/failure) |
|inputName | Specifies the type of input |
Please find the simple sample for validation events.
INDEX.JSX
import { enableRipple } from '@syncfusion/ej2-base';
import { FormValidator } from '@syncfusion/ej2-inputs';
import { TimePickerComponent } from '@syncfusion/ej2-react-calendars';
import * as React from "react";
import * as ReactDOM from "react-dom";
// enable ripple effect
enableRipple(true);
export default class App extends React.Component {
componentDidMount() {
// add the rules for validation
const options = {
// validation begin event
validationBegin: (args) => {
const span = document.createElement("span");
span.innerHTML = "Validation begin <hr>";
const log = document.getElementById("EventLog");
log.insertBefore(span, log.firstChild);
},
// validation complete event
validationComplete: (args) => {
if (args.status === "success") {
const span = document.createElement("span");
span.innerHTML = "Validation complete success <hr>";
const log = document.getElementById("EventLog");
log.insertBefore(span, log.firstChild);
}
else {
const span = document.createElement("span");
span.innerHTML = "Validation complete failure <hr>";
const log = document.getElementById("EventLog");
log.insertBefore(span, log.firstChild);
}
},
};
// initialize the form validator
const formObject = new FormValidator('#form1', options);
formObject.addRules('timepicker', { required: true });
document.getElementById('clear').addEventListener('click', () => {
document.getElementById("EventLog").innerHTML = "";
});
}
render() {
return (<div>
<div id='sample'>
<form id='form1' method="post">
<div className='content-wrapper'>
<TimePickerComponent id="timepicker"
placeholder="Select a Time"/>
</div>
<label className='e-error' id='timepickerError'
htmlFor='timepicker'/>
</form>
</div>
<div id="list_event">
<h4><b>Event Trace</b></h4>
<div id="evt">
<div className="eventarea">
{/*Event log element */}
<span className="EventLog" id="EventLog"/>
</div>
<div className="evtbtn">
{/*clear button element */}
<button className='e-btn' id="clear"> Clear </button>
</div>
</div>
</div>
</div>);
}
}
ReactDOM.render(<App />, document.getElementById('form-element'));
INDEX.TSX
import { enableRipple } from '@syncfusion/ej2-base';
import { FormEventArgs, FormValidator, FormValidatorModel, ValidArgs } from
'@syncfusion/ej2-inputs';
import { TimePickerComponent } from '@syncfusion/ej2-react-calendars';
import * as React from "react";
import * as ReactDOM from "react-dom";
// enable ripple effect
enableRipple(true);
export default class App extends React.Component<{}, {}> {
public componentDidMount(): void {
// add the rules for validation
const options: FormValidatorModel = {
// validation begin event
validationBegin: (args: ValidArgs) => {
const span = document.createElement("span");
span.innerHTML = "Validation begin <hr>";
const log = document.getElementById("EventLog") as
HTMLElement;
log.insertBefore(span, log.firstChild);
},
// validation complete event
validationComplete: (args: FormEventArgs) => {
</div>
</div>);
}
}
ReactDOM.render(<Validation />, document.getElementById('form-element'));
INDEX.TSX
import { L10n, select } from '@syncfusion/ej2-base';
import { FormValidator, FormValidatorModel } from '@syncfusion/ej2-inputs';
import { DialogComponent } from '@syncfusion/ej2-react-popups';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
L10n.load({
'ar-AR': {
'formValidator':{
"creditcard": ""يرجى إدخال رقم بطاقة صالح,
"date": "ارجوك ادخل تاريخ صحيح.",
"dateIso": "( الرجاء إدخال تاريخ صالحISO)",
"digits" : ""الرجاء إدخال األرقام فقط,
"email": ""أدخل بريد إلكتروني صالح,
"equalTo" : ""يرجى إدخال نص مطابقة صحيح,
"max" : "}0{ "الرجاء إدخال قيمة أقل من أو تساوي,
"maxLength" : " }حرف0{ "الرجاء إدخال ما ال يزيد عن,
"min" : "}0{ "الرجاء إدخال قيمة أكبر من أو تساوي,
"minLength": " }على األقل0{ "الرجاء إدخال أحرف,
"number" : ""من فضلك أدخل رقما صالحا,
"pattern" : ""الرجاء إدخال قيمة نمط صحيح,
"range" : "}1{ }و0{ "يرجى إدخال قيمة بين,
"rangeLength" : " }من األحرف1{ }و0{ "يرجى إدخال قيمة بين,
"regex": ""يرجى إدخال قيمة صحيحة,
"required" : ""هذه الخانة مطلوبه,
"tel" : ""يرجى إدخال رقم هاتف صالح,
"url": ""أدخل رابط صحيح من فضلك
}
}
});
export default class Validation extends React.Component<{}, {}> {
public dialogInstance: DialogComponent;
public formObject: FormValidator;
// Dialog will be closed, while clicking on overlay
public onOverlayClick() {
this.dialogInstance.hide();
}
public componentDidMount(): void {
const options: FormValidatorModel = {
locale:"ar-AR",
rules: {
email: { email: true },
}
};
this.formObject = new FormValidator('#form1', options);
}
public onSubmitClick(): void {
if(this.formObject.validate()) {
this.formObject.element.reset();
this.dialogInstance.show();
}
}
public render(): JSX.Element {
return ( <div className = 'control-pane'>
<div className='control-section col-lg-12'>
<div className='validation_wrapper'>
<div className="control_wrapper" id="control_wrapper">
<form id="form1" method="post">
<div className="form-group">
<div className="e-float-input">
<input type="email" id="Email" name="email"
data-msg-containerid="mailError"/>
<span className="e-float-line"/>
<label className="e-float-text e-label-top"
htmlFor="email" >Email</label>
</div>
<div id="mailError"/>
</div>
</form>
</div>
</div>
</div>
</div>) }
}
ReactDOM.render(<Validation />, document.getElementById('form-element'));
In the following example, a login form is created with Syncfusion components such as TextBox,
DatePicker, and Button. This form is validated using the React FormValidator component.
APP.JSX
import { useState, useEffect, useRef, useReducer } from 'react';
import * as React from "react";
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { FormValidator } from '@syncfusion/ej2-inputs';
import { TextBoxComponent } from '@syncfusion/ej2-react-inputs';
import { DatePickerComponent } from '@syncfusion/ej2-react-calendars';
let formObject;
function App() {
const userNameRef = useRef(null);
const [dateOfBirth, setDateOfBirth] = useState('');
const initialState = { email: '', password: '' };
const reducer = (state, action) => {
switch (action.type) {
case 'update':
return { ...state, [action.field]: action.value };
default:
return initialState;
}
};
const [state, dispatch] = useReducer(reducer, initialState);
const dateChangeHandler = (event) => {
setDateOfBirth(event.value);
};
const update = (field) => (event) => {
//update action is dispatched to update the email and password state
value
dispatch({ type: 'update', field, value: event.value });
};
useEffect(() => {
userNameRef.current.focusIn();
const options = {
// validation rules
rules: {
email: {
required: [true, '* Please enter your email'],
},
password: {
required: [true, '* Please enter your password'],
},
date: {
required: [true, '* Please enter your date of birth'],
},
},
};
// Initialize the form validator
formObject = new FormValidator('#form1', options);
}, []);
const onSubmit = () => {
formObject.validate();
if (formObject.validate()) {
formObject.element.reset();
}
};
return (<div>
<div className="control_wrapper" id="control_wrapper">
<h3 className="form-title">User Login</h3>
<div className="control_wrapper textbox-form">
<form id="form1" method="post">
<div className="form-group">
<TextBoxComponent ref={userNameRef} type="email" name="email"
value={state.email} change={update('email')} placeholder="Username"
floatLabelType="Auto" data-msg-containerid="errroForEmail"/>
<div id="errroForEmail"/>
</div>
<div className="form-group">
<TextBoxComponent type="password" name="password"
value={state.password} change={update('password')} placeholder="Password"
floatLabelType="Auto" data-msg-containerid="errroForPassword"/>
<div id="errroForPassword"/>
</div>
<div className="form-group">
<DatePickerComponent name="date" value={dateOfBirth}
change={dateChangeHandler} placeholder="Date of Birth" floatLabelType="Auto"
data-msg-containerid="errroForDateOfBirth"/>
<div id="errroForDateOfBirth"/>
</div>
</form>
<div className="submitBtn">
<ButtonComponent onClick={onSubmit}>Submit</ButtonComponent>
</div>
</div>
<br />
<br />
</div>
</div>);
}
export default App;
APP.TSX
import { useState, useEffect, useRef, useReducer } from 'react';
import * as React from "react";
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { FormValidator } from '@syncfusion/ej2-inputs';
import { TextBoxComponent } from '@syncfusion/ej2-react-inputs';
import { DatePickerComponent } from '@syncfusion/ej2-react-calendars';
let formObject;
function App() {
const userNameRef = useRef(null);
const [dateOfBirth, setDateOfBirth] = useState('');
const initialState = { email: '', password: '' };
const reducer = (state, action) => {
switch (action.type) {
case 'update':
</div>
<div className="form-group">
<TextBoxComponent
type="password"
name="password"
value={state.password}
change={update('password')}
placeholder="Password"
floatLabelType="Auto"
data-msg-containerid="errroForPassword"
/>
<div id="errroForPassword" />
</div>
<div className="form-group">
<DatePickerComponent
name="date"
value={dateOfBirth}
change={dateChangeHandler}
placeholder="Date of Birth"
floatLabelType="Auto"
data-msg-containerid="errroForDateOfBirth"
/>
<div id="errroForDateOfBirth" />
</div>
</form>
<div className="submitBtn">
<ButtonComponent onClick={onSubmit}>Submit</ButtonComponent>
</div>
</div>
<br />
<br />
</div>
</div>
);
}
export default App;
Perform validation
For the input validation, specify rules for the email, password, and date of birth fields. The form
validation will be initiated using the useEffect Hook.
`javascript
useEffect(() => {
const options = {
// add the rules for validation
rules: {
email: {
required: [true, '* Please enter your email'],
},
password: {
userNameRef.current.focusIn();
}
`
Run the Application
Run the application in the browser using the following command.
`
npm run start
Link to the Video`
Gantt
Getting Started
Getting started
This section explains you the steps required to create a simple Essential JS 2 Gantt in a React application
and demonstrates its basic features.
To get started quickly with React Gantt Chart the following video explains the project configuration and
basic Gantt chart features behaviours:
Dependencies
Following is the list of minimum dependencies required to use the Gantt.
`javascript
|-- @syncfusion/ej2-react-gantt
|-- @syncfusion/ej2-grids
|-- @syncfusion/ej2-gantt
|-- @syncfusion/ej2-layouts
|-- @syncfusion/ej2-treegrid
`
Setup for Local Development
You can use create-react-app to setup the applications.
To install create-react-app run the following command.
`
npm install -g create-react-app
`
<div class='tsx'>
`
create-react-app quickstart --scripts-version=react-scripts-ts
`
</div>
<div class='jsx'>
`
cd quickstart
`
</div>
Adding Syncfusion packages
All the available Essential JS 2 packages are published in npmjs.com public registry.To install Gantt
component, use the following command
`
npm install @syncfusion/ej2-react-gantt --save
`
Adding CSS reference
Add components style as given below in src/App.css.
`css
@import '../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-calendars/styles/material.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css';
@import '../node_modules/@syncfusion/ej2-gantt/styles/material.css';
@import '../node_modules/@syncfusion/ej2-grids/styles/material.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
@import '../node_modules/@syncfusion/ej2-layouts/styles/material.css';
@import '../node_modules/@syncfusion/ej2-lists/styles/material.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import '../node_modules/@syncfusion/ej2-richtexteditor/styles/material.css';
@import '../node_modules/@syncfusion/ej2-treegrid/styles/material.css';
`
To refer App.css in the application then import it in the src/App.tsx file.
Adding Gantt component
Now, you can start adding React Gantt component in the application. For getting started, add the Gantt
component in src/App.tsx file using following code.
Place the following gantt code in the src/App.tsx.
`ts
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import './App.css';
const GanttData: object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new Date('04/02/2019'), Duration: 4, Progress:
50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new Date('04/02/2019'), Duration: 4, Progress: 50
},
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new Date('04/02/2019'), Duration: 4, Progress: 50
},
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation', StartDate: new Date('04/04/2019'), Duration:
3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new Date('04/04/2019'), Duration: 3, Progress:
50 }
]
},
];
function App () {
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation', StartDate: new Date('04/04/2019'), Duration:
3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new Date('04/04/2019'), Duration: 3, Progress:
50 }
]
},
];
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
};
return (<GanttComponent dataSource={GanttData} height="450px" taskFields={taskFields}/>);
}
ReactDOM.render(<App />, document.getElementById('root'));
`
Binding Gantt with data
Bind data with the Gantt control by using the dataSource property. It accepts an array of JavaScript
object or the DataManager instance.
`
<!DOCTYPE html>
<html lang="en">
<head>
`
`ts
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import './App.css';
const GanttData = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new Date('04/02/2019'), Duration: 4, Progress:
50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new Date('04/02/2019'), Duration: 4, Progress: 50
},
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new Date('04/02/2019'), Duration: 4, Progress: 50
},
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation', StartDate: new Date('04/04/2019'), Duration:
3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new Date('04/04/2019'), Duration: 3, Progress:
50 }
]
},
];
function App() {
return (<GanttComponent dataSource={GanttData}/>);
}
ReactDOM.render(<App />, document.getElementById('root'));
`
Mapping task fields
The data source fields that are required to render the tasks are mapped to the Gantt component using
the taskFields property.
`ts
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import './App.css';
const GanttData: object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new Date('04/02/2019'), Duration: 4, Progress:
50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new Date('04/02/2019'), Duration: 4, Progress: 50
},
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new Date('04/02/2019'), Duration: 4, Progress: 50
},
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation', StartDate: new Date('04/04/2019'), Duration:
3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new Date('04/04/2019'), Duration: 3, Progress:
50 }
]
},
];
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
};
return (
<GanttComponent dataSource={GanttData} height="450px" taskFields={taskFields}/>
);
}
ReactDOM.render(<App />, document.getElementById('root'));
`
`ts
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import './App.css';
const GanttData = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new Date('04/02/2019'), Duration: 4, Progress:
50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new Date('04/02/2019'), Duration: 4, Progress: 50
},
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new Date('04/02/2019'), Duration: 4, Progress: 50
},
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation', StartDate: new Date('04/04/2019'), Duration:
3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new Date('04/04/2019'), Duration: 3, Progress:
50 }
]
},
];
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
};
return (<GanttComponent dataSource={GanttData} height="450px" taskFields={taskFields}/>);
}
ReactDOM.render(<App />, document.getElementById('root'));
`
Defining columns
Gantt has an option to define columns as an array. You can customize the Gantt columns using the
following properties:
`ts
import { GanttComponent, ColumnsDirective, ColumnDirective } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import './App.css';
const GanttData: object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new Date('04/02/2019'), Duration: 4, Progress:
50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new Date('04/02/2019'), Duration: 4, Progress: 50
},
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new Date('04/02/2019'), Duration: 4, Progress: 50
},
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation', StartDate: new Date('04/04/2019'), Duration:
3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new Date('04/04/2019'), Duration: 3, Progress:
50 }
]
},
];
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
};
return (
<GanttComponent dataSource={GanttData} height="450px" taskFields={taskFields}>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='50' />
<ColumnDirective field='TaskName' headerText='Job Name'/>
<ColumnDirective field='StartDate'/>
<ColumnDirective field='Duration'/>
</ColumnsDirective>
</GanttComponent>
);
}
ReactDOM.render(<App />, document.getElementById('root'));
`
`ts
import { GanttComponent, ColumnsDirective, ColumnDirective } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
};
return (<GanttComponent dataSource={GanttData} height="450px" taskFields={taskFields}>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='50'/>
<ColumnDirective field='TaskName' headerText='Job Name'/>
<ColumnDirective field='StartDate'/>
<ColumnDirective field='Duration'/>
</ColumnsDirective>
</GanttComponent>);
}
ReactDOM.render(<App />, document.getElementById('root'));
`
Module Injection
Gantt component features are segregated into individual feature-wise modules.In order to use a
particular feature, you need to inject its feature service in the App.In the current application, we are
going to use editing, sorting and filtering feature of Gantt.Please find relevant feature service name and
description as follows.
These modules should be injected into the gantt using the Inject directive.
Enable editing
The editing feature enables you to edit the tasks in the Gantt component. It can be enabled by using the
editSettings.allowEditing and editSettings.allowTaskbarEditing properties.
The following editing options are available to update the tasks in Gantt,
• Cell
• Dialog
• Taskbar
• Connector line
Cell editing
Modify the task details through cell editing by setting the edit mode to Auto. Inject the Edit module as
follows. If the Edit module is not injected, you cannot edit the cell when a grid cell is clicked.
INDEX.JSX
import { GanttComponent, Inject, Edit, Selection } from '@syncfusion/ej2-
react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
};
const editSettings = {
allowEditing: true,
mode: 'Auto',
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true} editSettings={editSettings} height='400px'>
<Inject services={[Edit, Selection]}/>
</GanttComponent>;
}
;
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import { GanttComponent, Inject, Edit, Selection } from '@syncfusion/ej2-
react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App () {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
};
const editSettings: any = {
allowEditing: true,
mode: 'Auto',
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true}
editSettings={editSettings} height = '400px'>
<Inject services={[Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/23.1.44/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Note: When the edit mode is set to Auto, you can change the cells to editable mode by double-clicking
anywhere at the TreeGrid and edit the task details in the edit dialog by double-clicking anywhere at the
chart.
Dialog editing
Modify the task details through dialog by setting the edit mode to Dialog. Inject the Edit module as
follows. If the Edit module is not injected, you cannot edit the task details through the edit dialog.
INDEX.JSX
import { GanttComponent, Inject, Edit, Selection } from '@syncfusion/ej2-
react-gantt';
import * as React from 'react';
INDEX.TSX
import { GanttComponent, Inject, Edit, Selection } from '@syncfusion/ej2-
react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App () {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editSettings: any = {
allowEditing: true,
mode: 'Dialog'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true}
editSettings={editSettings} height = '400px'>
<Inject services={[Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
Note: In dialog editing mode, the edit dialog will appear while performing double-click action in both
TreeGrid and chart sides.
Taskbar editing
Modify the task details through user interaction such as resizing and dragging the taskbar by enabling
the allowTaskbarEditing property. Inject the Edit module as follows. If the Edit module is not injected,
you cannot edit the task details while dragging the taskbar.
INDEX.JSX
import { GanttComponent, Inject, Edit } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editSettings = {
allowTaskbarEditing: true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
editSettings={editSettings} height='400px'>
<Inject services={[Edit]}/>
</GanttComponent>;
}
;
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import { GanttComponent, Inject, Edit } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App () {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editSettings: any = {
allowTaskbarEditing: true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
editSettings={editSettings} height = '400px'>
<Inject services={[Edit]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/23.1.44/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Dependency editing
Modify the task dependencies using mouse interactions by enabling the allowTaskbarEditing property
along with mapping the task dependency data source field to the dependency property.
INDEX.JSX
import { GanttComponent, Inject, Edit } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
const data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, Predecessor: '2FS' },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50, Predecessor: '7SS' }
]
},
];
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
dependency: 'Predecessor'
};
const editSettings = {
allowTaskbarEditing: true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
editSettings={editSettings} height='400px'>
<Inject services={[Edit]}/>
</GanttComponent>;
}
;
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import { GanttComponent, Inject, Edit } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
const data: object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate:
new Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50,Predecessor:'2FS' },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50,Predecessor:'7SS' }
]
},
];
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
dependency: 'Predecessor'
};
const editSettings: any = {
allowTaskbarEditing: true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
editSettings={editSettings} height = '400px'>
<Inject services={[Edit]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/23.1.44/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
• Start to Start (SS): You cannot start a task until the dependent task starts.
• Start to Finish (SF): You cannot finish a task until the dependent task finishes.
• Finish to Start (FS): You cannot start a task until the dependent task completes.
• Finish to Finish (FF): You cannot finish a task until the dependent task completes.
You can show the relationship in tasks by using the dependency property as shown in the following code
example.
INDEX.JSX
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
const data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, Predecessor: '2FS' },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50, Predecessor: '7SS' }
]
},
];
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
height='400px'/>;
}
;
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
const data: object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate:
new Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50,Predecessor:'2FS' },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50,Predecessor:'7SS' }
]
},
];
function App() {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields} height
= '400px'/>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/23.1.44/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Assigning resources
You can display and assign the resource for each task in the Gantt control. Create a collection of JSON
object, which contains id, name, unit and group of the resources and assign it to the resources property.
Map these fields to the Gantt control using the resourceFields property.
INDEX.JSX
const projectResources = [
{ resourceId: 1, resourceName: 'Martin Tamer' },
{ resourceId: 2, resourceName: 'Rose Fuller' },
{ resourceId: 3, resourceName: 'Margaret Buchanan' },
INDEX.TSX
const projectResources: object[] = [
{ resourceId: 1, resourceName: 'Martin Tamer' },
{ resourceId: 2, resourceName: 'Rose Fuller' },
{ resourceId: 3, resourceName: 'Margaret Buchanan' },
{ resourceId: 4, resourceName: 'Fuller King' }
];
const data: object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate:
new Date('04/02/2019'), Duration: 4, Progress: 50,resources: [2, 3] },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50,resources: [2] },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50,resources: [1] }
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50,resources: [1, 3, 5] },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
},
];
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
function App () {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
resourceInfo: 'resources'
};
const labelSettings: any = {
rightLabel: 'resources'
};
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/23.1.44/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Enable filtering
The filtering feature enables you to view the reduced amount of records based on filter criteria. Gantt
provides the menu filtering support for each column. It can be enabled by setting the allowFiltering
property to true along with injecting the Filter module as shown in the following code example. Filtering
feature can also be customized using the filterSettings property.
INDEX.JSX
import { GanttComponent, Inject, Filter } from '@syncfusion/ej2-react-
gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} height='400px'>
<Inject services={[Filter]}/>
</GanttComponent>;
}
;
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import { GanttComponent, Inject, Filter } from '@syncfusion/ej2-react-
gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} height = '400px'>
<Inject services={[Filter]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
Enable sorting
The sorting feature enables you to order the records. It can be enabled by setting the allowSorting
property to true. Inject the Sort module as follows. If the Sort module is not injected, you cannot sort
the records when a header is clicked. The sorting feature can be customized using the sortSettings
property.
INDEX.JSX
import { GanttComponent, Inject, Sort } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSorting={true} height='400px'>
<Inject services={[Sort]}/>
</GanttComponent>;
}
;
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import { GanttComponent, Inject, Sort } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App () {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSorting={true} height='400px'>
<Inject services={[Sort]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/23.1.44/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
];
import { GanttComponent, Inject, Edit, Filter, Sort } from '@syncfusion/ej2-
react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
dependency: 'Predecessor',
resourceInfo: 'resources'
};
const labelSettings = {
rightLabel: 'resources'
};
const editSettings = {
allowEditing: true,
editMode: 'Auto',
allowTaskbarEditing: true
};
const resourceFields = {
id: 'resourceId',
name: 'resourceName',
};
return <GanttComponent dataSource={data} allowFiltering={true}
allowSorting={true} taskFields={taskFields} editSettings={editSettings}
labelSettings={labelSettings} resourceFields={resourceFields}
resources={projectResources} height='400px'>
<Inject services={[Edit, Filter, Sort]}/>
</GanttComponent>;
}
;
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
const projectResources: object[] = [
{ resourceId: 1, resourceName: 'Project Manager' },
{ resourceId: 2, resourceName: 'Software Analyst' },
{ resourceId: 3, resourceName: 'Developer' },
{ resourceId: 4, resourceName: 'Testing Engineer' }
];
const data: object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, resources: [2, 3] },
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
You can refer to our React Gantt Chart feature tour page for its groundbreaking feature representations.
You can also explore our React Gantt Chart example that shows how to render the Gantt Chart in React.
Creating a Next.js Application Using Syncfusion React Components
This section provides a step-by-step guide for setting up a Next.js application and integrating the
Syncfusion React Gantt component.
What is Next.js?
Next.js is a React framework that makes it easy to build fast, SEO-friendly, and user-friendly web
applications. It provides features such as server-side rendering, automatic code splitting, routing, and
API routes, making it an excellent choice for building modern web applications.
Prerequisites
Before getting started with the Next.js application, ensure the following prerequisites are met:
YARN
yarn create next-app
Using one of the above commands will lead you to set up additional configurations for the project as
below:
1.Define the project name: Users can specify the name of the project directly. Let's specify the name of
the project as ej2-nextjs-gantt.
CMD
√ What is your project named? » ej2-nextjs-gantt
3.Once complete the above mentioned steps to create ej2-nextjs-gantt, navigate to the directory using
the below command:
CMD
cd ej2-nextjs-gantt
The application is ready to run with default settings. Now, let's add Syncfusion components to the
project.
Install Syncfusion React packages
Syncfusion React component packages are available at npmjs.com. To use Syncfusion React components
in the project, install the corresponding npm package.
Here, the React Gantt component is used in the project. To install the React Gantt component, use the
following command:
NPM
npm install @syncfusion/ej2-react-gantt --save
YARN
yarn add @syncfusion/ej2-react-gantt
To know more about built-in themes and CSS reference for individual components, refer to the themes
section.
Add Syncfusion React component
Follow the below steps to add the React Gantt component to the Next.js project:
1.Before adding the Gantt component to your markup, create a datasource.tsx file within the src/app/
folder and add the Gantt component data.
DATASOURCE.TSX
export const projectResources: object[] = [
{ resourceId: 1, resourceName: 'Project Manager' },
{ resourceId: 2, resourceName: 'Software Analyst' },
{ resourceId: 3, resourceName: 'Developer' },
{ resourceId: 4, resourceName: 'Testing Engineer' }
];
export const data: object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, resources: [2, 3] },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, resources: [2] },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Predecessor: '3FS', Progress: 50,
resources: [1] },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new Date('04/04/2019'),
Duration: 3, Progress: 50, resources: [1, 3, 5] },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Predecessor: '7SS', Progress: 50 }
]
},
];
2.Then, import and define the Gantt component in the src/app/page.tsx file, as shown below:
PAGE.TSX
'use client'
import { GanttComponent, Inject, Edit, Filter, Sort } from '@syncfusion/ej2-
react-gantt';
import { projectResources, data } from './datasource';
export default function Home() {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
dependency: 'Predecessor',
resourceInfo: 'resources'
};
const labelSettings: any = {
rightLabel: 'resources'
};
const editSettings: any = {
allowEditing: true,
editMode: 'Auto',
allowTaskbarEditing: true
};
const resourceFields: any = {
id: 'resourceId',
name: 'resourceName',
};
return (
<>
<h2>Syncfusion React Gantt Component</h2>
<GanttComponent dataSource={data} allowFiltering={true} allowSorting={true}
taskFields={taskFields} editSettings={editSettings}
labelSettings={labelSettings}
resourceFields={resourceFields} resources={projectResources} height='400px'>
<Inject services={[Edit, Filter, Sort]} />
</GanttComponent>
</>
)
}
YARN
yarn run dev
To learn more about the functionality of the Gantt component, refer to the documentation.
View the NEXT.js Gantt sample in the GitHub repository.
Getting Started with the React Gantt Component in the Preact Framework
This article provides a step-by-step guide for setting up a Preact project and integrating the Syncfusion
React Gantt component.
Preact is a fast and lightweight JavaScript library for building user interfaces. It's often used as an
alternative to larger frameworks like React. The key difference is that Preact is designed to be smaller in
size and faster in performance, making it a good choice for projects where file size and load times are
critical factors.
Prerequisites
System requirements for Syncfusion React UI components
Set up the Preact project
To create a new Preact project, use one of the commands that are specific to either NPM or Yarn.
`bash
npm init preact
`
or
`bash
yarn init preact
`
Using one of the above commands will lead you to set up additional configurations for the project, as
below:
1\. Define the project name: We can specify the name of the project directly. Let's specify the name of
the project as my-project for this article.
`bash
T Preact - Fast 3kB alternative to React with the same modern API
|
• Project directory:
| my-project
—
`
2\. Choose JavaScript as the framework variant to build this Preact project using JavaScript and React.
`bash
T Preact - Fast 3kB alternative to React with the same modern API
|
• Project language:
| > JavaScript
| TypeScript
—
`
3\. Then configure the project as below for this article.
`bash
T Preact - Fast 3kB alternative to React with the same modern API
|
• Use router?
| Yes / > No
—
|
| Yes / > No
—
|
• Use ESLint?
| Yes / > No
—
`
5\. Upon completing the aforementioned steps to create my-project, run the following command to
jump into the project directory:
`bash
cd my-project
`
Now that my-project is ready to run with default settings, let's add Syncfusion components to the
project.
Add the Syncfusion React packages
Syncfusion React component packages are available at npmjs.com. To use Syncfusion React components
in the project, install the corresponding npm package.
This article uses the React Gantt component as an example. To use the React Gantt component in the
project, the @syncfusion/ej2-react-gantt package needs to be installed using the following command:
`bash
npm install @syncfusion/ej2-react-gantt --save
`
or
`bash
yarn add @syncfusion/ej2-react-gantt
`
Import Syncfusion CSS styles
You can import themes for the Syncfusion React component in various ways, such as using CSS or SASS
styles from npm packages, CDN, CRG and Theme Studio. Refer to themes topic to know more about
built-in themes and different ways to refer to theme's in a React project.
In this article, the Material 3 theme is applied using CSS styles, which are available in installed packages.
The necessary Material 3 CSS styles for the Gantt component and its dependents were imported into
the src/style.css file.
~/SRC/STYLE.CSS
@import '../node_modules/@syncfusion/ej2-base/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-calendars/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-gantt/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-grids/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-layouts/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-lists/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-
richtexteditor/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-treegrid/styles/material3.css';
The order of importing CSS styles should be in line with its dependency graph.
Add the Syncfusion React component
Follow the below steps to add the React Gantt component to the Vite project:
1\. Before adding the Gantt component to your markup, import the Gantt component in the
src/index.jsx file.
~/SRC/INDEX.JSX
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
2\. Then, define the Gantt component with the dataSource property. Declare the values for the
dataSource property.
~/SRC/INDEX.JSX
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { render } from 'preact';
import './style.css';
function App () {
const GanttData = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new Date('04/04/2019'),
Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
},
];
const taskFields= {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
};
return (
<GanttComponent dataSource={GanttData} height="450px"
taskFields={taskFields}/>
);
}
render(<App />, document.querySelector('#app'));
See also
Getting Started with the Syncfusion React UI Component
Module in React Gantt component
The modules that are available in Gantt are as follows.
| Module | Description |
|------|-------------|
| Sort| Inject this module to use sorting feature.|
| Filter| Inject this module to use filtering feature.|
| Reorder | Inject this module to use reorder feature.|
| ExcelExport | Inject this module to use excel export feature.|
| PdfExport | Inject this module to use PDF export feature.|
| RowDD| Inject this module to use row drag and drop feature.|
| Resize| Inject this module to use resize feature.|
| Toolbar| Inject this module to use toolbar feature.|
| Edit| Inject this module is use editing feature.|
| Selection| Inject this module to use selection feature.|
| DayMarkers| Inject this module to use event markers.|
| ContextMenu| Inject this module to use context menu feature.|
| ColumnMenu| Inject this module to use column menu feature.|
| VirtualScroll| Inject this module to use virtual scroll feature.|
| CriticalPath | Inject this module to use critical path feature.|
These modules should be injected into the Gantt using the Gantt.Inject method.
Data binding in React Gantt component
The Gantt component uses DataManager for binding the data source, which supports both RESTful
JSON data services and local JavaScript object array. The Link to the Video property can be assigned
either with the instance of DataManager or JavaScript object array collection. The Gantt component
supports binding two types of data:
• Local data
• Remote data
The following video explains about the types of data binding and how to use it on the Gantt Chart
component:
Local data
To bind local data to Gantt, you can assign a JavaScript object array to the dataSource property. The
local data source can also be provided as an instance of the DataManager.
In local data binding, the data source for rendering the Gantt component is retrieved from the same
application locally.
The following are the two types of data binding possible with the Gantt component:
};
return <GanttComponent dataSource={HierarchyData} taskFields={taskFields}
height = '400px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let HierarchyData: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
}
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={HierarchyData} taskFields={taskFields}
height = '400px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
• ID field: This field contains unique values used to identify each individual task and it is mapped
to the id property.
• Parent ID field: This field contains values that indicate parent tasks and it is mapped to the
parentID property.
INDEX.JSX
let SelfReferenceData = [
{ TaskID: 1,TaskName: 'Project Initiation',StartDate: new
Date('04/02/2019'),EndDate: new Date('04/21/2019')},
INDEX.TSX
let SelfReferenceData: Object[] = [
{ TaskID: 1,TaskName: 'Project Initiation',StartDate: new
Date('04/02/2019'),EndDate: new Date('04/21/2019')},
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50,ParentId:1 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, ParentId:1 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50,ParentId:1 },
{ TaskID: 5, TaskName: 'Project Estimation',StartDate: new
Date('04/02/2019'),EndDate: new Date('04/21/2019')},
{ TaskID: 6, TaskName: 'Develop floor plan for estimation', StartDate:
new Date('04/04/2019'), Duration: 3, Progress: 50, ParentId:5 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50,ParentId:5 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50, ParentId:5 }
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Remote data
To bind remote data to the Gantt component, assign service data as an instance of DataManager to the
dataSource property.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { DataManager, WebApiAdaptor } from '@syncfusion/ej2-data';
function App (){
const taskFields = {
id: 'TaskId',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
dependency: 'Predecessor',
child: 'SubTasks'
};
const dataSource = new DataManager({
url: 'https://ej2services.syncfusion.com/production/web-
services/api/GanttData',
adaptor: new WebApiAdaptor,
crossDomain: true
});
return <GanttComponent dataSource={dataSource} taskFields={taskFields}
height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { DataManager, WebApiAdaptor } from '@syncfusion/ej2-data';
function App (){
const taskFields: any = {
id: 'TaskId',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
dependency: 'Predecessor',
child: 'SubTasks'
};
const dataSource: DataManager = new DataManager({
url: 'https://ej2services.syncfusion.com/production/web-
services/api/GanttData',
adaptor: new WebApiAdaptor,
crossDomain: true
});
return <GanttComponent dataSource={dataSource} taskFields={taskFields}
height = '450px'>
</GanttComponent>
};
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
URL Adaptor
In Gantt, we can fetch data from SQL database using ADO.NET Entity Data Model and update the
changes on CRUD action to the server by using DataManager support. To communicate with the
remote data we are using UrlAdaptor of DataManager property to call the server method and get back
resultant data in JSON format. We can know more about UrlAdaptor from here.
Please refer the link to create the ADO.NET Entity Data Model in Visual Studio,
We can define data source for Gantt as instance of DataManager using url property of DataManager.
Please Check the below code snippet to assign data source to Gantt.
`ts
import * as React from 'react';
render() {
return <GanttComponent dataSource={this.dataSource} taskFields={this.taskFields} height = '450px'>
</GanttComponent>
}
};
ReactDOM.render(<App />, document.getElementById('root'));
`
The following code example describes the CRUD operations handled at server-side.
`
public IActionResult BatchUpdate([FromBody] CRUDModel batchmodel)
{
public class CRUDModel
{
public List<GanttDataSource> added { get; set; }
public List<GanttDataSource> changed { get; set; }
public List<GanttDataSource> deleted { get; set; }
public object key { get; set; }
public string action { get; set; }
public string table { get; set; }
}
public IActionResult BatchUpdate([FromBody] CRUDModel batchmodel)
{
if (batchmodel.changed != null)
{
for (var i = 0; i < batchmodel.changed.Count(); i++)
{
var value = batchmodel.changed[i];
GanttDataSource result = DataList.Where(or => or.taskId == value.taskId).FirstOrDefault();
result.taskId = value.taskId;
result.taskName = value.taskName;
result.startDate = value.startDate;
result.endDate = value.endDate;
result.duration = value.duration;
result.progress = value.progress;
result.parentID = value.parentID;
}
}
if (batchmodel.deleted != null)
{
for (var i = 0; i < batchmodel.deleted.Count(); i++)
{
DataList.Remove(DataList.Where(or => or.taskId.Equals(batchmodel.deleted[i].taskId)).FirstOrDefault());
RemoveChildRecords(batchmodel.deleted[i].taskId);
}
}
if (batchmodel.added != null)
{
for (var i = 0; i < batchmodel.added.Count(); i++)
{
DataList.Add(batchmodel.added[i]);
}
}
return Json(new { addedRecords = batchmodel.added, changedRecords = batchmodel.changed,
deletedRecords = batchmodel.deleted });
}
public void RemoveChildRecords(int key)
{
var childList = DataList.Where(x => x.parentID == key).ToList();
foreach (var item in childList)
{
DataList.Remove(item);
RemoveChildRecords(item.taskId);
}
}
return Json(new { addedRecords = batchmodel.added, changedRecords = batchmodel.changed,
deletedRecords = batchmodel.deleted });
}
`
Load child on demand
To render child records on demand, assign a remote service URL in the instance of DataManager to the
Url property. To interact with the remote data source, provide the endpoint URL and also define the
hasChildMapping property in taskFields of Gantt Chart.
The <code>hasChildMapping</code> property maps the field name in the data source, which denotes
whether the current record holds any child records. This is useful internally to show expand icon while
binding child data on demand.
When loadChildOnDemand is disabled, all the root nodes are rendered in a collapsed state at initial load.
On expanding the root node, the child nodes will be loaded from the remote server.
When <code>enableVirtualization</code> is enabled and <code>loadChildOnDemand</code> is
disabled, only the current viewport root nodes are rendered in a collapsed state.
When a root node is expanded, its child nodes are rendered and maintained in a collection locally, such
that on consecutive expand/collapse actions on the root node, the child nodes are loaded locally instead
of from the remote server.
When the <code>loadChildOnDemand</code> is enabled, parent records are rendered in an expanded
state.
`ts
import { DataManager, WebApiAdaptor } from '@syncfusion/ej2-data';
import { Selection, VirtualScroll } from '@syncfusion/ej2-react-gantt';
import * as React from 'react';
function App() {
const dataSource: DataManager = new DataManager({
url: 'https://services.syncfusion.com/react/production/api/GanttLoadOnDemand',
adaptor: new WebApiAdaptor,
crossDomain: true
});
const taskFields: any = {
id: 'taskId',
name: 'taskName',
startDate: 'startDate',
endDate: 'endDate',
duration: 'duration',
progress: 'progress',
hasChildMapping: 'isParent',
parentID: 'parentID',
expandState:'IsExpanded'
};
const projectStartDate: Date = new Date('01/02/2000');
const projectEndDate: Date = new Date('12/01/2002');
return <GanttComponent id='LoadOnDemand' dataSource={dataSource} treeColumnIndex={1}
taskFields={taskFields} enableVirtualization={true} loadChildOnDemand={false} height='460px'
projectStartDate={projectStartDate} projectEndDate={projectEndDate}>
<ColumnsDirective>
<ColumnDirective field='taskId' width='80' ></ColumnDirective>
<ColumnDirective field='taskName' headerText='Job Name' width='250'
clipMode='EllipsisWithTooltip'></ColumnDirective>
<ColumnDirective field='startDate'></ColumnDirective>
<ColumnDirective field='duration'></ColumnDirective>
<ColumnDirective field='progress'></ColumnDirective>
</ColumnsDirective>
<Inject services={[Selection, VirtualScroll]} />
</GanttComponent>
};
export default App;
`
The following code example describes handling of Load on demand at server end.
`ts
public object Get()
{
DataOperations operation = new DataOperations();
var queryString = Request.Query;
if (tree.Count == 0)
tree = TreeData.GetTree();
if (queryString.Keys.Contains("$filter") && !queryString.Keys.Contains("$top"))
{
StringValues filter;
queryString.TryGetValue("$filter", out filter);
int? fltr;
{
parentID = ord.parentID
}
).ToList();
return data;
}
data = data.Where(p => p.parentID == null).ToList();
int count = data.Count;
if (queryString.Keys.Contains("$inlinecount"))
{
StringValues Skip;
StringValues Take;
StringValues loadchild;
int skip = (queryString.TryGetValue("$skip", out Skip)) ? Convert.ToInt32(Skip[0]) : 0;
int top = (queryString.TryGetValue("$top", out Take)) ? Convert.ToInt32(Take[0]) : data.Count();
var GroupData = TreeData.GetTree().ToList().GroupBy(rec => rec.parentID)
.Where(g => g.Key != null).ToDictionary(g => g.Key?.ToString(), g => g.ToList());
foreach (var Record in data.ToList())
{
if (GroupData.ContainsKey(Record.taskId.ToString()))
{
var ChildGroup = GroupData[Record.taskId.ToString()];
if (ChildGroup?.Count > 0)
AppendChildren(ChildGroup, Record, GroupData, data);
}
}
if (expand.Count > 0 && expand[0].ToString().Split(",")[0] == "CollapsingAction")
{
string IdMapping = "taskId";
List<WhereFilter> CollapseFilter = new List<WhereFilter>();
CollapseFilter.Add(new WhereFilter() { Field = IdMapping, value = expand[0].ToString().Split(",")[1],
Operator = "equal" });
var CollapsedParentRecord = operation.PerformFiltering(data, CollapseFilter, "and");
{
var DeepChildRecords = GroupData[Child.taskId.ToString()];
if (DeepChildRecords?.Count > 0)
AppendChildren(DeepChildRecords, Child, GroupData, data);
}
}
}
}
// GET: api/Orders/
[HttpGet("{id}", Name = "Get")]
public string Get(int id)
{
return "value";
}
[HttpPost]
public object Post([FromBody] TreeData[] value)
{
//handle insert action
for (var i = 0; i < value.Length; i++)
{
tree.Insert(0, value[i]);
}
return value;
}
//// PUT: api/Orders
[HttpPut]
public object Put([FromBody] TreeData[] value)
{
//handle edit action
if (value.Length == 1 && value[0].isParent == true)
{
UpdateDependentRecords(value[0]);
}
ChildRecords.Add(currentRecord);
if (currentRecord.isParent == true)
{
GetRootChildRecords(currentRecord);
}
}
}
public object GetTimeDifference(DateTime sdate, DateTime edate)
{
return new DateTime(edate.Year, edate.Month, edate.Day, edate.Hour, edate.Minute, edate.Second,
DateTimeKind.Utc).Subtract(new DateTime(sdate.Year, sdate.Month, sdate.Day, sdate.Hour,
sdate.Minute, sdate.Second, DateTimeKind.Utc)).TotalSeconds;
}
// DELETE: api/ApiWithActions
[HttpDelete("{id:int}")]
[Route("Orders/{id:int}")]
public object Delete(int id)
{
//handle delete action
tree.Remove(tree.Where(or => or.taskId == id).FirstOrDefault());
return Json(id);
}
public class CRUDModel<T> where T : class
{
public TreeData Value;
public int Key { get; set; }
public int RelationalKey { get; set; }
public List<TreeData> added { get; set; }
public List<TreeData> changed { get; set; }
public List<TreeData> deleted { get; set; }
}
public class TreeData
{
public static List<TreeData> tree = new List<TreeData>();
[System.ComponentModel.DataAnnotations.Key]
public int taskId { get; set; }
public string taskName { get; set; }
public DateTime startDate { get; set; }
public DateTime endDate { get; set; }
public string duration { get; set; }
public int progress { get; set; }
public int? parentID { get; set; }
public string predecessor { get; set; }
public bool? isParent { get; set; }
public bool? IsExpanded { get; set; }
public static List<TreeData> GetTree()
{
if (tree.Count == 0)
{
Random rand = new Random();
var x = 0;
int duration = 0;
DateTime startDate = new DateTime(2000, 1, 3, 08, 00, 00);
for (var i = 1; i <= 50; i++)
{
startDate = startDate.AddDays(i == 1 ? 0 : 7);
DateTime childStartDate = startDate;
TreeData Parent = new TreeData()
{
taskId = ++x,
taskName = "Task " + x,
startDate = startDate,
endDate = childStartDate.AddDays(26),
duration = "20",
progress = rand.Next(100),
predecessor = null,
isParent = true,
parentID = null,
IsExpanded = false
};
tree.Add(Parent);
for (var j = 1; j <= 4; j++)
{
childStartDate = childStartDate.AddDays(j == 1 ? 0 : duration + 2);
duration = 5;
tree.Add(new TreeData()
{
taskId = ++x,
taskName = "Task " + x,
startDate = childStartDate,
endDate = childStartDate.AddDays(5),
duration = duration.ToString(),
progress = rand.Next(100),
parentID = Parent.taskId,
predecessor = (j > 1 ? (x - 1) + "FS" : ""),
isParent = false,
IsExpanded = false
});
}
}
}
return tree;
}
}
`
Limitations
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { DataManager } from '@syncfusion/ej2-data';
function App(){
const taskFields: any = {
id: 'TaskId',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
dependency: 'Predecessor',
parentID: 'parentID',
};
const dataSource: DataManager = new DataManager({
url: 'http://some.com/invalidUrl'
});
let ganttInstance;
function actionFailure(args) {
let span: HTMLElement = document.createElement('span');
ganttInstance.element.parentNode.insertBefore(span,
ganttInstance.element);
span.style.color = '#FF0000'
span.innerHTML = 'Server exception: 404 Not found';
}
return <GanttComponent dataSource={dataSource} taskFields={taskFields}
actionFailure={actionFailure} height = '450px'
ref={gantt => ganttInstance = gantt}>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
</div>
};
ReactDOM.render(<App />, document.getElementById('root'));;
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { Ajax } from '@syncfusion/ej2-base';
function App (){
const taskFields: any = {
id: 'TaskId',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
dependency: 'Predecessor',
parentID: 'parentID',
};
let ganttInstance:any;
function clickHandler() {
let ajax = new
Ajax("https://ej2services.syncfusion.com/production/web-
services/api/GanttData","GET");
ganttInstance.showSpinner();
ajax.send();
ajax.onSuccess = function (data: string) {
ganttInstance.hideSpinner();
ganttInstance.dataSource = (JSON.parse(data)).Items;
ganttInstance.refresh();
};
}
return <div>
<ButtonComponent onClick={clickHandler}>Bind Data</ButtonComponent>
<GanttComponent taskFields={taskFields}
projectStartDate='02/24/2019' projectEndDate='07/20/2019' height = '450px'
ref={gantt => ganttInstance = gantt}>
</GanttComponent>
</div>
};
ReactDOM.render(<App />, document.getElementById('root'));;
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Note: If you bind the dataSource from this way, then it acts like a local dataSource. So you cannot
perform any server side crud actions.
Split task
The Split-task feature allows you to split a task or interrupt the work during planned or unforeseen
circumstances.
We can split the task either in load time or dynamically, by defining the segments either in hierarchical
or self-referential way.
Hierarchical
To split a task at load time in hierarchical way, we need to define the segment details in datasource and
this field should be mapped by using the taskFields.segments property.
`ts
[
{
TaskID: 1, TaskName: 'Identify Site location', StartDate: new Date('04/02/2019'), Duration: 4, Progress:
50,
Segments: [
{ StartDate: new Date("04/02/2019"), Duration: 2 },
{ StartDate: new Date("04/04/2019"), Duration: 2 }
]
}
]
`
INDEX.JSX
let GanttData = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate:
new Date('04/02/2019'), Duration: 4, Progress: 50,
Segments: [
{ StartDate: new Date("04/02/2019"), Duration: 2 },
{ StartDate: new Date("04/04/2019"), Duration: 2 }
] },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4 , Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
}
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
function App () {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
segments: 'Segments'
};
return <GanttComponent dataSource={GanttData} taskFields={taskFields}
height='450px'>
</GanttComponent>;
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let GanttData = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate:
new Date('04/02/2019'), Duration: 4, Progress: 50,
Segments: [
{ StartDate: new Date("04/02/2019"), Duration: 2 },
{ StartDate: new Date("04/04/2019"), Duration: 2 }
] },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4 , Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
}
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
function App () {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
segments: 'Segments'
};
return <GanttComponent dataSource={GanttData} taskFields={taskFields}
height='450px'>
</GanttComponent>;
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Self-referential
We can also define segment details as a flat data and this collection can be mapped by using
segmentData property. The segment id field of this collection is mapped by using the
taskFields.segmentId property.
`ts
taskFields: {
segmentId: "segmentId"
},
segmentData: [
child: 'subtasks',
segmentId: 'segmentId'
};
const segmentData = [
{ segmentId: 2, StartDate: new Date("04/02/2019"), Duration: 2 },
{ segmentId: 2, StartDate: new Date("04/04/2019"), Duration: 2 },
{ segmentId: 4, StartDate: new Date("04/02/2019"), Duration: 2 },
{ segmentId: 4, StartDate: new Date("04/04/2019"), Duration: 2 }
];
INDEX.TSX
let GanttData = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate:
new Date('04/02/2019'), Duration: 4, Progress: 50,
Segments: [
{ StartDate: new Date("04/02/2019"), Duration: 2 },
{ StartDate: new Date("04/04/2019"), Duration: 2 }
] },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4 , Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
}
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
segmentId: 'segmentId'
};
const segmentData = [
{ segmentId: 2, StartDate: new Date("04/02/2019"), Duration: 2 },
{ segmentId: 2, StartDate: new Date("04/04/2019"), Duration: 2 },
{ segmentId: 4, StartDate: new Date("04/02/2019"), Duration: 2 },
{ segmentId: 4, StartDate: new Date("04/04/2019"), Duration: 2 }
];
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Note: Segment id field contains id of a task which should be split at load time.
Improve performance by disabling validations
The autoCalculateDateScheduling property can help you reduce the time taken for the Gantt chart to
render on the initial load. When this API is enabled, parent-child validation, data validation, and
predecessor validation are restricted, allowing the Gantt chart to load more quickly. Since we are
disabling the validations, data source provided to gantt should have all data such as start date, end date,
duration, as proper data.
INDEX.JSX
let tempData = [
{
TaskID: 1, TaskName: 'Product concept',StartDate: new
Date('04/02/2019'), EndDate: new Date('04/21/2019'),
parentID: 0
},
{
TaskID: 2, TaskName: 'Defining the product and its usage',
StartDate: new Date('04/02/2019'),
Duration: 3, Progress: 30, parentID: 1
},
{
TaskID: 3, TaskName: 'Defining target audience', StartDate: new
Date('04/02/2019'),
parentID: 1, Duration: 3
},
{
TaskID: 4, TaskName: 'Prepare product sketch and notes', StartDate:
new Date('04/05/2019'),
Duration: 2, parentID: 1, Progress: 30
},
{
TaskID: 5, TaskName: 'Concept approval', StartDate: new
Date('04/08/2019'),
parentID: 0, Duration: 0
},
{
TaskID: 6, TaskName: 'Market research', StartDate: new
Date('04/02/2019'),
parentID: 0, EndDate: new Date('04/21/2019')
},
{
TaskID: 7, TaskName: 'Demand analysis', StartDate: new
Date('04/04/2019'),
EndDate: new Date('04/21/2019'), parentID: 6
},
{
TaskID: 8, TaskName: 'Customer strength', StartDate: new
Date('04/09/2019'),
Duration: 4, parentID: 7, Progress: 30
},
{
TaskID: 9, TaskName: 'Market opportunity analysis', StartDate: new
Date('04/09/2019'),
Duration: 4, parentID: 7
},
{
TaskID: 10, TaskName: 'Competitor analysis', StartDate: new
Date('04/15/2019'),
Duration: 4, parentID: 6, Progress: 30
},
{
TaskID: 11, TaskName: 'Product strength analsysis', StartDate: new
Date('04/15/2019'),
Duration: 4, parentID: 6
},
{
TaskID: 12, TaskName: 'Research complete', StartDate: new
Date('04/18/2019'),
Duration: 0, parentID: 6
},
{
TaskID: 13, TaskName: 'Product design and development', StartDate:
new Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019')
},
{
TaskID: 14, TaskName: 'Functionality design', StartDate: new
Date('04/19/2019'),
Duration: 3, parentID: 13, Progress: 30
},
{
TaskID: 15, TaskName: 'Quality design', StartDate: new
Date('04/19/2019'),
Duration: 3, parentID: 13
},
{
TaskID: 16, TaskName: 'Define reliability', StartDate: new
Date('04/24/2019'),
Duration: 2, Progress: 30, parentID: 13
},
{
TaskID: 17, TaskName: 'Identifying raw materials', StartDate: new
Date('04/24/2019'),
Duration: 2, parentID: 13
},
{
TaskID: 18, TaskName: 'Define cost plan', StartDate: new
Date('04/04/2019'),
parentID: 13, EndDate: new Date('04/21/2019')
},
{
TaskID: 19, TaskName: 'Manufacturing cost', StartDate: new
Date('04/26/2019'),
Duration: 2, Progress: 30, parentID: 18
},
{
Duration: 5, parentID: 0
},
{
TaskID: 32, TaskName: 'Feedback and testing', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 33, TaskName: 'Internal testing and feedback', StartDate:
new Date('06/06/2019'),
Duration: 3, parentID: 32, Progress: 45
},
{
TaskID: 34, TaskName: 'Customer testing and feedback', StartDate:
new Date('06/11/2019'),
Duration: 3, parentID: 32, Progress: 50
},
{
TaskID: 35, TaskName: 'Final product development', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 36, TaskName: 'Important improvements', StartDate: new
Date('06/14/2019'),
Duration: 4, Progress: 30, parentID: 35
},
{
TaskID: 37, TaskName: 'Address any unforeseen issues', StartDate:
new Date('06/14/2019'),
Duration: 4, Progress: 30, parentID: 35
},
{
TaskID: 38, TaskName: 'Final product', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 39, TaskName: 'Branding product', StartDate: new
Date('06/20/2019'),
Duration: 4, parentID: 38
},
{
TaskID: 40, TaskName: 'Marketing and presales', StartDate: new
Date('06/26/2019'), Duration: 4,
Progress: 30, parentID: 38
}
];
let virtualData = [];
let projId = 1;
for (let i = 0; i < 50; i++) {
let x = virtualData.length + 1;
let parent = {};
/* tslint:disable:no-string-literal */
parent['TaskID'] = x;
parent['TaskName'] = 'Project ' + (i + 1);
virtualData.push(parent);
INDEX.TSX
let tempData: any[] = [
{
TaskID: 1, TaskName: 'Product concept',StartDate: new
Date('04/02/2019'), EndDate: new Date('04/21/2019'),
parentID: 0
},
{
TaskID: 2, TaskName: 'Defining the product and its usage',
StartDate: new Date('04/02/2019'),
Duration: 3, Progress: 30, parentID: 1
},
{
TaskID: 3, TaskName: 'Defining target audience', StartDate: new
Date('04/02/2019'),
parentID: 1, Duration: 3
},
{
TaskID: 4, TaskName: 'Prepare product sketch and notes', StartDate:
new Date('04/05/2019'),
Duration: 2, parentID: 1, Progress: 30
},
{
TaskID: 5, TaskName: 'Concept approval', StartDate: new
Date('04/08/2019'),
parentID: 0, Duration: 0
},
{
TaskID: 6, TaskName: 'Market research', StartDate: new
Date('04/02/2019'),
parentID: 0, EndDate: new Date('04/21/2019')
},
{
TaskID: 7, TaskName: 'Demand analysis', StartDate: new
Date('04/04/2019'),
EndDate: new Date('04/21/2019'), parentID: 6
},
{
TaskID: 8, TaskName: 'Customer strength', StartDate: new
Date('04/09/2019'),
Duration: 4, parentID: 7, Progress: 30
},
{
TaskID: 9, TaskName: 'Market opportunity analysis', StartDate: new
Date('04/09/2019'),
Duration: 4, parentID: 7
},
{
{
TaskID: 33, TaskName: 'Internal testing and feedback', StartDate:
new Date('06/06/2019'),
Duration: 3, parentID: 32, Progress: 45
},
{
TaskID: 34, TaskName: 'Customer testing and feedback', StartDate:
new Date('06/11/2019'),
Duration: 3, parentID: 32, Progress: 50
},
{
TaskID: 35, TaskName: 'Final product development', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 36, TaskName: 'Important improvements', StartDate: new
Date('06/14/2019'),
Duration: 4, Progress: 30, parentID: 35
},
{
TaskID: 37, TaskName: 'Address any unforeseen issues', StartDate:
new Date('06/14/2019'),
Duration: 4, Progress: 30, parentID: 35
},
{
TaskID: 38, TaskName: 'Final product', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 39, TaskName: 'Branding product', StartDate: new
Date('06/20/2019'),
Duration: 4, parentID: 38
},
{
TaskID: 40, TaskName: 'Marketing and presales', StartDate: new
Date('06/26/2019'), Duration: 4,
Progress: 30, parentID: 38
}
];
let virtualData: any[] = [];
let projId: number = 1;
for (let i: number = 0; i < 50; i++) {
let x: number = virtualData.length + 1;
let parent: any = {};
/* tslint:disable:no-string-literal */
parent['TaskID'] = x;
parent['TaskName'] = 'Project ' + (i + 1);
virtualData.push(parent);
for (let j: number = 0; j < tempData.length; j++) {
let subtasks: any = {};
/* tslint:disable:no-string-literal */
subtasks['TaskID'] = tempData[j].TaskID + x;
subtasks['TaskName'] = tempData[j].TaskName;
subtasks['StartDate'] = tempData[j].StartDate;
subtasks['Duration'] = tempData[j].Duration;
subtasks['Progress'] = tempData[j].Progress;
subtasks['parentID'] = tempData[j].parentID + x;
virtualData.push(subtasks);
}
}
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent,ColumnsDirective,ColumnDirective,Inject,Edit,
Selection, Toolbar, VirtualScroll } from '@syncfusion/ej2-react-gantt';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'parentID'
};
const splitterSettings: any = {
columnIndex: 2
};
const labelSettings: any = {
taskLabel: 'Progress'
};
const editSettings: any = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true,
showDeleteConfirmDialog: true
};
const toolbar: any = ['Add', 'Edit', 'Update', 'Delete', 'Cancel',
'ExpandAll', 'CollapseAll', 'Indent', 'Outdent'];
return (
<GanttComponent dataSource={virtualData} treeColumnIndex={1}
labelSettings={labelSettings}
allowSelection={true} highlightWeekends={true}
enableVirtualization={true}
taskFields={taskFields} splitterSettings={splitterSettings}
autoCalculateDateScheduling={false} toolbar={toolbar}
editSettings={editSettings} height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'/>
<ColumnDirective field='TaskName' headerText='Task
Name'/>
<ColumnDirective field='StartDate'/>
<ColumnDirective field='Duration'/>
<ColumnDirective field='Progress'/>
</ColumnsDirective>
<Inject services={[Selection, VirtualScroll,Edit,Toolbar]} />
</GanttComponent>
)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Limitations
Gantt has the support for both Hierarchical and Self-Referential data binding. When rendering the Gantt
control with SQL database, we suggest you to use the Self-Referential data binding to maintain the
parent-child relation. Because the complex json structure is very difficult to manage it in SQL tables, we
need to write a complex queries and we have to write a complex algorithm to find out the proper record
details while updating/deleting the inner level task in Gantt data source. We cannot implement both
data binding for Gantt control and this is not a recommended way. If both child and parentID are
mapped, the records will not render properly because, when task id of a record defined in the hierarchy
structure is assigned to parent id of another record, in such case the records will not properly render. As
the self-referential will search the record with particular id in flat data only, not in the inner level of
records. If we map the parentID field, it will be prioritized and Gantt will be rendered based on the
parentID values.
Columns in React Gantt component
The column displays information from a bound data source, and you can edit the values of column to
update the task details through TreeGrid. The operations such as sorting, filtering, and searching can be
performed based on column definitions. To display a Gantt column, the field property should be
mapped from the data source to the column.
If the column field is not specified in the data source, the column values will be empty.
The treeColumnIndex property is used to define the expander column in the Gantt component to
expand and collapse the child rows.
Defining columns
Using the columns property, you can define the columns in Gantt. If the columns are not defined, then
the default columns will be rendered based on the mapped data source fields in the taskFields property.
Refer to the following code example for defining the columns in Gantt along with their widths.
INDEX.JSX
let data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
},
];
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
height = '450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='150'
></ColumnDirective>
<ColumnDirective field='TaskName'
width='250'></ColumnDirective>
</ColumnsDirective>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
},
];
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
height = '450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='150'
></ColumnDirective>
<ColumnDirective field='TaskName'
width='250'></ColumnDirective>
</ColumnsDirective>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Format
To format the cell values based on a specific culture, use the columns.format property. The Gantt
component uses the Internationalization library to format number and date values.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const splitterSettings = {
columnIndex : 4
};
return <GanttComponent dataSource={data} taskFields={taskFields}
splitterSettings={splitterSettings} height = '450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='100'
></ColumnDirective>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const splitterSettings = {
columnIndex : 4
};
return <GanttComponent dataSource={data} taskFields={taskFields}
splitterSettings={splitterSettings} height = '450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='100'
></ColumnDirective>
<ColumnDirective field='TaskName' headerText='Job Name'
width='250'></ColumnDirective>
<ColumnDirective field='StartDate'></ColumnDirective>
<ColumnDirective field='Progress'
format='P2'></ColumnDirective>
<ColumnDirective field='Duration'></ColumnDirective>
<ColumnDirective field='Predecessor'></ColumnDirective>
</ColumnsDirective>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
By default, the number and date values are formatted in en-US culture.
Number formatting
The number or integer values can be formatted using the following format strings.
Format |Description |Remarks
{ type:'date', format:'dd/MM/yyyy' } | 04/07/2019
{ type:'date', format:'dd.MM.yyyy' } | 04.07.2019
{ type:'date', skeleton:'short' } | 7/4/19
{ type: 'dateTime', format: 'dd/MM/yyyy hh:mm a' } | 04/07/2019 12:00 AM
{ type: 'dateTime', format: 'MM/dd/yyyy hh:mm:ss a' } | 07/04/2019 12:00:00 AM
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App () {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const splitterSettings = {
columnIndex: 4
};
const formatOption = { type: 'date', format: 'dd.MM.yyyy' };
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
class App extends React.Component<{}, {}>{
public taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
public splitterSettings: any = {
columnIndex : 4
};
public formatOption: Object = {type:'date', format:'dd.MM.yyyy'};
render() {
return <GanttComponent dataSource={data}
taskFields={this.taskFields}
splitterSettings={this.splitterSettings} height = '450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='100'
></ColumnDirective>
<ColumnDirective field='TaskName' headerText='Job Name'
width='250'></ColumnDirective>
<ColumnDirective field='StartDate'
format={this.formatOption}></ColumnDirective>
<ColumnDirective field='Duration'></ColumnDirective>
<ColumnDirective field='Progress'></ColumnDirective>
</ColumnsDirective>
</GanttComponent>
}
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const splitterSettings: any = {
position : '90%'
};
return <GanttComponent dataSource={data}
splitterSettings={splitterSettings} taskFields={taskFields}
treeColumnIndex={2}
height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
};
function show() {
/** show by HeaderText */
ganttInstance.showColumn(['Duration']);
}
function hide(){
/** hide by HeaderText */
ganttInstance.hideColumn(['Duration']);
}
return (<div>
<ButtonComponent onClick= { show }>Show</ButtonComponent>
<ButtonComponent onClick= { hide }>Hide</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
splitterSettings={splitterSettings} height = '450px'
ref={gantt => ganttInstance = gantt}>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='100' ></ColumnDirective>
<ColumnDirective field='TaskName' headerText='Task
Name'></ColumnDirective>
<ColumnDirective field='StartDate'></ColumnDirective>
<ColumnDirective field='Duration'
headerText='Duration'></ColumnDirective>
<ColumnDirective field='Progress'></ColumnDirective>
</ColumnsDirective>
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, ColumnsDirective, ColumnDirective } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
let ganttInstance: GanttComponent;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const splitterSettings: any = {
columnIndex : 5
};
function show() {
/** show by HeaderText */
ganttInstance.showColumn(['Duration']);
}
function hide(){
/** hide by HeaderText */
ganttInstance.hideColumn(['Duration']);
}
return (<div>
<ButtonComponent onClick= { show }>Show</ButtonComponent>
<ButtonComponent onClick= { hide }>Hide</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
splitterSettings={splitterSettings} height = '450px'
ref={gantt => ganttInstance = gantt}>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='100' ></ColumnDirective>
<ColumnDirective field='TaskName' headerText='Task
Name'></ColumnDirective>
<ColumnDirective field='StartDate'></ColumnDirective>
<ColumnDirective field='Duration'
headerText='Duration'></ColumnDirective>
<ColumnDirective field='Progress'></ColumnDirective>
</ColumnsDirective>
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Column type
Column type can be specified using the columns.type property. It specifies the type of data the column
binds.
If the format is defined for a column, the column uses type to select the appropriate format option
number or date.
Gantt column supports the following types:
• string
• number
• boolean
• date
• datetime
If the type is not defined, it will be determined from the first record of the dataSource.
In case if the first record of the dataSource is null/blank value for a column then it is necessary to define
the type for that column.
• Hour
• Day
• Week
• Month
• Year
Timescale mode in Gantt can be defined by using timelineViewMode property and also we can define
timescale mode of top tier and bottom tier by using topTier.unit and bottomTier.unit properties.
Week timeline mode
In the Week timeline mode, the upper part of the schedule header displays the weeks, whereas the
bottom half of the header displays the days. Refer to the following code example.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent} from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
const taskFields= {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const timelineSettings = {
timelineViewMode:'Week'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
timelineSettings={timelineSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent} from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const timelineSettings: any = {
timelineViewMode:'Week'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
timelineSettings={timelineSettings} height = '450px'>
</GanttComponent>
};
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const timelineSettings = {
timelineUnitSize: 80,
timelineViewMode:'Month'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
timelineSettings={timelineSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const timelineSettings: any = {
timelineUnitSize: 80,
timelineViewMode:'Month'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
timelineSettings={timelineSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const timelineSettings: any = {
timelineViewMode:'Day'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
timelineSettings={timelineSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019 08:05:00 AM'), Duration: 10, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019 08:05:00 AM'), Duration: 10, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019 08:05:00 AM'), Duration: 10, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/02/2019 08:15:00 AM'), Duration: 15, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/02/2019 08:15:00 AM'), Duration: 15, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/02/2019 08:15:00 AM'), Duration: 15, Progress: 50 }
]
},
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const timelineSettings: any = {
timelineViewMode:'Hour'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
dateFormat="M/d/yyyy hh:mm:ss tt" durationUnit="Minute"
timelineSettings={timelineSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
{
item: "Week",
id:"3"
},
{
item: "Month",
id:"4"
},
{
item: "Year",
id:"5"
}
];
const fields={text:"item", value:"id"};
function onChange(args) {
if(args.value==="1")
{
ganttInstance.timelineSettings.timelineViewMode="Hour";
}
else if(args.value==="2")
{
ganttInstance.timelineSettings.timelineViewMode="Day";
}
else if(args.value==="3")
{
ganttInstance.timelineSettings.timelineViewMode="Week";
}
else if(args.value==="4")
{
ganttInstance.timelineSettings.timelineViewMode="Month";
}
else if(args.value==="5")
{
ganttInstance.timelineSettings.timelineViewMode="Year";
}
}
return (
<div>
<DropDownListComponent id="modes" placeholder="Select"
dataSource={modes}
fields={fields} change={onChange} width="150px"/>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent} from '@syncfusion/ej2-react-gantt';
return (
<div>
<DropDownListComponent id="modes" placeholder="Select"
dataSource={modes}
fields={fields} change={onChange} width="150px"/>
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const timelineSettings: any = {
timelineViewMode:'Week',
weekStartDay: 3
};
return <GanttComponent dataSource={data} taskFields={taskFields}
timelineSettings={timelineSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
progress: 'Progress',
child: 'subtasks'
};
const editOptions = {
allowEditing: true,
allowTaskbarEditing: true
};
const timelineSettings = {
updateTimescaleView: false
};
return <GanttComponent dataSource={data} taskFields={taskFields}
timelineSettings={timelineSettings} allowSelection={true}
editSettings={editOptions} height = '450px'>
<Inject services={[Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, EditSettingsModel, Selection } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions: EditSettingsModel = {
allowEditing: true,
allowTaskbarEditing: true
};
const timelineSettings: any = {
updateTimescaleView: false
};
return <GanttComponent dataSource={data} taskFields={taskFields}
timelineSettings={timelineSettings} allowSelection={true}
editSettings={editOptions} height = '450px'>
<Inject services={[Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const timelineSettings: any = {
showTooltip: true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
timelineSettings={timelineSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const splitterSettings = {
position: "80%"
};
return <GanttComponent dataSource={data} taskFields={taskFields}
splitterSettings={splitterSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
To add a custom dropdown menu to the toolbar, use the DropDownList component which is available
in @syncfusion/ej2-react-dropdowns library.
After enabling the dropdown menu in the toolbar, pass the data to the dataSource property. To modify
the component's view, use the change property. To do this, call the setSplitterPosition method on the
ganttInstance with the value and type of splitter property as an parameter, after checking with the
user's choice and the given data condition is true.
The following code example shows, how to enable the dropdown menu in the Toolbar and change view
of the Gantt component.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject,Toolbar } from '@syncfusion/ej2-react-
gantt';
import { DropDownList } from '@syncfusion/ej2-react-dropdowns';
import { data } from './datasource';
function App() {
let ganttInstance;
const taskFields= {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function onChange(args) {
if(args.value==="1")
{
ganttInstance.setSplitterPosition("100%","position")
}
else if(args.value==="2")
{
ganttInstance.setSplitterPosition("0%", "position");
}
else if(args.value==="3")
{
ganttInstance.setSplitterPosition("50%", "position");
}
const items = [
{
item: 'Grid Only',
id:"1"
},
{
item: 'Chart Only',
id:"2"
},
{
item: 'Grid and Chart',
id:"3"
}];
const toolbarOptions = ['ExpandAll','CollapseAll',{type: "Input",
tooltipText:"Change View", template: new DropDownList({dataSource:items,
placeholder:"Select", change:onChange, fields:{text:'item', value:'id'}})}]
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject,Toolbar } from '@syncfusion/ej2-react-
gantt';
import { DropDownList } from '@syncfusion/ej2-react-dropdowns';
import { data } from './datasource';
function App() {
let ganttInstance:any;
const taskFields:any= {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function onChange(args:any) {
if(args.value==="1")
{
ganttInstance.setSplitterPosition("100%","position")
}
else if(args.value==="2")
{
ganttInstance.setSplitterPosition("0%", "position");
}
else if(args.value==="3")
{
ganttInstance.setSplitterPosition("50%", "position");
}
const items:any = [
{
item: 'Grid Only',
id:"1"
},
{
item: 'Chart Only',
id:"2"
},
{
item: 'Grid and Chart',
id:"3"
}];
const toolbarOptions:any = ['ExpandAll','CollapseAll',{type: "Input",
tooltipText:"Change View", template: new DropDownList({dataSource:items,
placeholder:"Select", change:onChange, fields:{text:'item', value:'id'}})}]
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function clickHandler(){
ganttInstance.setSplitterPosition('50%', 'position');
}
function changeindex(){
ganttInstance.setSplitterPosition(0, 'columnIndex');
}
return (<div>
<ButtonComponent onClick= {
clickHandler}>ChangeByPosition</ButtonComponent>
<ButtonComponent onClick= {
changeindex}>ChangeByIndex</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
height = '450px' ref={gantt => ganttInstance = gantt}>
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Selection, Toolbar, ColumnsDirective,
ColumnDirective } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'Children',
manual: 'isManual'
};
const toolbarOptions = ['Add', 'Edit', 'Delete', 'Cancel', 'Update',
'PrevTimeSpan', 'NextTimeSpan', 'ExpandAll', 'CollapseAll', 'Search'];
const editSettings = {
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
highlightWeekends={true} toolbar={toolbarOptions}
editSettings={editSettings} taskMode='Custom' height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'
visible={false}></ColumnDirective>
<ColumnDirective field='TaskName'></ColumnDirective>
<ColumnDirective field='isManual'></ColumnDirective>
</ColumnsDirective>
<Inject services={[Edit, Selection, Toolbar]}/>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Selection, Toolbar, ColumnsDirective,
ColumnDirective } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'Children',
manual: 'isManual'
};
const toolbarOptions = ['Add', 'Edit', 'Delete', 'Cancel', 'Update',
'PrevTimeSpan', 'NextTimeSpan', 'ExpandAll', 'CollapseAll', 'Search'];
const editSettings = {
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
highlightWeekends={true} toolbar={toolbarOptions}
editSettings={editSettings} taskMode='Custom' height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'
visible={false}></ColumnDirective>
<ColumnDirective field='TaskName'></ColumnDirective>
<ColumnDirective field='isManual'></ColumnDirective>
</ColumnsDirective>
<Inject services={[Edit, Selection, Toolbar]}/>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Custom
When the taskMode property is set as Custom, the scheduling mode for each tasks will be mapped
from the data source field. The Boolean property taskFields.manual is used to map the manual
scheduling mode field from the data source.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Selection, Toolbar, ColumnsDirective,
ColumnDirective } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'Children',
manual: 'isManual'
};
const toolbarOptions = ['Add', 'Edit', 'Delete', 'Cancel', 'Update',
'PrevTimeSpan', 'NextTimeSpan', 'ExpandAll', 'CollapseAll', 'Search'];
const editSettings = {
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
highlightWeekends={true} toolbar={toolbarOptions}
editSettings={editSettings} taskMode='Custom' height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'
visible={false}></ColumnDirective>
<ColumnDirective field='TaskName'></ColumnDirective>
<ColumnDirective field='isManual'></ColumnDirective>
</ColumnsDirective>
<Inject services={[Edit, Selection, Toolbar]}/>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Unscheduled Tasks
Unscheduled tasks are planned for a project without any definite schedule dates. The Gantt control
supports rendering the unscheduled tasks. You can create or update the tasks with anyone of start date,
end date, and duration values or none. You can enable or disable the unscheduled tasks by using the
allowUnscheduledTasks property. The following images represent the various types of unscheduled
tasks in Gantt.
Taskbar state |Auto |Manual
Duration Only | |
Milestone| |
Note: A milestone is a task that has no start and end dates, but it has a duration value of zero
Define unscheduled tasks in data source
You can define the various types of unscheduled tasks in the data source as follows
INDEX.JSX
let GanttData = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', Duration: 3,
Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Progress: 50 },
INDEX.TSX
let GanttData = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
NOTE
If the allowUnscheduledTasks property is set to false, then the Gantt control automatically calculates the
scheduled date values with a default value of duration 1 and the project start date is considered as the
start date for the task.
Working time range
In the Gantt control, working hours in a day for a project can be defined by using the dayWorkingTime
property. Based on the working hours, automatic date scheduling and duration validations for a task are
performed.
The following code snippet explains how to define the working time range for the project in Gantt.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'Children'
};
const timelineSettings = {
timelineViewMode: 'Day'
};
const dayWorkingTime = [{ from: 9, to: 18 }];
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'Children'
};
const timelineSettings = {
timelineViewMode: 'Day'
};
const dayWorkingTime = [{ from: 9, to: 18 }];
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
NOTE
* Individual tasks can lie between any time within the defined working time range of the project.
* The dayWorkingTime property is used to define the working time for the whole project.
Weekend/non-working days
Non-working days/weekend are used to represent the non-productive days in a project. You can define
the non-working days in a week using the workWeek property in Gantt.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, DayMarkers } from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'Children'
};
const workWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday',
'Thursday'];
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, DayMarkers } from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'Children'
};
const workWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday',
'Thursday'];
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
• Day
• Hour
• Minute
In Gantt, we can define duration unit for whole project by using durationUnit property, when we defines
the value for this property, this unit will be applied for all task which don't has duration unit value.
And each task in the project can be defined with different duration units and the duration unit of a task
can be defined by the following ways,
• Using taskFields.durationUnit property, to map the duration unit data source field.
• Defining the duration unit value along with the duration field in the data source.
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 8, DurationUnit:'hour',
Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50, DurationUnit:'day' },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 480, DurationUnit:'minute', Progress: 70 }
]
},
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
function App (){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
durationUnit:'DurationUnit',
child: 'subtasks'
};
const splitterSettings = {
columnIndex: 4
};
return <GanttComponent dataSource={data} taskFields={taskFields}
splitterSettings={splitterSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 2, DurationUnit:'day', Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 12,DurationUnit:'hour', Progress: 70 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 240,DurationUnit:'minute', Progress: 80 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 8, DurationUnit:'hour',
Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50, DurationUnit:'day' },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 480, DurationUnit:'minute', Progress: 70 }
]
},
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
durationUnit:'DurationUnit',
child: 'subtasks'
};
const splitterSettings: any = {
columnIndex: 4
};
return <GanttComponent dataSource={data} taskFields={taskFields}
splitterSettings={splitterSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
NOTE
The default value of the durationUnit property is day.
Defining duration unit along with duration field
Duration units for the tasks can also be defined along with the duration values, the below code snippet
explains the duration unit for a task along with duration value,
INDEX.JSX
let data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
isParent:true,
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: '4days', Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: '16hours', Progress: 70 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: '1800minutes', Progress: 80 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
isParent:true,
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: '16hours',Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: '3days', Progress: 50 },
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
isParent:true,
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: '4days', Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: '16hours', Progress: 70 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: '1800minutes', Progress: 80 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
isParent:true,
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: '16hours',Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: '3days', Progress: 50 },
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
NOTE:
The edit type of the duration column in Gantt is string, to support editing the duration field along with
duration units.
Taskbar in React Gantt component
Taskbar template
You can design your own taskbars to view the tasks in Gantt by using taskbarTemplate property. And it is
possible to map the template script element’s ID value to this property. It is also possible to customize
the parent taskbars and milestones with custom templates by using parentTaskbarTemplate and
milestoneTemplate properties.
INDEX.JSX
import * as React from "react";
import * as ReactDOM from "react-dom";
import { GanttComponent } from "@syncfusion/ej2-react-gantt";
import { data } from "./datasource";
function App() {
const taskFields = {
id: "TaskID",
name: "TaskName",
startDate: "StartDate",
duration: "Duration",
progress: "Progress",
child: "subtasks"
};
function TaskbarTemplate(props) {
return (
<div
className="e-gantt-child-taskbar-inner-div e-gantt-child-taskbar"
style={{ height: "100%" }}
>
<div
className="e-gantt-child-progressbar-inner-div e-gantt-child-
progressbar"
style={{
width: props.ganttProperties.progressWidth + "px",
height: "100%"
}}
>
</div>
<span
className="e-task-label"
style={{
position: "absolute",
fontSize: "12px",
color: "white",
top: "5px",
left: "10px",
fontFamily: "Segoe UI",
cursor: "move"
}}
>
{props.TaskName}
</span>
</div>
);
}
function ParentTaskbarTemplate(props) {
return (
<div
className="e-gantt-parent-taskbar-inner-div e-gantt-parent-taskbar"
style={{ height: "100%" }}
>
<div
className="e-gantt-parent-progressbar-inner-div e-row-expand e-
gantt-parent-progressbar"
style={{ width: props.ganttProperties.progressWidth+"px", height:
"100%" }}
>
</div>
<span
className="e-task-label"
style={{
position: "absolute",
fontSize: "12px",
color: "white",
top: "5px",
left: "10px",
fontFamily: "Segoe UI",
cursor: "move"
}}
>
{props.TaskName}
</span>
</div>
);
}
function MilestoneTemplate(props) {
return (
<div className="e-gantt-milestone" style={{ position: "absolute" }}>
<div
className="e-milestone-top"
style={{
borderRightWidth: "15px",
borderLeftWidth: "15px",
borderBottomWidth: "15px"
}}
/>
<div
className="e-milestone-bottom"
style={{
top: "15px",
borderRightWidth: "15px",
borderLeftWidth: "15px",
borderTopWidth: "15px"
}}
/>
</div>
);
}
return (
<GanttComponent
dataSource={data}
rowHeight={60}
taskFields={taskFields}
taskbarTemplate={TaskbarTemplate}
parentTaskbarTemplate={ParentTaskbarTemplate}
milestoneTemplate={MilestoneTemplate}
height="450px"
/>
);
}
ReactDOM.render(<App />, document.getElementById("root"));
INDEX.TSX
import * as React from "react";
import * as ReactDOM from "react-dom";
import { GanttComponent } from "@syncfusion/ej2-react-gantt";
import { data } from "./datasource";
function App() {
const taskFields: any = {
id: "TaskID",
name: "TaskName",
startDate: "StartDate",
duration: "Duration",
progress: "Progress",
child: "subtasks"
};
function TaskbarTemplate(props: any) {
return (
<div
className="e-gantt-child-taskbar-inner-div e-gantt-child-taskbar"
style={{ height: "100%" }}
>
<div
className="e-gantt-child-progressbar-inner-div e-gantt-child-
progressbar"
style={{
width: props.ganttProperties.progressWidth + "px",
height: "100%"
}}
>
</div>
<span
className="e-task-label"
style={{
position: "absolute",
fontSize: "12px",
color: "white",
top: "5px",
left: "10px",
fontFamily: "Segoe UI",
cursor: "move"
}}
>
{props.TaskName}
</span>
</div>
);
}
function ParentTaskbarTemplate(props: any) {
return (
<div
className="e-gantt-parent-taskbar-inner-div e-gantt-parent-taskbar"
style={{ height: "100%" }}
>
<div
className="e-gantt-parent-progressbar-inner-div e-row-expand e-
gantt-parent-progressbar"
style={{ width: props.ganttProperties.progressWidth+"px", height:
"100%" }}
>
</div>
<span
className="e-task-label"
style={{
position: "absolute",
fontSize: "12px",
color: "white",
top: "5px",
left: "10px",
fontFamily: "Segoe UI",
cursor: "move"
}}
>
{props.TaskName}
</span>
</div>
);
}
function MilestoneTemplate(props: any) {
return (
<div className="e-gantt-milestone" style={{ position: "absolute" }}>
<div
className="e-milestone-top"
style={{
borderRightWidth: "15px",
borderLeftWidth: "15px",
borderBottomWidth: "15px"
}}
/>
<div
className="e-milestone-bottom"
style={{
top: "15px",
borderRightWidth: "15px",
borderLeftWidth: "15px",
borderTopWidth: "15px"
}}
/>
</div>
);
}
return (
<GanttComponent
dataSource={data}
rowHeight={60}
taskFields={taskFields}
taskbarTemplate={TaskbarTemplate}
parentTaskbarTemplate={ParentTaskbarTemplate}
milestoneTemplate={MilestoneTemplate}
height="450px"
/>
);
}
ReactDOM.render(<App />, document.getElementById("root"));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Taskbar customization
Taskbar height
Height of child taskbars and parent taskbars can be customized by using taskbarHeight property. The
following code example shows how to use the property.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
rowHeight={50}
taskbarHeight={40} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
rowHeight={50}
taskbarHeight={40} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
NOTE
The taskbarHeight value should be lower than the rowHeight property value and these properties accept
only pixel values.
Conditional formatting
The default taskbar UI can be replaced with custom templates using the queryTaskbarInfo event. The
following code example shows customizing the taskbar UI based on task progress values in the Gantt
component.
INDEX.JSX
let data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 70 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 80 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 70 }
]
},
];
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function queryTaskbarInfo(args) {
if (args.data.Progress == 50) {
args.progressBarBgColor = "red";
} else if (args.data.Progress == 70) {
args.progressBarBgColor = "yellow";
} else if (args.data.Progress == 80) {
args.progressBarBgColor = "lightgreen";
}
}
return <GanttComponent dataSource={data} taskFields={taskFields}
queryTaskbarInfo={queryTaskbarInfo} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function queryTaskbarInfo(args: any) {
if (args.data.Progress == 50) {
args.progressBarBgColor = "red";
} else if (args.data.Progress == 70) {
args.progressBarBgColor = "yellow";
} else if (args.data.Progress == 80) {
args.progressBarBgColor = "lightgreen";
}
}
return <GanttComponent dataSource={data} taskFields={taskFields}
queryTaskbarInfo={queryTaskbarInfo} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
resourceFields={resourceFields} resources={projectResources}
height='400px'>
<Inject services={[Edit, Filter, Sort]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
const projectResources: object[] = [
{ resourceId: 1, resourceName: 'Project Manager' },
{ resourceId: 2, resourceName: 'Software Analyst' },
{ resourceId: 3, resourceName: 'Developer' },
{ resourceId: 4, resourceName: 'Testing Engineer' }
];
const data: object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, resources: [2, 3] },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, resources: [2] },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Predecessor: '3FS', Progress: 50,
resources: [1] },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50, resources: [1, 3, 5] },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Predecessor: '7SS', Progress: 50 }
]
},
];
import { GanttComponent, Inject, Edit, Filter, Sort } from '@syncfusion/ej2-
react-gantt';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
function App() {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
dependency: 'Predecessor',
resourceInfo: 'resources'
};
const labelSettings: any = {
rightLabel: 'resources'
};
const editSettings: any = {
allowEditing: true,
editMode: 'Auto',
allowTaskbarEditing: true
};
const resourceFields: any = {
id: 'resourceId',
name: 'resourceName',
};
return <GanttComponent dataSource={data} allowFiltering={true}
allowSorting={true} taskFields={taskFields} editSettings={editSettings}
labelSettings={labelSettings}
resourceFields={resourceFields} resources={projectResources}
height='400px'>
<Inject services={[Edit, Filter, Sort]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css" />
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Connector lines
The width and background color of connector lines in Gantt can be customized using the
connectorLineWidth and connectorLineBackground properties. The following code example shows how
to use these properties.
INDEX.JSX
let data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'),Predecessor:"3SS", Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'),Predecessor:"7FS", Duration: 3, Progress: 50 }
]
},
];
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'),Predecessor:"3SS", Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'),Predecessor:"7FS", Duration: 3, Progress: 50 }
]
},
];
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Enable tooltip
In the Gantt component, you can enable or disable the mouse hover tooltip for the following UI
elements using the tooltipSettings.showTooltip property:
• Taskbar
• Connector line
• Baseline
• Event marker
INDEX.JSX
export let datasource = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site
location',BaselineStartDate: new Date('04/02/2019'),BaselineEndDate: new
Date('04/02/2019'), StartDate: new Date('04/02/2019'), Duration: 0,
Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'),BaselineStartDate: new
Date('04/04/2019'),BaselineEndDate: new Date('04/09/2019'), Duration: 4,
Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'),BaselineStartDate: new
Date('04/08/2019'),BaselineEndDate: new Date('04/12/2019'), Duration:
4,Predecessor:"2FS", Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for
estimation',BaselineStartDate: new Date('04/04/2019'),BaselineEndDate: new
Date('04/08/2019'), StartDate: new Date('04/04/2019'), Duration: 3,
Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'),BaselineStartDate: new
Date('04/02/2019'),BaselineEndDate: new Date('04/04/2019'), Duration: 3,
Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/02/2019'),BaselineStartDate: new
Date('04/02/2019'),BaselineEndDate: new Date('04/08/2019'), Duration:
0,Predecessor:"6SS", Progress: 50 }
]
},
];
dependency: 'Predecessor',
baselineStartDate: 'BaselineStartDate',
baselineEndDate: 'BaselineEndDate',
child: 'subtasks'
};
const tooltipSettings = {
showTooltip: true
};
let eventMarkerDay1= new Date('04/10/2019');
return <GanttComponent dataSource={data} taskFields={taskFields}
tooltipSettings={tooltipSettings} renderBaseline={true}
baselineColor="Red" height = '450px'>
<EventMarkersDirective>
<EventMarkerDirective day={eventMarkerDay1} label='Project
kick-off' >
</EventMarkerDirective>
</EventMarkersDirective>
<Inject services={[DayMarkers]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
export let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location',BaselineStartDate:
new Date('04/02/2019'),BaselineEndDate: new Date('04/02/2019'), StartDate:
new Date('04/02/2019'), Duration: 0, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'),BaselineStartDate: new
Date('04/04/2019'),BaselineEndDate: new Date('04/09/2019'), Duration: 4,
Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'),BaselineStartDate: new
Date('04/08/2019'),BaselineEndDate: new Date('04/12/2019'), Duration:
4,Predecessor:"2FS", Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for
estimation',BaselineStartDate: new Date('04/04/2019'),BaselineEndDate: new
Date('04/08/2019'), StartDate: new Date('04/04/2019'), Duration: 3,
Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'),BaselineStartDate: new
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function tooltipTemplate(props:any) {
return (<div>TaskID : {props.TaskID}</div>)
};
const template: any = tooltipTemplate;
const tooltipSettings: any = {
taskbar:template
};
return <GanttComponent dataSource={data} taskFields={taskFields}
tooltipSettings={tooltipSettings} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
function tooltipTemplate(props) {
return (<div>Offset : {props.offsetString}</div>)
};
const template = tooltipTemplate;
const tooltipSettings = {
connectorLine: template
};
return <GanttComponent dataSource={data} taskFields={taskFields}
tooltipSettings={tooltipSettings} height = '450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='100'
></ColumnDirective>
<ColumnDirective field='Predecessor'></ColumnDirective>
</ColumnsDirective>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4,Predecessor:'3FS+2 days', Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Baseline tooltip
A baseline tooltip can be customized using the tooltipSettings.baseline property. The following code
example shows how to customize the baseline tooltip in Gantt.
INDEX.JSX
let data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location',
BaselineStartDate: new Date('04/02/2019'), BaselineEndDate: new
Date('04/06/2019'), StartDate: new Date('04/02/2019'), Duration: 0,
Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', BaselineStartDate:
new Date('04/04/2019'), BaselineEndDate: new Date('04/09/2019'), StartDate:
new Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', BaselineStartDate:
new Date('04/08/2019'), BaselineEndDate: new Date('04/12/2019'), StartDate:
new Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
function App(){
let ganttInstance;
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
baselineStartDate: 'BaselineStartDate',
baselineEndDate: 'BaselineEndDate',
child: 'subtasks'
};
function tooltipTemplate(props) {
return (<div>Baseline StartDate :
{ganttInstance.getFormatedDate(props.BaselineStartDate)}</div>)
};
const template = tooltipTemplate;
const tooltipSettings = {
baseline: template
};
return <GanttComponent dataSource={data} taskFields={taskFields}
tooltipSettings={tooltipSettings} renderBaseline={true}
baselineColor="red" height = '450px' ref={gantt => ganttInstance = gantt}>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
tooltipSettings={tooltipSettings} renderBaseline={true}
baselineColor="red" height = '450px' ref={gantt => ganttInstance = gantt}>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, EditSettingsModel, Toolbar,
ToolbarItem, CriticalPath } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions: EditSettingsModel = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true,
showDeleteConfirmDialog: true
};
const toolbarOptions: ToolbarItem[] = ['CriticalPath'];
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
.e-gantt .e-gantt-chart .e-custom-holiday {
background-color:lightgreen;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Toolbar, CriticalPath } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true,
showDeleteConfirmDialog: true
};
function queryTaskbarInfo(args) {
if ((args.data.isCritical || args.data.slack === '0 day') &&
!args.data.hasChildRecords) {
args.taskbarBgColor = 'rgb(242, 210, 189)';
args.progressBarBgColor = 'rgb(201, 169, 166)';
}
}
const toolbarOptions = ['CriticalPath'];
return <GanttComponent dataSource={data} taskFields={taskFields}
height = '450px' queryTaskbarInfo={queryTaskbarInfo}
enableCriticalPath={true}
editSettings={editOptions} toolbar={toolbarOptions}>
<Inject services={[Edit, CriticalPath, Toolbar]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, EditSettingsModel, Toolbar,
ToolbarItem, CriticalPath } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
.e-gantt .e-gantt-chart .e-custom-holiday {
background-color:lightgreen;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
| PreviousTimeSpan | Undo redo actions can be performed for previous time span acton.|
| NextTimeSpan | Undo redo actions can be performed for next time span action.|
In the following code example, Edit and Delete actions are specified in undoRedoActions property.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo }from '@syncfusion/ej2-
react-gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const toolbarOptions = ['Add', 'Edit', 'Update', 'Delete', 'Search',
'ZoomIn', 'ZoomOut', 'ZoomToFit','Indent','Outdent',
'PrevTimeSpan', 'NextTimeSpan','Undo','Redo'];
const undoRedoActions= ['Edit', 'Delete'];
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true} allowSorting={true} allowFiltering={true}
allowRowDragAndDrop={true}
editSettings={editOptions} showColumnMenu={true}
enableUndoRedo={true} allowResizing={true} allowReordering={true}
toolbar={toolbarOptions} undoRedoActions={undoRedoActions} height = '450px'>
<Inject services={[Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, EditSettingsModel,GanttAction, ToolbarItem,
Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo }from '@syncfusion/ej2-
react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions: EditSettingsModel = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const undoRedoActions: GanttAction[]= ['Edit', 'Delete'];
const toolbarOptions: ToolbarItem[] = ['Add', 'Edit', 'Update', 'Delete',
'Search', 'ZoomIn', 'ZoomOut', 'ZoomToFit','Indent','Outdent',
'PrevTimeSpan', 'NextTimeSpan','Undo','Redo'];
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true} allowSorting={true} allowFiltering={true}
allowRowDragAndDrop={true}
editSettings={editOptions} showColumnMenu={true}
enableUndoRedo={true} allowResizing={true} allowReordering={true}
toolbar={toolbarOptions} undoRedoActions={undoRedoActions} height = '450px'>
<Inject services={[Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Configuring the Storage Step Count for Undo and Redo Actions
You can specify the number of actions to be stored for undo and redo operations using the
undoRedoStepsCount property.
By default, the value of undoRedoStepsCount is set to 10.
When the number of actions performed exceeds the undoRedoStepsCount, the oldest action in the
undo collection is removed, and the latest action performed is added to the collection. This ensures that
the number of stored actions does not exceed the specified limit, maintaining efficient memory usage.
In the following example, undoRedoStepsCount value is set to 5.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo }from '@syncfusion/ej2-
react-gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const undoRedoStepsCount = 5;
const toolbarOptions = ['Add', 'Edit', 'Update', 'Delete', 'Search',
'ZoomIn', 'ZoomOut', 'ZoomToFit','Indent','Outdent',
'PrevTimeSpan', 'NextTimeSpan','Undo','Redo'];
const undoRedoActions= ['Add', 'Edit', 'Delete',
'Search','Sorting','Filtering', 'ZoomIn', 'ZoomOut',
'ZoomToFit','Indent','Outdent',
'PreviousTimeSpan', 'NextTimeSpan','ColumnState'];
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true} allowSorting={true} allowFiltering={true}
allowRowDragAndDrop={true} undoRedoStepsCount={undoRedoStepsCount}
editSettings={editOptions} showColumnMenu={true}
enableUndoRedo={true} allowResizing={true} allowReordering={true}
toolbar={toolbarOptions} undoRedoActions={undoRedoActions} height = '450px'>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, EditSettingsModel,GanttAction, ToolbarItem,
Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo }from '@syncfusion/ej2-
react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions: EditSettingsModel = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const undoRedoStepsCount: number = 5;
const undoRedoActions: GanttAction[]= ['Add', 'Edit', 'Delete',
'Search','Sorting','Filtering', 'ZoomIn', 'ZoomOut',
'ZoomToFit','Indent','Outdent',
'PreviousTimeSpan', 'NextTimeSpan','ColumnState'];
const toolbarOptions: ToolbarItem[] = ['Add', 'Edit', 'Update', 'Delete',
'Search', 'ZoomIn', 'ZoomOut', 'ZoomToFit','Indent','Outdent',
'PrevTimeSpan', 'NextTimeSpan','Undo','Redo'];
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true} allowSorting={true} allowFiltering={true}
allowRowDragAndDrop={true} undoRedoStepsCount={undoRedoStepsCount}
editSettings={editOptions} showColumnMenu={true}
enableUndoRedo={true} allowResizing={true} allowReordering={true}
toolbar={toolbarOptions} undoRedoActions={undoRedoActions} height = '450px'>
<Inject services={[Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
const editOptions = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const toolbarOptions = ['Add', 'Edit', 'Update', 'Delete', 'Search',
'ZoomIn', 'ZoomOut', 'ZoomToFit','Indent','Outdent',
'PrevTimeSpan', 'NextTimeSpan','Undo','Redo'];
const undoRedoActions= ['Add', 'Edit', 'Delete',
'Search','Sorting','Filtering', 'ZoomIn', 'ZoomOut',
'ZoomToFit','Indent','Outdent',
'PreviousTimeSpan', 'NextTimeSpan','ColumnState'];
function undo() {
gantt.undo();
}
function redo() {
gantt.redo();
}
return (<div>
<ButtonComponent onClick={undo}>Undo</ButtonComponent>
<ButtonComponent onClick={redo}>Redo</ButtonComponent>
<GanttComponent dataSource={data} ref={g => gantt = g}
taskFields={taskFields} allowSelection={true} allowSorting={true}
allowFiltering={true} allowRowDragAndDrop={true}
editSettings={editOptions} showColumnMenu={true}
enableUndoRedo={true} allowResizing={true} allowReordering={true}
toolbar={toolbarOptions} undoRedoActions={undoRedoActions} height = '450px'>
<Inject services={[Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, EditSettingsModel,GanttAction, ToolbarItem,
Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo }from '@syncfusion/ej2-
react-gantt';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { data } from './datasource';
function App(){
let gantt: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions: EditSettingsModel = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const undoRedoActions: GanttAction[]= ['Add', 'Edit', 'Delete',
'Search','Sorting','Filtering', 'ZoomIn', 'ZoomOut',
'ZoomToFit','Indent','Outdent',
'PreviousTimeSpan', 'NextTimeSpan','ColumnState'];
const toolbarOptions: ToolbarItem[] = ['Add', 'Edit', 'Update', 'Delete',
'Search', 'ZoomIn', 'ZoomOut', 'ZoomToFit','Indent','Outdent',
'PrevTimeSpan', 'NextTimeSpan','Undo','Redo'];
function undo() {
gantt.undo();
}
function redo() {
gantt.redo();
}
return (<div>
<ButtonComponent onClick={undo}>Undo</ButtonComponent>
<ButtonComponent onClick={redo}>Redo</ButtonComponent>
<GanttComponent dataSource={data} ref={g => gantt = g}
taskFields={taskFields} allowSelection={true} allowSorting={true}
allowFiltering={true} allowRowDragAndDrop={true}
editSettings={editOptions} showColumnMenu={true} enableUndoRedo={true}
allowResizing={true} allowReordering={true} toolbar={toolbarOptions}
undoRedoActions={undoRedoActions} height='450px'>
<Inject services={[Toolbar, Selection, Edit, Filter, Sort, RowDD,
ColumnMenu, Reorder, Resize, UndoRedo]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
}
return (<div>
<ButtonComponent
onClick={getundocollection}>GetUndoCollection</ButtonComponent>
<ButtonComponent
onClick={getredocollection}>GetRedoCollection</ButtonComponent>
<GanttComponent dataSource={data} ref={g => gantt = g}
taskFields={taskFields} allowSelection={true} allowSorting={true}
allowFiltering={true} allowRowDragAndDrop={true}
editSettings={editOptions} showColumnMenu={true}
enableUndoRedo={true} allowResizing={true} allowReordering={true}
toolbar={toolbarOptions} undoRedoActions={undoRedoActions} height = '450px'>
<Inject services={[Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, EditSettingsModel,GanttAction, ToolbarItem,
Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo }from '@syncfusion/ej2-
react-gantt';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { data } from './datasource';
function App(){
let gantt: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions: EditSettingsModel = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const undoRedoActions: GanttAction[]= ['Add', 'Edit', 'Delete',
'Search','Sorting','Filtering', 'ZoomIn', 'ZoomOut',
'ZoomToFit','Indent','Outdent',
'PreviousTimeSpan', 'NextTimeSpan','ColumnState'];
const toolbarOptions: ToolbarItem[] = ['Add', 'Edit', 'Update', 'Delete',
'Search', 'ZoomIn', 'ZoomOut', 'ZoomToFit','Indent','Outdent',
'PrevTimeSpan', 'NextTimeSpan','Undo','Redo'];
function getundocollection() {
console.log(gantt.getUndoActions());
}
function getredocollection() {
console.log(gantt.getRedoActions());
}
return (<div>
<ButtonComponent
onClick={getundocollection}>GetUndoCollection</ButtonComponent>
<ButtonComponent
onClick={getredocollection}>GetRedoCollection</ButtonComponent>
<GanttComponent dataSource={data} ref={g => gantt = g}
taskFields={taskFields} allowSelection={true} allowSorting={true}
allowFiltering={true} allowRowDragAndDrop={true}
editSettings={editOptions} showColumnMenu={true} enableUndoRedo={true}
allowResizing={true} allowReordering={true} toolbar={toolbarOptions}
undoRedoActions={undoRedoActions} height='450px'>
<Inject services={[Toolbar, Selection, Edit, Filter, Sort, RowDD,
ColumnMenu, Reorder, Resize, UndoRedo]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, EditSettingsModel,GanttAction, ToolbarItem,
Toolbar, Selection, Edit,
Filter,Sort,RowDD,ColumnMenu,Reorder,Resize,UndoRedo }from '@syncfusion/ej2-
react-gantt';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { data } from './datasource';
function App(){
let gantt: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions: EditSettingsModel = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const undoRedoActions: GanttAction[]= ['Add', 'Edit', 'Delete',
'Search','Sorting','Filtering', 'ZoomIn', 'ZoomOut',
'ZoomToFit','Indent','Outdent',
'PreviousTimeSpan', 'NextTimeSpan','ColumnState'];
const toolbarOptions: ToolbarItem[] = ['Add', 'Edit', 'Update', 'Delete',
'Search', 'ZoomIn', 'ZoomOut', 'ZoomToFit','Indent','Outdent',
'PrevTimeSpan', 'NextTimeSpan','Undo','Redo'];
function clearundocollection() {
gantt.clearUndoCollection();
}
function clearredocollection() {
gantt.clearRedoCollection();
}
return (<div>
<ButtonComponent
onClick={clearundocollection}>ClearUndoCollection</ButtonComponent>
<ButtonComponent
onClick={clearredocollection}>ClearRedoCollection</ButtonComponent>
<GanttComponent dataSource={data} ref={g => gantt = g}
taskFields={taskFields} allowSelection={true} allowSorting={true}
allowFiltering={true} allowRowDragAndDrop={true}
editSettings={editOptions} showColumnMenu={true} enableUndoRedo={true}
allowResizing={true} allowReordering={true} toolbar={toolbarOptions}
undoRedoActions={undoRedoActions} height='450px'>
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Filter, EditSettingsModel, Selection,
Toolbar, ToolbarItem }from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions: EditSettingsModel = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const toolbarOptions: ToolbarItem[] =
['Add','Edit','Delete','Cancel','Update','PrevTimeSpan','NextTimeSpan','Expa
ndAll','CollapseAll','Search','Indent','Outdent'];
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true}
editSettings={editOptions} toolbar={toolbarOptions} height =
'450px'>
<Inject services={[Edit, Selection, Toolbar, Filter]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
* The toolbar has options to define both built-in and custom toolbar items.
Custom toolbar items
Custom toolbar items can be added to the toolbar by defining the toolbar property as a collection of
ItemModels.
Actions for this customized toolbar items are defined in the Link to the Video event.
You can check this video to learn about how to use custom toolbar in Gantt.
By default, the custom toolbar items are at left position. You can change the position by using the align
property. In the following sample, the Quick Filter toolbar item is positioned at right.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Filter, Toolbar } from '@syncfusion/ej2-
react-gantt';
import { data } from './datasource';
function App(){
let ganttInstance;
const taskFields= {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const toolbarOptions = [{text: 'Quick Filter', tooltipText: 'Quick
Filter', id: 'toolbarfilter', align:'Right', prefixIcon: 'e-quickfilter' }];
function toolbarClick(){
ganttInstance.filterByColumn('TaskName', 'startswith',
'Identify');
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} toolbar={toolbarOptions}
toolbarClick={toolbarClick.bind(this)} height = '450px' ref={gantt =>
ganttInstance = gantt}>
<Inject services={[Filter, Toolbar]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Filter, Toolbar } from '@syncfusion/ej2-
react-gantt';
import { data } from './datasource';
function App(){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const toolbarOptions: any[] = [{text: 'Quick Filter', tooltipText: 'Quick
Filter', id: 'toolbarfilter', align:'Right', prefixIcon: 'e-quickfilter' }];
function toolbarClick(): void {
ganttInstance.filterByColumn('TaskName', 'startswith',
'Identify');
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} toolbar={toolbarOptions}
toolbarClick={toolbarClick.bind(this)} height = '450px' ref={gantt =>
ganttInstance = gantt}>
<Inject services={[Filter, Toolbar]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
.e-quickfilter::before {
content: '\e7ee';
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
* The toolbar has options to define both built-in and custom toolbar items.
* If a toolbar item does not match the built-in items, it will be treated as a custom toolbar item.
Built-in and custom items in toolbar
The Gantt component has an option to use both built-in and custom toolbar items at the same time.
In the following example, the ExpandAll and CollapseAll are built-in toolbar items and Test is the
custom toolbar item.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ClickEventArgs } from '@syncfusion/ej2-navigations';
import { GanttComponent, Inject, Toolbar } from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
dependency: 'Predecessor',
};
const toolbarOptions = ['ExpandAll', 'CollapseAll', { text: 'Test',
tooltipText: 'Test',id: 'Test' }];
function toolbarClick(args) {
if (args.item.text === 'Test') {
alert("Custom toolbar Click...");
}
};
return <GanttComponent dataSource={data} taskFields={taskFields}
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ClickEventArgs } from '@syncfusion/ej2-navigations';
import { GanttComponent, Inject, Toolbar } from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
dependency: 'Predecessor',
};
const toolbarOptions: any[] = ['ExpandAll', 'CollapseAll', { text: 'Test',
tooltipText: 'Test',id: 'Test' }];
function toolbarClick(args: ClickEventArgs): void {
if (args.item.text === 'Test') {
alert("Custom toolbar Click...");
}
};
return <GanttComponent dataSource={data} taskFields={taskFields}
toolbar={toolbarOptions} toolbarClick={toolbarClick} height =
'450px'>
<Inject services={[Toolbar]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ClickEventArgs } from '@syncfusion/ej2-navigations';
import { GanttComponent, Inject, Toolbar, Filter, ColumnsDirective,
ColumnDirective} from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const toolbarOptions: any[] = ['QuickFilter', 'ClearFilter'];
function enable() {
ganttInstance.toolbarModule.enableItems([ganttInstance.element.id +
'_QuickFilter', ganttInstance.element.id + '_ClearFilter'], true);// enable
toolbar items.
};
function disable() {
ganttInstance.toolbarModule.enableItems([ganttInstance.element.id +
'_QuickFilter', ganttInstance.element.id + '_ClearFilter'], false);//
disable toolbar items.
};
function toolbarClick(args: ClickEventArgs): void {
if (args.item.text === 'QuickFilter') {
ganttInstance.filterByColumn('TaskName', 'startswith',
'Identify');
}
if (args.item.text === 'ClearFilter') {
ganttInstance.clearFiltering();
}
};
return (<div>
<ButtonComponent onClick= {enable}>Enable</ButtonComponent>
<ButtonComponent onClick= { disable}>Disable</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
toolbar={toolbarOptions}
toolbarClick={toolbarClick} allowFiltering={true} height = '450px'
ref={gantt => ganttInstance = gantt}>
<Inject services={[Toolbar, Filter]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { NumericTextBox} from '@syncfusion/ej2-inputs';
import { GanttComponent, Inject, Toolbar } from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const toolbarOptions: any[] = [ { type: 'Input',template:new
NumericTextBox({ format: 'c2', value:1 })} ];
return <GanttComponent dataSource={data} taskFields={taskFields}
toolbar={toolbarOptions} height = '400px'>
<Inject services={[Toolbar]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions = {
allowEditing: true,
mode: 'Auto'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true}
editSettings={editOptions} height = '450px'>
<Inject services={[Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, EditSettingsModel, Selection } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions: EditSettingsModel = {
allowEditing: true,
mode: 'Auto'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true}
editSettings={editOptions} height = '450px'>
<Inject services={[Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
• numericedit - NumericTextBox component for integers, double, and decimal data types.
• defaultedit - TextBox component for string data type.
• dropdownedit - DropDownList component to show all unique values related to that field.
• booleanedit - CheckBox component for boolean data type.
• datepickeredit - DatePicker component for date data type.
• datetimepickeredit - DateTimePicker component for date time data type.
Also, you can customize the behavior of the editor component through the columns.edit.params.
The following table describes cell edit type component and their corresponding edit params of the
column.
Edit Type |Component |Example
Cell editing | To perform double tap on a specific cell, initiate the cell to be in edit state.
Dialog editing | To perform double tap on a specific row, initiate the edit dialog to be opened.
Taskbar editing | Taskbar editing action is initiated using the tap action on the taskbar. <br> Parent
taskbar : Once you tap on the parent taskbar, it will be changed to editing state. Perform only dragging
action on parent taskbar editing. <br> ![Alt text](images/editing-parent.PNG) <br> Child taskbar : Once
you tap the child taskbar, it will be changed to editing state. <br> ![Alt text](images/editing-state.PNG)
<br> Dragging taskbar : To drag a taskbar to the left or right in editing state. <br> <br> Resizing taskbar :
To resize a taskbar, drag the left/right resize icon. <br> <br> Progress resizing : To change the progress,
drag the progress resize icon to the left or right direction.
Task dependency editing
You can tap the left/right connector point to initiate task dependencies edit mode and again tap
another taskbar to establish the dependency line between two taskbars.
The following table explains the taskbar state in dependency edit mode.
![Taskbar states](images/taskbar-states.PNG)
Taskbar state |Description
Parent taskbar | You cannot create dependency relationship to parent tasks. <br> ![Parent
taskbar](images/parent-taskbar.PNG)
Taskbar without dependency | If you tap a valid child taskbar, it will create FS type dependency line
between tasks, otherwise exits from task dependency edit mode. <br> ![Valid taskbar](images/valid-
taskbar.PNG)
Taskbar with dependency | If you tap the second taskbar, which has already been directly connected,
it will ask to remove it. <br> ![Invalid taskbar](images/invalid-taskbar.PNG)
Removing dependency | Once you tap the taskbar with direct dependency, then confirmation dialog
will be shown for removing dependency. <br> ![Confirm dialog](images/confirm-dialog.PNG)
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Selection } from '@syncfusion/ej2-
react-gantt';
const data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location',
StartDate: new Date('04/02/2019'), Duration: 3, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate:
new Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate:
new Date('04/02/2019'), Duration: 4,Predecessor:"2FS", Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Selection } from '@syncfusion/ej2-
react-gantt';
const data: object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location',
StartDate: new Date('04/02/2019'), Duration: 3, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate:
new Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate:
new Date('04/02/2019'), Duration: 4,Predecessor:"2FS", Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for
estimation', StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate:
new Date('04/04/2019'), Duration: 4,Predecessor:"6SS", Progress: 50 }
]
},
];
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
const editSettings: any = {
allowTaskbarEditing: true
};
let ganttInstance:any;
function load() {
this.isAdaptive = true; // Forcing desktop layout to change as
mobile layout
}
return <GanttComponent dataSource={data} ref={gantt => ganttInstance
= gantt} taskFields={taskFields}
editSettings={editSettings} height = '400px' load={load}>
<Inject services={[Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Note: In mobile device, you cannot create dependency other than FS by taskbar editing. By using
cell/dialog editing, you can add all type of dependencies.
Taskbar editing tooltip
The taskbar editing tooltip can be customized using the tooltipSettings.editing property. The following
code example shows how to customize the taskbar editing tooltip in Gantt.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields= {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions = {
allowTaskbarEditing: true
};
function tooltipTemplate(props) {
return (<div>Duration : {props.duration}</div>)
};
const template = tooltipTemplate;
const tooltipSettings = {
editing: template
};
return <GanttComponent dataSource={data} taskFields={taskFields}
tooltipSettings={tooltipSettings} editSettings={editOptions}
height = '450px'>
<Inject services={[Edit]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, EditSettingsModel } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions: EditSettingsModel = {
allowTaskbarEditing: true
};
function tooltipTemplate(props:any) {
return (<div>Duration : {props.duration}</div>)
};
const template: any = tooltipTemplate;
const tooltipSettings: any = {
editing: template
};
return <GanttComponent dataSource={data} taskFields={taskFields}
tooltipSettings={tooltipSettings} editSettings={editOptions}
height = '450px'>
<Inject services={[Edit]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
• The vertical scrollbar appears when the total height of rows present in the gantt exceeds its
element height.
• The horizontal scrollbar appears when the sum of columns width exceeds the grid pane size.
• The height and width are used to set the gantt height and width, respectively.
APP.TSX
Setting the height to 100% requires the gantt parent element to have explicit height. Also, the
component will be responsive when the parent container is resized.
APP.JSX
APP.TSX
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
function clickHandler(){
ganttInstance.scrollToDate('05/10/2019');
};
return (<div>
<ButtonComponent onClick=
{clickHandler}>ScrollToDate</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
height = '450px' ref={gantt => ganttInstance = gantt}>
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
function clickHandler(){
ganttInstance.ganttChartModule.scrollObject.setScrollTop(300);
};
return (<div>
<ButtonComponent onClick=
{clickHandler}>SetScrollTop</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
height = '450px' ref={gantt => ganttInstance = gantt}>
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Row virtualization
Row virtualization allows you to load and render a large number of tasks in Gantt with effective
performance. In this mode, all tasks are fetched initially from the datasource and rendered in the DOM
within a compact viewport area.
The number of records displayed in the Gantt is determined by the height.
This mode can be enable by setting the enableVirtualization property to true.
INDEX.JSX
let tempData = [
{
TaskID: 1, TaskName: 'Product concept',StartDate: new
Date('04/02/2019'), EndDate: new Date('04/21/2019'),
parentID: 0
},
{
TaskID: 2, TaskName: 'Defining the product and its usage',
StartDate: new Date('04/02/2019'),
Duration: 3, Progress: 30, parentID: 1
},
{
TaskID: 3, TaskName: 'Defining target audience', StartDate: new
Date('04/02/2019'),
parentID: 1, Duration: 3
},
{
TaskID: 4, TaskName: 'Prepare product sketch and notes', StartDate:
new Date('04/05/2019'),
Duration: 2, parentID: 1, Progress: 30
},
{
TaskID: 5, TaskName: 'Concept approval', StartDate: new
Date('04/08/2019'),
parentID: 0, Duration: 0
},
{
TaskID: 6, TaskName: 'Market research', StartDate: new
Date('04/02/2019'),
parentID: 0, EndDate: new Date('04/21/2019')
},
{
TaskID: 7, TaskName: 'Demand analysis', StartDate: new
Date('04/04/2019'),
EndDate: new Date('04/21/2019'), parentID: 6
},
{
TaskID: 8, TaskName: 'Customer strength', StartDate: new
Date('04/09/2019'),
Duration: 4, parentID: 7, Progress: 30
},
{
TaskID: 9, TaskName: 'Market opportunity analysis', StartDate: new
Date('04/09/2019'),
Duration: 4, parentID: 7
},
{
TaskID: 10, TaskName: 'Competitor analysis', StartDate: new
Date('04/15/2019'),
Duration: 4, parentID: 6, Progress: 30
},
{
TaskID: 11, TaskName: 'Product strength analsysis', StartDate: new
Date('04/15/2019'),
Duration: 4, parentID: 6
},
{
TaskID: 12, TaskName: 'Research complete', StartDate: new
Date('04/18/2019'),
Duration: 0, parentID: 6
},
{
TaskID: 13, TaskName: 'Product design and development', StartDate:
new Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019')
},
{
TaskID: 14, TaskName: 'Functionality design', StartDate: new
Date('04/19/2019'),
Duration: 3, parentID: 13, Progress: 30
},
{
TaskID: 15, TaskName: 'Quality design', StartDate: new
Date('04/19/2019'),
Duration: 3, parentID: 13
},
{
TaskID: 16, TaskName: 'Define reliability', StartDate: new
Date('04/24/2019'),
Duration: 2, Progress: 30, parentID: 13
},
{
TaskID: 17, TaskName: 'Identifying raw materials', StartDate: new
Date('04/24/2019'),
Duration: 2, parentID: 13
},
{
TaskID: 18, TaskName: 'Define cost plan', StartDate: new
Date('04/04/2019'),
parentID: 13, EndDate: new Date('04/21/2019')
},
{
TaskID: 19, TaskName: 'Manufacturing cost', StartDate: new
Date('04/26/2019'),
Duration: 2, Progress: 30, parentID: 18
},
{
TaskID: 20, TaskName: 'Selling cost', StartDate: new
Date('04/26/2019'),
Duration: 2, parentID: 18
},
{
subtasks['StartDate'] = tempData[j].StartDate;
subtasks['Duration'] = tempData[j].Duration;
subtasks['Progress'] = tempData[j].Progress;
subtasks['parentID'] = tempData[j].parentID + x;
virtualData.push(subtasks);
}
}
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent,ColumnsDirective,ColumnDirective,Inject,Selection,
VirtualScroll } from '@syncfusion/ej2-react-gantt';
function App (){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'parentID'
};
const splitterSettings = {
columnIndex: 2
};
const labelSettings = {
taskLabel: 'Progress'
};
return (
<GanttComponent dataSource={virtualData} treeColumnIndex={1}
labelSettings={labelSettings}
allowSelection={true} highlightWeekends={true}
enableVirtualization={true}
taskFields={taskFields} splitterSettings={splitterSettings}
height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'/>
<ColumnDirective field='TaskName' headerText='Task
Name'/>
<ColumnDirective field='StartDate'/>
<ColumnDirective field='Duration'/>
<ColumnDirective field='Progress'/>
</ColumnsDirective>
<Inject services={[Selection, VirtualScroll]} />
</GanttComponent>
)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let tempData: any[] = [
{
TaskID: 1, TaskName: 'Product concept',StartDate: new
Date('04/02/2019'), EndDate: new Date('04/21/2019'),
parentID: 0
},
{
TaskID: 2, TaskName: 'Defining the product and its usage',
StartDate: new Date('04/02/2019'),
Duration: 3, Progress: 30, parentID: 1
},
{
TaskID: 3, TaskName: 'Defining target audience', StartDate: new
Date('04/02/2019'),
parentID: 1, Duration: 3
},
{
TaskID: 4, TaskName: 'Prepare product sketch and notes', StartDate:
new Date('04/05/2019'),
Duration: 2, parentID: 1, Progress: 30
},
{
TaskID: 5, TaskName: 'Concept approval', StartDate: new
Date('04/08/2019'),
parentID: 0, Duration: 0
},
{
TaskID: 6, TaskName: 'Market research', StartDate: new
Date('04/02/2019'),
parentID: 0, EndDate: new Date('04/21/2019')
},
{
TaskID: 7, TaskName: 'Demand analysis', StartDate: new
Date('04/04/2019'),
EndDate: new Date('04/21/2019'), parentID: 6
},
{
TaskID: 8, TaskName: 'Customer strength', StartDate: new
Date('04/09/2019'),
Duration: 4, parentID: 7, Progress: 30
},
{
TaskID: 9, TaskName: 'Market opportunity analysis', StartDate: new
Date('04/09/2019'),
Duration: 4, parentID: 7
},
{
TaskID: 10, TaskName: 'Competitor analysis', StartDate: new
Date('04/15/2019'),
Duration: 4, parentID: 6, Progress: 30
},
{
TaskID: 11, TaskName: 'Product strength analsysis', StartDate: new
Date('04/15/2019'),
Duration: 4, parentID: 6
},
{
TaskID: 12, TaskName: 'Research complete', StartDate: new
Date('04/18/2019'),
Duration: 0, parentID: 6
},
{
Duration: 3, parentID: 21
},
{
TaskID: 25, TaskName: 'CAD computer-aided design', StartDate: new
Date('05/09/2019'),
Duration: 3, parentID: 13, Progress: 30
},
{
TaskID: 26, TaskName: 'CAM computer-aided manufacturing', StartDate:
new Date('09/14/2019'),
Duration: 3, parentID: 13
},
{
TaskID: 27, TaskName: 'Design complete', StartDate: new
Date('05/16/2019'),
Duration: 0, parentID: 13
},
{
TaskID: 28, TaskName: 'Prototype testing', StartDate: new
Date('05/17/2019'),
Duration: 4, Progress: 30, parentID: 0
},
{
TaskID: 29, TaskName: 'Include feedback', StartDate: new
Date('05/17/2019'),
Duration: 4, parentID: 0
},
{
TaskID: 30, TaskName: 'Manufacturing', StartDate: new
Date('05/23/2019'),
Duration: 5, Progress: 30, parentID: 0
},
{
TaskID: 31, TaskName: 'Assembling materials to finsihed goods',
StartDate: new Date('05/30/2019'),
Duration: 5, parentID: 0
},
{
TaskID: 32, TaskName: 'Feedback and testing', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 33, TaskName: 'Internal testing and feedback', StartDate:
new Date('06/06/2019'),
Duration: 3, parentID: 32, Progress: 45
},
{
TaskID: 34, TaskName: 'Customer testing and feedback', StartDate:
new Date('06/11/2019'),
Duration: 3, parentID: 32, Progress: 50
},
{
TaskID: 35, TaskName: 'Final product development', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 36, TaskName: 'Important improvements', StartDate: new
Date('06/14/2019'),
Duration: 4, Progress: 30, parentID: 35
},
{
TaskID: 37, TaskName: 'Address any unforeseen issues', StartDate:
new Date('06/14/2019'),
Duration: 4, Progress: 30, parentID: 35
},
{
TaskID: 38, TaskName: 'Final product', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 39, TaskName: 'Branding product', StartDate: new
Date('06/20/2019'),
Duration: 4, parentID: 38
},
{
TaskID: 40, TaskName: 'Marketing and presales', StartDate: new
Date('06/26/2019'), Duration: 4,
Progress: 30, parentID: 38
}
];
let virtualData: any[] = [];
let projId: number = 1;
for (let i: number = 0; i < 50; i++) {
let x: number = virtualData.length + 1;
let parent: any = {};
/* tslint:disable:no-string-literal */
parent['TaskID'] = x;
parent['TaskName'] = 'Project ' + (i + 1);
virtualData.push(parent);
for (let j: number = 0; j < tempData.length; j++) {
let subtasks: any = {};
/* tslint:disable:no-string-literal */
subtasks['TaskID'] = tempData[j].TaskID + x;
subtasks['TaskName'] = tempData[j].TaskName;
subtasks['StartDate'] = tempData[j].StartDate;
subtasks['Duration'] = tempData[j].Duration;
subtasks['Progress'] = tempData[j].Progress;
subtasks['parentID'] = tempData[j].parentID + x;
virtualData.push(subtasks);
}
}
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent,ColumnsDirective,ColumnDirective,Inject,Selection,
VirtualScroll } from '@syncfusion/ej2-react-gantt';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'parentID'
};
const splitterSettings: any = {
columnIndex: 2
};
const labelSettings: any = {
taskLabel: 'Progress'
};
return (
<GanttComponent dataSource={virtualData} treeColumnIndex={1}
labelSettings={labelSettings}
allowSelection={true} highlightWeekends={true}
enableVirtualization={true}
taskFields={taskFields} splitterSettings={splitterSettings}
height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'/>
<ColumnDirective field='TaskName' headerText='Task
Name'/>
<ColumnDirective field='StartDate'/>
<ColumnDirective field='Duration'/>
<ColumnDirective field='Progress'/>
</ColumnsDirective>
<Inject services={[Selection, VirtualScroll]} />
</GanttComponent>
)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Timeline virtualization
Timeline virtualization allows you to load a data source having large timespan with high performance.
Initially, it renders the timeline with thrice the width of the gantt element, while other timeline cells
render on-demand during horizontal scrolling.
This mode can be enable by setting the enableTimelineVirtualization property to true.
INDEX.JSX
let tempData = [
{
TaskID: 1, TaskName: 'Product concept',StartDate: new
Date('04/02/2019'), EndDate: new Date('04/21/2019'),
parentID: 0
},
{
TaskID: 2, TaskName: 'Defining the product and its usage',
StartDate: new Date('04/02/2019'),
Duration: 3, Progress: 30, parentID: 1
},
{
TaskID: 3, TaskName: 'Defining target audience', StartDate: new
Date('04/02/2019'),
parentID: 1, Duration: 3
},
{
TaskID: 4, TaskName: 'Prepare product sketch and notes', StartDate:
new Date('04/05/2019'),
Duration: 2, parentID: 1, Progress: 30
},
{
TaskID: 5, TaskName: 'Concept approval', StartDate: new
Date('04/08/2019'),
parentID: 0, Duration: 0
},
{
TaskID: 6, TaskName: 'Market research', StartDate: new
Date('04/02/2019'),
parentID: 0, EndDate: new Date('04/21/2019')
},
{
TaskID: 7, TaskName: 'Demand analysis', StartDate: new
Date('04/04/2019'),
{
TaskID: 19, TaskName: 'Manufacturing cost', StartDate: new
Date('04/26/2019'),
Duration: 2, Progress: 30, parentID: 18
},
{
TaskID: 20, TaskName: 'Selling cost', StartDate: new
Date('04/26/2019'),
Duration: 2, parentID: 18
},
{
TaskID: 21, TaskName: 'Development of the final design', StartDate:
new Date('04/30/2019'),
parentID: 13, EndDate: new Date('04/21/2019')
},
{
TaskID: 22, TaskName: 'Defining dimensions and package volume',
StartDate: new Date('04/30/2019'),
Duration: 2, parentID: 21, Progress: 30
},
{
TaskID: 23, TaskName: 'Develop design to meet industry standards',
StartDate: new Date('05/02/2019'),
Duration: 2, parentID: 21
},
{
TaskID: 24, TaskName: 'Include all the details', StartDate: new
Date('05/06/2019'),
Duration: 3, parentID: 21
},
{
TaskID: 25, TaskName: 'CAD computer-aided design', StartDate: new
Date('05/09/2019'),
Duration: 3, parentID: 13, Progress: 30
},
{
TaskID: 26, TaskName: 'CAM computer-aided manufacturing', StartDate:
new Date('09/14/2019'),
Duration: 3, parentID: 13
},
{
TaskID: 27, TaskName: 'Design complete', StartDate: new
Date('05/16/2019'),
Duration: 0, parentID: 13
},
{
TaskID: 28, TaskName: 'Prototype testing', StartDate: new
Date('05/17/2019'),
Duration: 4, Progress: 30, parentID: 0
},
{
TaskID: 29, TaskName: 'Include feedback', StartDate: new
Date('05/17/2019'),
Duration: 4, parentID: 0
},
{
taskFields={taskFields} splitterSettings={splitterSettings}
autoCalculateDateScheduling={false} toolbar={toolbar}
editSettings={editSettings} height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'/>
<ColumnDirective field='TaskName' headerText='Task
Name'/>
<ColumnDirective field='StartDate'/>
<ColumnDirective field='Duration'/>
<ColumnDirective field='Progress'/>
</ColumnsDirective>
<Inject services={[Selection, VirtualScroll,Edit,Toolbar]} />
</GanttComponent>
)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let tempData: any[] = [
{
TaskID: 1, TaskName: 'Product concept',StartDate: new
Date('04/02/2019'), EndDate: new Date('04/21/2019'),
parentID: 0
},
{
TaskID: 2, TaskName: 'Defining the product and its usage',
StartDate: new Date('04/02/2019'),
Duration: 3, Progress: 30, parentID: 1
},
{
TaskID: 3, TaskName: 'Defining target audience', StartDate: new
Date('04/02/2019'),
parentID: 1, Duration: 3
},
{
TaskID: 4, TaskName: 'Prepare product sketch and notes', StartDate:
new Date('04/05/2019'),
Duration: 2, parentID: 1, Progress: 30
},
{
TaskID: 5, TaskName: 'Concept approval', StartDate: new
Date('04/08/2019'),
parentID: 0, Duration: 0
},
{
TaskID: 6, TaskName: 'Market research', StartDate: new
Date('04/02/2019'),
parentID: 0, EndDate: new Date('04/21/2019')
},
{
TaskID: 7, TaskName: 'Demand analysis', StartDate: new
Date('04/04/2019'),
EndDate: new Date('04/21/2019'), parentID: 6
},
{
{
TaskID: 31, TaskName: 'Assembling materials to finsihed goods',
StartDate: new Date('05/30/2019'),
Duration: 5, parentID: 0
},
{
TaskID: 32, TaskName: 'Feedback and testing', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 33, TaskName: 'Internal testing and feedback', StartDate:
new Date('06/06/2019'),
Duration: 3, parentID: 32, Progress: 45
},
{
TaskID: 34, TaskName: 'Customer testing and feedback', StartDate:
new Date('06/11/2019'),
Duration: 3, parentID: 32, Progress: 50
},
{
TaskID: 35, TaskName: 'Final product development', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 36, TaskName: 'Important improvements', StartDate: new
Date('06/14/2019'),
Duration: 4, Progress: 30, parentID: 35
},
{
TaskID: 37, TaskName: 'Address any unforeseen issues', StartDate:
new Date('06/14/2019'),
Duration: 4, Progress: 30, parentID: 35
},
{
TaskID: 38, TaskName: 'Final product', StartDate: new
Date('04/04/2019'),
parentID: 0, EndDate: new Date('04/21/2019'),
},
{
TaskID: 39, TaskName: 'Branding product', StartDate: new
Date('06/20/2019'),
Duration: 4, parentID: 38
},
{
TaskID: 40, TaskName: 'Marketing and presales', StartDate: new
Date('06/26/2019'), Duration: 4,
Progress: 30, parentID: 38
}
];
let virtualData: any[] = [];
let projId: number = 1;
for (let i: number = 0; i < 50; i++) {
let x: number = virtualData.length + 1;
let parent: any = {};
/* tslint:disable:no-string-literal */
parent['TaskID'] = x;
parent['TaskName'] = 'Project ' + (i + 1);
virtualData.push(parent);
for (let j: number = 0; j < tempData.length; j++) {
let subtasks: any = {};
/* tslint:disable:no-string-literal */
subtasks['TaskID'] = tempData[j].TaskID + x;
subtasks['TaskName'] = tempData[j].TaskName;
subtasks['StartDate'] = tempData[j].StartDate;
subtasks['Duration'] = tempData[j].Duration;
subtasks['Progress'] = tempData[j].Progress;
subtasks['parentID'] = tempData[j].parentID + x;
virtualData.push(subtasks);
}
}
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent,ColumnsDirective,ColumnDirective,Inject,Edit,
Selection, Toolbar, VirtualScroll } from '@syncfusion/ej2-react-gantt';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'parentID'
};
const splitterSettings: any = {
columnIndex: 2
};
const labelSettings: any = {
taskLabel: 'Progress'
};
const editSettings: any = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true,
showDeleteConfirmDialog: true
};
const toolbar: any = ['Add', 'Edit', 'Update', 'Delete', 'Cancel',
'ExpandAll', 'CollapseAll', 'Indent', 'Outdent'];
const projectStartDate: Date = new Date('04/01/2019');
const projectEndDate: Date = new Date('12/31/2025');
return (
<GanttComponent dataSource={virtualData} treeColumnIndex={1}
labelSettings={labelSettings} projectEndDate={projectEndDate}
allowSelection={true} highlightWeekends={true}
enableVirtualization={true} enableTimelineVirtualization={true}
projectStartDate={projectStartDate}
taskFields={taskFields} splitterSettings={splitterSettings}
autoCalculateDateScheduling={false} toolbar={toolbar}
editSettings={editSettings} height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'/>
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.JSX
import * as React from 'react';
import { useState } from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Filter, Sort, VirtualScroll, Selection,
ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-gantt';
import { virtualData } from './datasource';
function App(){
const [filteredCount, setFilteredCount] = useState(0);
const [datasetCount, setdatasetCount] = useState(0);
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'parentID'
};
const splitterSettings= {
columnIndex: 2
};
let ganttInstance;
function actionComplete(args) {
if (args.requestType === 'filtering') {
if (args.rows != null) {
setFilteredCount(ganttInstance.treeGrid.filterModule.filteredResult.length);
}
}
};
function created() {
setdatasetCount(ganttInstance.flatData.length);
}
return (
<div>
<GanttComponent dataSource={virtualData} taskFields={taskFields}
splitterSettings={splitterSettings} enableVirtualization={true}
allowSorting={true} allowFiltering={true} height='450px' ref={gantt =>
ganttInstance = gantt} created={created} actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='TaskID' width= '120'></ColumnDirective>
<ColumnDirective field='TaskName'></ColumnDirective>
<ColumnDirective field='StartDate'></ColumnDirective>
<ColumnDirective field='Duration'></ColumnDirective>
<ColumnDirective field='Progress'></ColumnDirective>
</ColumnsDirective>
<Inject services={[Filter, Selection, Sort, VirtualScroll]}/>
</GanttComponent>
<div>
<p>
<b>Dataset Count:</b> {datasetCount}
</p>
<p>
<b>Filtered Count:</b> {filteredCount}
</p>
</div>
</div>);
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import { useState } from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Filter, Sort, VirtualScroll, Selection,
ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-gantt';
import { virtualData } from './datasource';
function App(){
const [filteredCount, setFilteredCount] = useState(0);
const [datasetCount, setdatasetCount] = useState(0);
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
parentID: 'parentID'
};
const splitterSettings= {
columnIndex: 2
};
let ganttInstance: any;
function actionComplete(args: any) {
if (args.requestType === 'filtering') {
if (args.rows != null) {
setFilteredCount(ganttInstance.treeGrid.filterModule.filteredResult.length);
}
}
};
function created() {
setdatasetCount(ganttInstance.flatData.length);
}
return (
<div>
<GanttComponent dataSource={virtualData} taskFields={taskFields}
splitterSettings={splitterSettings} enableVirtualization={true}
allowSorting={true} allowFiltering={true} height='450px' ref={gantt =>
ganttInstance = gantt} created={created} actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='TaskID' width= '120'></ColumnDirective>
<ColumnDirective field='TaskName'></ColumnDirective>
<ColumnDirective field='StartDate'></ColumnDirective>
<ColumnDirective field='Duration'></ColumnDirective>
<ColumnDirective field='Progress'></ColumnDirective>
</ColumnsDirective>
<Inject services={[Filter, Selection, Sort, VirtualScroll]}/>
</GanttComponent>
<div>
<p>
<b>Dataset Count:</b> {datasetCount}
</p>
<p>
<b>Filtered Count:</b> {filteredCount}
</p>
</div>
</div>);
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
• Due to the element height limitation in browsers, the maximum number of records loaded is
limited by the browser capacity.
• Cell selection will not be persisted.
• The number of records rendered will be determined by the Link to the Video property.
• It is necessary to mention the height of the Gantt in pixels when enabling Virtual Scrolling.
}
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective } from
'@syncfusion/ej2-react-gantt';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
resourceInfo: 'resources',
child: 'subtasks'
};
const resourceFields = {
id: 'resourceId',
name: 'resourceName',
unit: 'Unit'
};
const labelSettings = {
rightLabel: 'resources'
};
return <GanttComponent id='root' dataSource={ data } taskFields = {
taskFields } resourceFields={resourceFields} labelSettings = {labelSettings
} resources = { ProjectResources } height = '450px' >
<ColumnsDirective>
<ColumnDirective field= 'TaskID' visible= 'false' >
</ColumnDirective>
< ColumnDirective field= 'TaskName' headerText= 'Task Name'
width= '180' > </ColumnDirective>
< ColumnDirective field= 'resources' headerText= 'Resources'
width= '160' > </ColumnDirective>
< ColumnDirective field= 'Duration' width= '100' >
</ColumnDirective>
</ColumnsDirective>
</GanttComponent>;
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
export let ProjectResources = [
{ resourceId: 1, resourceName: 'Martin Tamer' },
{ resourceId: 2, resourceName: 'Rose Fuller' },
{ resourceId: 3, resourceName: 'Margaret Buchanan' },
{ resourceId: 4, resourceName: 'Fuller King' },
{ resourceId: 5, resourceName: 'Davolio Fuller' },
{ resourceId: 6, resourceName: 'Van Jack' },
{ resourceId: 7, resourceName: 'Fuller Buchanan' },
{ resourceId: 8, resourceName: 'Jack Davolio' },
{ resourceId: 9, resourceName: 'Tamer Vinet' },
{ resourceId: 10, resourceName: 'Vinet Fuller' },
{ resourceId: 11, resourceName: 'Bergs Anton' },
{ resourceId: 12, resourceName: 'Construction Supervisor' }
];
let data = [
{
TaskID: 1,
TaskName: 'Project initiation',
StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 2, TaskName: 'Identify site location', StartDate:
new Date('03/29/2019'), Duration: 2,
Progress: 30, resources: [{ resourceId: 1, Unit: 70 }, 6]
},
{
TaskID: 3, TaskName: 'Perform soil test', StartDate: new
Date('03/29/2019'), Duration: 4,
resources: [2, 3, 5]
},
{
TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('03/29/2019'), Duration: 1,
resources: [8, { resourceId: 9, Unit: 50 }], Progress: 30
},
]
},
{
TaskID: 5,
TaskName: 'Project estimation', StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('03/29/2019'),
Duration: 3, Progress: 30, resources: [{ resourceId: 4,
Unit: 50 }]
},
{
TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/01/2019'), Duration: 3,
resources: [4, 8]
},
{
TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/01/2019'),
Duration: 2, resources: [12, { resourceId: 5, Unit: 70 }]
}
]
},
{
TaskID: 9, TaskName: 'Sign contract', StartDate: new
Date('04/01/2019'), Duration: 1,
Progress: 30, resources: [12]
}
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let resourceCollection: object[] = [
{ resourceId: 1, resourceName: 'Martin Tamer', resourceGroup: 'Planning
Team'},
{ resourceId: 2, resourceName: 'Rose Fuller', resourceGroup: 'Testing
Team' },
{ resourceId: 3, resourceName: 'Margaret Buchanan', resourceGroup:
'Approval Team' },
{ resourceId: 4, resourceName: 'Fuller King', resourceGroup:
'Development Team' },
{ resourceId: 5, resourceName: 'Davolio Fuller', resourceGroup:
'Approval Team' },
{ resourceId: 6, resourceName: 'Van Jack', resourceGroup: 'Development
Team' },
];
let data = [
{
TaskID: 1,
TaskName: 'Project initiation',
StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 2, TaskName: 'Identify site location', StartDate:
new Date('03/29/2019'), Duration: 2,
Progress: 30, work: 10, resources: [{ resourceId: 1,
resourceUnit: 50 }]
},
{
TaskID: 3, TaskName: 'Perform soil test', StartDate: new
Date('03/29/2019'), Duration: 4,
resources: [{resourceId: 2, resourceUnit: 70}], Progress:
30, work: 20
},
{
TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('03/29/2019'), Duration: 1,
resources: [{resourceId: 3, resourceUnit: 25}, { resourceId:
1, resourceUnit: 75 }], Progress: 30, work: 10,
},
]
},
{
TaskID: 5,
TaskName: 'Project estimation', StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('03/29/2019'),
Duration: 3, Progress: 30, resources: [{ resourceId: 4,
resourceUnit: 50 }, {resourceId: 2, resourceUnit: 70}], work: 30
},
{
TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/01/2019'), Duration: 3,
resources: [{resourceId: 6, resourceUnit: 40}], Progress:
30, work: 40
},
{
TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/01/2019'),
Duration: 2, resources: [{ resourceId: 5, resourceUnit: 75
}], Progress: 30, work: 60,
}
]
},
{
TaskID: 9, TaskName: 'Sign contract', StartDate: new
Date('04/01/2019'), Duration: 1,
Progress: 30,
}
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective, Inject, Edit,
Selection, Toolbar } from '@syncfusion/ej2-react-gantt';
function App (){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
resourceInfo: 'resources',
child: 'subtasks'
};
const resourceFields = {
id: 'resourceId',
name: 'resourceName',
unit: 'Unit',
group: 'resourceGroup'
};
const editSettings = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true,
showDeleteConfirmDialog: true
};
const toolbar = ['Add', 'Edit', 'Delete', 'Cancel', 'Update',
'PrevTimeSpan', 'NextTimeSpan', 'ExpandAll', 'CollapseAll', 'Search'];
const labelSettings = {
rightLabel: 'resources'
};
const splitterSettings = {
columnIndex: 3
};
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Resource overallocation
When a resource is assigned too much of work to complete within a day of resource’s available time
then it is called as overallocation.
The available working time of resources for completing the task in a day will be calculated based on the
dayWorkingTime property and resource unit.
The range of overallocation dates can be highlighted by a square bracket. It can be enabled by setting
the showOverallocation property as true. The following code example demonstrates how to hide or
show the over allocation by clicking the custom button.
Note: By default, the showOverAllocation property value is false.
INDEX.JSX
let resourceCollection = [
{ resourceId: 1, resourceName: 'Martin Tamer', resourceGroup: 'Planning
Team'},
{ resourceId: 2, resourceName: 'Rose Fuller', resourceGroup: 'Testing
Team' },
{ resourceId: 3, resourceName: 'Margaret Buchanan', resourceGroup:
'Approval Team' }
];
let data = [
{
TaskID: 1,
TaskName: 'Project initiation',
StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 2, TaskName: 'Identify site location', StartDate:
new Date('03/29/2019'), Duration: 3,
Progress: 30, work: 10, resources: [{ resourceId: 1,
resourceUnit: 50 }]
},
{
TaskID: 3, TaskName: 'Perform soil test', StartDate: new
Date('04/03/2019'), Duration: 4,
resources: [{ resourceId: 1, resourceUnit: 70 }],
Predecessor: 2, Progress: 30, work: 20
},
{
TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/09/2019'), Duration: 4,
INDEX.TSX
let resourceCollection: object[] = [
{ resourceId: 1, resourceName: 'Martin Tamer', resourceGroup: 'Planning
Team'},
{ resourceId: 2, resourceName: 'Rose Fuller', resourceGroup: 'Testing
Team' },
{ resourceId: 3, resourceName: 'Margaret Buchanan', resourceGroup:
'Approval Team' }
];
let data = [
{
TaskID: 1,
TaskName: 'Project initiation',
StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 2, TaskName: 'Identify site location', StartDate:
new Date('03/29/2019'), Duration: 3,
Progress: 30, work: 10, resources: [{ resourceId: 1,
resourceUnit: 50 }]
},
{
TaskID: 3, TaskName: 'Perform soil test', StartDate: new
Date('04/03/2019'), Duration: 4,
resources: [{ resourceId: 1, resourceUnit: 70 }],
Predecessor: 2, Progress: 30, work: 20
},
{
TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/09/2019'), Duration: 4,
resources: [{ resourceId: 1, resourceUnit: 25 }],
Predecessor: 3, Progress: 30, work: 10,
},
]
},
{
TaskID: 5,
TaskName: 'Project estimation', StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/01/2019'),
Duration: 5, Progress: 30, resources: [{ resourceId: 2,
resourceUnit: 50 }], work: 30
},
{
TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 4,
resources: [{ resourceId: 2, resourceUnit: 40 }],
Predecessor: '6FS-2', Progress: 30, work: 40
},
{
TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/09/2019'),
Duration: 4, resources: [{ resourceId: 2, resourceUnit: 75
}], Predecessor: '7FS-1', Progress: 30, work: 60,
}
]
},
{
TaskID: 9,
TaskName: 'Site work',
StartDate: new Date('04/04/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 10, TaskName: 'Install temporary power service',
StartDate: new Date('04/01/2019'), Duration: 14,
Progress: 30, resources: [{ resourceId: 3, resourceUnit: 75
}]
},
{
TaskID: 11, TaskName: 'Clear the building site', StartDate:
new Date('04/08/2019'),
Duration: 9, Progress: 30, Predecessor: '10FS-9', resources:
[3]
},
{
TaskID: 12, TaskName: 'Sign contract', StartDate: new
Date('04/12/2019'),
Duration: 5, resources: [3], Predecessor: '11FS-5'
},
]
}
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective, Inject, Edit,
Selection, Toolbar } from '@syncfusion/ej2-react-gantt';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
resourceInfo: 'resources',
child: 'subtasks'
};
const resourceFields = {
id: 'resourceId',
name: 'resourceName',
unit: 'Unit',
group: 'resourceGroup'
};
const editSettings = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true,
showDeleteConfirmDialog: true
};
const toolbarOptions = ['Add', 'Edit', 'Update', 'Delete',
'Cancel', 'ExpandAll', 'CollapseAll',
{ text: 'Show/Hide Overallocation', tooltipText: 'Show/Hide
Overallocation', id: 'showhidebar' }];
const labelSettings = {
rightLabel: 'resources',
taskLabel: 'Progress'
};
const projectStartDate = new Date('03/28/2019');
const projectEndDate = new Date('05/18/2019');
let ganttInstance:any;
function toolbarClick(args) {
if (args.item.id === 'showhidebar') {
ganttInstance.showOverAllocation =
ganttInstance.showOverAllocation ? false : true;
}}
return <GanttComponent id='root' dataSource = { data }
treeColumnIndex = { 1} viewType = 'ResourceView' allowSelection = { true}
allowResizing = { true} highlightWeekends = { true} toolbar =
{toolbarOptions } toolbarClick={toolbarClick}
editSettings = {editSettings } projectStartDate = { projectStartDate
} projectEndDate = { projectEndDate }
resourceFields = { resourceFields } taskFields = {taskFields }
labelSettings = {labelSettings }
resources = { resourceCollection } showOverAllocation = {true}
ref={gantt => ganttInstance = gantt} >
<ColumnsDirective>
<ColumnDirective field= 'TaskID' visible= {false} >
</ColumnDirective>
<ColumnDirective field= 'TaskName' headerText= 'Task Name'
width= '180' > </ColumnDirective>
<ColumnDirective field= 'work' headerText= 'Work' >
</ColumnDirective>
<ColumnDirective field= 'Progress' > </ColumnDirective>
<ColumnDirective field= 'resourceGroup' headerText= 'Group' >
</ColumnDirective>
<ColumnDirective field= 'StartDate' > </ColumnDirective>
<ColumnDirective field= 'Duration' > </ColumnDirective>
</ColumnsDirective>
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Unassigned task
A task not assigned to any one of the resource are termed as unassigned tasks. The unassigned tasks are
grouped with a name as Unassigned Task and displayed at the bottom of Gantt data collection . It is
validated at load time during Gantt record creation by default based on a task resourceInfo mapping
property in the Gantt chart data source. If the resource is assigned to the unassigned grouped tasks, the
task will be moved as child to the respective resource.
Enable taskbar drag and drop
In Gantt, you can enable taskbar drag and drop between resources by using the
allowTaskbarDragAndDrop property. This allows you to move a taskbar from one resource to another
vertically, making it easier to schedule tasks and manage resources.
INDEX.JSX
let resourceCollection = [
{ resourceId: 1, resourceName: 'Martin Tamer', resourceGroup: 'Planning
Team', isExpand: false},
{ resourceId: 2, resourceName: 'Rose Fuller', resourceGroup: 'Testing
Team', isExpand: true},
{ resourceId: 3, resourceName: 'Margaret Buchanan', resourceGroup:
'Approval Team', isExpand: false }
];
let data = [
{
TaskID: 1,
TaskName: 'Project initiation',
StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 2, TaskName: 'Identify site location', StartDate:
new Date('03/29/2019'), Duration: 3,
Progress: 30, work: 10, resources: [{ resourceId: 1,
resourceUnit: 50 }]
},
{
TaskID: 3, TaskName: 'Perform soil test', StartDate: new
Date('04/03/2019'), Duration: 4,
resources: [{ resourceId: 1, resourceUnit: 70 }],
Predecessor: 2, Progress: 30, work: 20
},
{
TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/09/2019'), Duration: 4,
resources: [{ resourceId: 1, resourceUnit: 25 }],
Predecessor: 3, Progress: 30, work: 10,
},
]
},
{
TaskID: 5,
TaskName: 'Project estimation', StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/01/2019'),
Duration: 5, Progress: 30, resources: [{ resourceId: 2,
resourceUnit: 50 }], work: 30
},
{
TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 4,
resources: [{ resourceId: 2, resourceUnit: 40 }],
Predecessor: '6FS-2', Progress: 30, work: 40
},
{
TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/09/2019'),
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
resourceInfo: 'resources',
expandState: 'isExpand',
child: 'subtasks'
};
const resourceFields = {
id: 'resourceId',
name: 'resourceName',
unit: 'Unit',
group: 'resourceGroup'
};
const editSettings = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true,
showDeleteConfirmDialog: true
};
const toolbarOptions = ['Add', 'Edit', 'Update', 'Delete', 'Cancel',
'ExpandAll', 'CollapseAll'];
const labelSettings = {
rightLabel: 'resources',
taskLabel: 'TaskName'
};
const projectStartDate = new Date('03/28/2019');
const projectEndDate = new Date('05/18/2019');
return <GanttComponent id='root' dataSource = { data }
treeColumnIndex = {1} viewType = 'ResourceView' allowSelection = { true}
allowResizing = { true} highlightWeekends = { true} toolbar = {
toolbarOptions } allowTaskbarDragAndDrop = {true}
editSettings = { editSettings } projectStartDate = {
projectStartDate } projectEndDate = { projectEndDate }
resourceFields = { resourceFields } taskFields = {taskFields }
labelSettings = { labelSettings }
resources = { resourceCollection } showOverAllocation = {true}
enableMultiTaskbar = {true}>
<ColumnsDirective>
<ColumnDirective field= 'TaskID' > </ColumnDirective>
<ColumnDirective field= 'TaskName' headerText= 'Task Name'
width= '180' > </ColumnDirective>
<ColumnDirective field= 'work' headerText= 'Work' >
</ColumnDirective>
<ColumnDirective field= 'Progress' > </ColumnDirective>
<ColumnDirective field= 'resourceGroup' headerText= 'Group' >
</ColumnDirective>
<ColumnDirective field= 'StartDate' > </ColumnDirective>
<ColumnDirective field= 'Duration' > </ColumnDirective>
</ColumnsDirective>
<Inject services={[ Toolbar, Edit, Selection ]}/>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let resourceCollection: object[] = [
{ resourceId: 1, resourceName: 'Martin Tamer', resourceGroup: 'Planning
Team', isExpand: false},
{ resourceId: 2, resourceName: 'Rose Fuller', resourceGroup: 'Testing
Team', isExpand: true},
{ resourceId: 3, resourceName: 'Margaret Buchanan', resourceGroup:
'Approval Team', isExpand: false }
];
let data = [
{
TaskID: 1,
TaskName: 'Project initiation',
StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 2, TaskName: 'Identify site location', StartDate:
new Date('03/29/2019'), Duration: 3,
Progress: 30, work: 10, resources: [{ resourceId: 1,
resourceUnit: 50 }]
},
{
TaskID: 3, TaskName: 'Perform soil test', StartDate: new
Date('04/03/2019'), Duration: 4,
resources: [{ resourceId: 1, resourceUnit: 70 }],
Predecessor: 2, Progress: 30, work: 20
},
{
TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/09/2019'), Duration: 4,
resources: [{ resourceId: 1, resourceUnit: 25 }],
Predecessor: 3, Progress: 30, work: 10,
},
]
},
{
TaskID: 5,
TaskName: 'Project estimation', StartDate: new Date('03/29/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/01/2019'),
Duration: 5, Progress: 30, resources: [{ resourceId: 2,
resourceUnit: 50 }], work: 30
},
{
TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 4,
resources: [{ resourceId: 2, resourceUnit: 40 }],
Predecessor: '6FS-2', Progress: 30, work: 40
},
{
TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/09/2019'),
Duration: 4, resources: [{ resourceId: 2, resourceUnit: 75
}], Predecessor: '7FS-1', Progress: 30, work: 60,
}
]
},
{
TaskID: 9,
TaskName: 'Site work',
StartDate: new Date('04/04/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{
TaskID: 10, TaskName: 'Install temporary power service',
StartDate: new Date('04/01/2019'), Duration: 14,
Progress: 30, resources: [{ resourceId: 3, resourceUnit: 75
}]
},
{
TaskID: 11, TaskName: 'Clear the building site', StartDate:
new Date('04/08/2019'),
Duration: 9, Progress: 30, Predecessor: '10FS-9', resources:
[3]
},
{
TaskID: 12, TaskName: 'Sign contract', StartDate: new
Date('04/12/2019'),
Duration: 5, resources: [3], Predecessor: '11FS-5'
},
]
}
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective, Inject, Edit,
Selection, Toolbar } from '@syncfusion/ej2-react-gantt';
function App () {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
resourceInfo: 'resources',
expandState: 'isExpand',
child: 'subtasks'
};
const resourceFields = {
id: 'resourceId',
name: 'resourceName',
unit: 'Unit',
group: 'resourceGroup'
};
const editSettings = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true,
showDeleteConfirmDialog: true
};
const toolbarOptions = ['Add', 'Edit', 'Update', 'Delete', 'Cancel',
'ExpandAll', 'CollapseAll'];
const labelSettings = {
rightLabel: 'resources',
taskLabel: 'TaskName'
};
const projectStartDate = new Date('03/28/2019');
const projectEndDate = new Date('05/18/2019');
return <GanttComponent id='root' dataSource = { data }
treeColumnIndex = {1} viewType = 'ResourceView' allowSelection = { true}
allowResizing = { true} highlightWeekends = { true} toolbar = {
toolbarOptions } allowTaskbarDragAndDrop = {true}
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
• Parent: This is the default filter hierarchy mode in Gantt. The filtered records are displayed with
their parent records. If the filtered records do not have any parent record, then only the filtered
records will be displayed.
• Child: Displays the filtered records with their child record. If the filtered records do not have any
child record, then only the filtered records will be displayed.
• Both: Displays the filtered records with their both parent and child records. If the filtered
records do not have any parent or child records, then only the filtered records will be displayed.
• None: Displays only the filtered records.
INDEX.JSX
let DropData = [
{ text: 'Parent', value: 'Parent' },
{ text: 'Child', value: 'Child' },
{ text: 'Both', value: 'Both' },
{ text: 'None', value: 'None' },
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { DropDownListComponent } from "@syncfusion/ej2-react-dropdowns";
import { GanttComponent, Inject, Filter } from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App(){
let ganttInstance;
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function onChange(sel) {
let mode= sel.value.toString();
ganttInstance.filterSettings.hierarchyMode = mode;
ganttInstance.clearFiltering();
}
return(<div>
<DropDownListComponent dataSource={DropData}
change={onChange} width= {150}
value="Parent"></DropDownListComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} height = '450px' ref={gantt =>
ganttInstance = gantt}>
<Inject services={[Filter]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let DropData: any[] = [
{ text: 'Parent', value: 'Parent' },
{ text: 'Child', value: 'Child' },
{ text: 'Both', value: 'Both' },
{ text: 'None', value: 'None' },
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { DropDownListComponent, ChangeEventArgs } from "@syncfusion/ej2-
react-dropdowns";
import { GanttComponent, Inject, Filter } from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App(){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function onChange(sel: ChangeEventArgs): void {
let mode:any = sel.value.toString();
ganttInstance.filterSettings.hierarchyMode = mode;
ganttInstance.clearFiltering();
}
return(<div>
<DropDownListComponent dataSource={DropData}
change={onChange} width= {150}
value="Parent"></DropDownListComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} height = '450px' ref={gantt => ganttInstance
= gantt}>
<Inject services={[Filter]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Initial filter
To apply the filter at initial rendering, set the filter to predicate object in the filterSettings.columns
property.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Filter} from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const FilterOptions = {
columns: [
{ field: 'TaskName', matchCase: false, operator: 'startswith',
predicate: 'and', value: 'Identify' },
{ field: 'TaskID', matchCase: false, operator: 'equal', predicate:
'and', value: 2 }]
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} filterSettings={FilterOptions} height =
'450px'>
<Inject services={[Filter]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Filter, FilterSettingsModel } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const FilterOptions: FilterSettingsModel = {
columns: [
{ field: 'TaskName', matchCase: false, operator: 'startswith',
predicate: 'and', value: 'Identify' },
{ field: 'TaskID', matchCase: false, operator: 'equal', predicate:
'and', value: 2 }]
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} filterSettings={FilterOptions} height =
'450px'>
<Inject services={[Filter]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
Filter operators
The filter operator for a column can be defined in the filterSettings.columns.operator property.
The available operators and their supported data types are:
Operator |Description |Supported Types
startswith |Checks whether the value begins with the specified value. |String
endswith |Checks whether the value ends with the specified value. |String
contains |Checks whether the value contains the specified value. |String
equal |Checks whether the value is equal to the specified value. |String | Number | Boolean
| Date
notequal |Checks for the values that are not equal to the specified value. |String | Number
| Boolean | Date
greaterthan |Checks whether the value is greater than the specified value. |Number | Date
greaterthanorequal|Checks whether the value is greater than or equal to the specified value. |Number
| Date
lessthan |Checks whether the value is less than the specified value. |Number | Date
lessthanorequal |Checks whether the value is less than or equal to the specified value. |Number |
Date
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const FilterOptions = {
ignoreAccent:true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} filterSettings={FilterOptions} height =
'450px'>
<Inject services={[Filter]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Filter } from '@syncfusion/ej2-react-
gantt';
class App extends React.Component {
taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
FilterOptions = {
ignoreAccent: true
};
render() {
return <GanttComponent dataSource={data}
taskFields={this.taskFields} allowFiltering={true}
filterSettings={this.FilterOptions} height='450px'>
<Inject services={[Filter]}/>
</GanttComponent>;
}
}
;
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Projéct initiàtion',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{TaskID: 2, TaskName: 'Identify site locàtion', StartDate: new
Date('04/02/2019'), Duration: 4,Progress: 50 },
{TaskID: 3, TaskName: 'Perförm soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{TaskID: 4, TaskName: 'Soil tëst appröval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project estimation',
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const FilterOptions: FilterSettingsModel = {
ignoreAccent:true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} filterSettings={FilterOptions} height =
'450px'>
<Inject services={[Filter]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, Filter } from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
let ganttInstance;
function clickHandler() {
ganttInstance.filterByColumn('TaskName', 'startswith', 'Perf');
}
return (<div>
<ButtonComponent onClick={clickHandler}>Filter Column</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
allowFiltering={true} height='450px' ref={gantt => ganttInstance = gantt}>
<Inject services={[Filter]}/>
</GanttComponent></div>);
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, Filter, FilterSettingsModel } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
let ganttInstance : any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const FilterOptions: FilterSettingsModel = {
columns: [
{ field: 'TaskName', matchCase: false, operator:
'startswith', predicate: 'and', value: 'perfor' },
{ field: 'TaskID', matchCase: false, operator: 'equal',
predicate: 'and', value: 3 }]
};
function clickHandler(){
ganttInstance .clearFiltering();
}
return(<div>
<ButtonComponent onClick= {clickHandler}>Clear
Filter</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
filterSettings={FilterOptions}
allowFiltering={true} height = '450px' ref={gantt => ganttInstance
= gantt}>
<Inject services={[Filter]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
In the following sample, the dropdown is used as a custom component in the TaskName column.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Filter } from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
import { ColumnsDirective, ColumnDirective } from '@syncfusion/ej2-react-
gantt';
import { createElement } from '@syncfusion/ej2-base';
import { DataManager } from '@syncfusion/ej2-data';
import { DropDownList } from '@syncfusion/ej2-dropdowns';
function App () {
taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
parentID: 'ParentId'
};
Filter = {
ui: {
create: (args) => {
const flValInput = createElement('input', { className:
'flm-input' });
args.target.appendChild(flValInput);
dropInstance = new DropDownList({
dataSource: new DataManager(data),
fields: { text: 'TaskName', value: 'TaskName' },
placeholder: 'Select a value',
popupHeight: '200px'
});
dropInstance.appendTo(flValInput);
},
read: (args) => {
args.fltrObj.filterByColumn(args.column.field,
args.operator, dropInstance.value);
},
write: (args) => {
dropInstance.value = args.filteredValue;
}
}
};
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Filter, IFilter } from '@syncfusion/ej2-
react-gantt';
import { data } from './datasource';
import { ColumnsDirective, ColumnDirective } from '@syncfusion/ej2-react-
gantt';
import { createElement } from '@syncfusion/ej2-base';
import { DataManager } from '@syncfusion/ej2-data';
import { DropDownList } from '@syncfusion/ej2-dropdowns';
function App (){
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSorting={true} height='450px'>
<Inject services={[Sort]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Sort } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSorting={true} height='450px'>
<Inject services={[Sort]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
* Gantt columns are sorted in the ascending order. If you click the already sorted column, the sort
direction toggles.
* To disable sorting for a particular column, set the columns.allowSorting property to false.
Sorting column on Gantt initialization
The Gantt component can be rendered with sorted columns initially, and this can be achieved by using
the sortSettings property. You can add columns that are sorted initially in the sortSettings.columns
collection defined with field and direction properties. The following code example shows how to add the
sorted column to Gantt initialization.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Sort} from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const sortingOptions = { columns: [{ field: 'TaskID', direction:
'Descending' }] };
return <GanttComponent dataSource={data} taskFields={taskFields}
sortSettings={sortingOptions} allowSorting={true} height='450px'>
<Inject services={[Sort]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, Sort } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
let gantt: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function clickHandler() {
gantt.sortModule.sortColumn('TaskID', "Descending", false);
}
return (<div>
<ButtonComponent onClick={clickHandler}>Sort
Column</ButtonComponent>
<GanttComponent dataSource={data} ref={g => gantt = g}
taskFields={taskFields}
allowSorting={true} height='450px'>
<Inject services={[Sort]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, Sort, SortSettingsModel } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks',
};
let ganttInstance: any;
const sortingOptions: SortSettingsModel = { columns: [{ field: 'TaskID',
direction: 'Descending' }] };
function clickHandler(){
ganttInstance.clearSorting();
}
return (<div>
<ButtonComponent onClick= { clickHandler}>Clear
Sorting</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
ref={gantt => ganttInstance = gantt} allowSorting={true}
sortSettings={sortingOptions} height='450px'>
<Inject services={[Sort]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Sorting events
During the sort action, the Gantt component triggers two events. The actionBegin event triggers before
the sort action starts, and the actionComplete event triggers after the sort action is completed.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Sort } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
function actionHandler (args) {
alert(args.requestType + ' ' + args.type);
}
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSorting={true}
actionBegin={actionHandler} actionComplete={actionHandler}
height='450px'>
<Inject services={[Sort]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Sort } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
function actionHandler (args: any) {
alert(args.requestType + ' ' + args.type);
}
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSorting={true}
actionBegin={actionHandler} actionComplete={actionHandler}
height='450px'>
<Inject services={[Sort]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
The args.requestType is the current action name. For example, for sorting the args.requestType,
value is sorting.
Custom Sorting
In Gantt, you can sort custom columns of different types like string, numeric, etc., By adding the custom
column in the column collection, you can perform initial sort using the sortSettings or you can also sort
the column dynamically by a button click.
The following code snippets explains how to achieve this.
INDEX.JSX
let GanttData = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, /*CustomColumn:
'BCustomColumn'*/ CustomColumn: '2' },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, /*CustomColumn:
'BCustomColumn'*/ CustomColumn: '3' },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, /*CustomColumn:
'BCustomColumn'*/ CustomColumn: '4' },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50,
/*CustomColumn: 'BCustomColumn'*/ CustomColumn: '6' },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50, /*CustomColumn:
'BCustomColumn'*/ CustomColumn: '1' },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50, /*CustomColumn:
'BCustomColumn'*/ CustomColumn: '5' }
]
},
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, Sort, ColumnsDirective, ColumnDirective }
from '@syncfusion/ej2-react-gantt';
function App(){
let ganttInstance;
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function clickHandler() {
ganttInstance.sortModule.sortColumn('CustomColumn', 'Ascending', false);
}
return (<div>
<ButtonComponent onClick={clickHandler}>Sort Custom
Column</ButtonComponent>
INDEX.TSX
let GanttData = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, /*CustomColumn:
'BCustomColumn'*/ CustomColumn: '2' },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, /*CustomColumn:
'BCustomColumn'*/ CustomColumn: '3' },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50, /*CustomColumn:
'BCustomColumn'*/ CustomColumn: '4' },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50,
/*CustomColumn: 'BCustomColumn'*/ CustomColumn: '6' },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50, /*CustomColumn:
'BCustomColumn'*/ CustomColumn: '1' },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50, /*CustomColumn:
'BCustomColumn'*/ CustomColumn: '5' }
]
},
];
import * as React from 'react';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Touch interaction
To perform tap action on a column header, trigger sorting operation to the selected column. A popup is
displayed for multi-column sorting. To sort multiple columns, tap the popup, and then tap the desired
column headers.
The following screenshot shows Gantt touch sorting,
• Single: Sets a single value by default and allows only selection of a single row or a cell.
• Link to the Video: Allows you to select multiple rows or cells. To perform the multi-selection,
press and hold the CTRL key and click the desired rows or cells.
To get start quickly with Selection and to know its type and behaviors, you can check on this video
Selection mode
The Gantt component supports three types of selection modes that can be set by using the
selectionSettings.mode. They are:
• Row: Allows you to select only rows, and the row value is set by default.
• Cell: Allows you to select only cells.
• Both: Allows you to select rows and cells at the same time.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Selection} from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const settings = {
mode: 'Both'
};
return <GanttComponent dataSource={data} allowSelection={true}
taskFields={taskFields} selectionSettings={settings} height = '450px'>
<Inject services={[Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Toggle selection
The toggle selection allows you to select and deselect a specific row or cell. To enable toggle selection,
set the enableToggle property of the selectionSettings to true. If you click the selected row or cell, then
it will be deselected and vice versa.
By default, the enableToggle property is set to false.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, Selection} from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
let ganttInstance;
const settings = {
mode: 'Row',
type: 'Multiple',
enableToggle: true
};
function clickHandler(){
ganttInstance.selectionSettings.enableToggle = false;
}
return (<div>
<ButtonComponent onClick= { clickHandler}>Disable
Toggle</ButtonComponent>
<GanttComponent dataSource={data} ref={gantt => ganttInstance =
gantt} allowSelection={true} taskFields={taskFields}
selectionSettings={settings} height = '450px'>
<Inject services={[Selection]} />
</GanttComponent> </div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, Selection, SelectionSettingsModel } from
'@syncfusion/ej2-react-gantt';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Clear selection
You can clear the selected cells and selected rows by using a method called clearSelection. The following
code example demonstrates how to clear the selected rows in Gantt Chart.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, Selection} from '@syncfusion/ej2-react-
gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
let ganttInstance;
const settings = {
mode: 'Row',
type: 'Multiple'
};
function clickHandler(){
ganttInstance.selectionModule.selectRows([1, 3, 5]); // passing the
record index as array collection
}
function clickHandler1(){
ganttInstance.clearSelection(); // Clear the selected rows
}
return (<div>
<ButtonComponent onClick= { clickHandler}>Select Multiple
Rows</ButtonComponent>
<ButtonComponent onClick= { clickHandler1}>Clear
Selection</ButtonComponent>
<GanttComponent dataSource={data} ref={gantt => ganttInstance =
gantt} allowSelection={true} taskFields={taskFields}
selectionSettings={settings} height = '450px'>
<Inject services={[Selection]} />
</GanttComponent></div>)
};
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, Selection, SelectionSettingsModel } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
let ganttInstance:any;
const settings: SelectionSettingsModel = {
mode: 'Row',
type: 'Multiple'
};
function clickHandler(){
ganttInstance.selectionModule.selectRows([1, 3, 5]); // passing the
record index as array collection
}
function clickHandler1(){
ganttInstance.clearSelection(); // Clear the selected rows
}
return (<div>
<ButtonComponent onClick= { clickHandler}>Select Multiple
Rows</ButtonComponent>
<ButtonComponent onClick= { clickHandler1}>Clear
Selection</ButtonComponent>
<GanttComponent dataSource={data} ref={gantt => ganttInstance =
gantt} allowSelection={true} taskFields={taskFields}
selectionSettings={settings} height = '450px'>
<Inject services={[Selection]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Selection, SelectionSettingsModel } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const settings: SelectionSettingsModel = {
mode: 'Row',
type: 'Multiple'
};
let ganttInstance :any;
function rowSelected(args:any) {
let selectedrowindex: number[] =
ganttInstance.selectionModule.getSelectedRowIndexes(); // get the selected
row indexes.
alert(selectedrowindex); // to alert the selected row indexes.
let selectedrecords: Object[] =
ganttInstance.selectionModule.getSelectedRecords(); // get the selected
records.
console.log(selectedrecords); // to print the selected records in
console window.
}
return <GanttComponent dataSource={data} allowSelection={true}
taskFields={taskFields}
selectionSettings={settings} rowSelected={rowSelected} height =
'450px' ref={gantt => ganttInstance = gantt}>
<Inject services={[Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const settings = {
mode: 'Row',
type: 'Multiple'
};
let ganttInstance ;
function dataBound(args) {
var rowIndexes =[];
ganttInstance.treeGrid.grid.dataSource.forEach((data,index)=>{
if (data.TaskID === 3 || data.TaskID === 4){
rowIndexes.push(index);
}
});
ganttInstance.selectRows(rowIndexes);
}
return <GanttComponent dataSource={data} allowSelection={true}
taskFields={taskFields}
selectionSettings={settings} dataBound={dataBound} height = '450px'
ref={gantt =>ganttInstance = gantt}>
<Inject services={[Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Selection, SelectionSettingsModel } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const settings: SelectionSettingsModel = {
mode: 'Row',
type: 'Multiple'
};
let ganttInstance :any;
function dataBound(args) {
var rowIndexes =[];
ganttInstance.treeGrid.grid.dataSource.forEach((data,index)=>{
if (data.TaskID === 3 || data.TaskID === 4){
rowIndexes.push(index);
}
});
ganttInstance.selectRows(rowIndexes);
}
return <GanttComponent dataSource={data} allowSelection={true}
taskFields={taskFields}
selectionSettings={settings} dataBound={dataBound} height = '450px'
ref={gantt =>ganttInstance = gantt}>
<Inject services={[Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Touch interaction
When you tap gantt row, tapped row will be selected.
Single selection : To select a single row or cell, perform single tap on it.
Multiple selection : To perform multiple selection, tap on the multiple selection popup, and then tap the
desired rows or cells.
See Also
• Touch interaction
};
return <GanttComponent dataSource={data} taskFields={taskFields}
rowHeight={60} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
rowHeight={60} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Expand/Collapse Row
In Gantt parent tasks are expanded/collapsed by using expand/collapse icons, expand all/collapse all
toolbar items and by using public methods. By default all tasks in Gantt was rendered in expanded state
but we can change this status in Gantt.
Collapse all tasks at Gantt load
All tasks available in Gantt was rendered in collapsed state by setting collapseAllParentTasks property as
true. The following code example shows how to use this property.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
collapseAllParentTasks={true} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
function expanding(args) {
if (args.data.TaskID==5){
args.cancel=true;
}
}
return <GanttComponent dataSource={data} taskFields={taskFields}
collapsing={collapsing} expanding={expanding} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective} from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function collapsing(args: any) {
if (args.data.TaskID==1){
args.cancel=true;
}}
function expanding(args: any) {
if (args.data.TaskID==5){
args.cancel=true;
}
}
return <GanttComponent dataSource={data} taskFields={taskFields}
collapsing={collapsing} expanding={expanding} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const splitterSettings = {
columnIndex: 5
};
function customizeCell(args) {
if (args.column.field == "Progress") {
if (args.data.Progress < 60)
args.cell.style.backgroundColor="lightgreen"
else
args.cell.style.backgroundColor="yellow"
}
};
function rowDataBound(args) {
if(args.data.TaskID==4)
args.row.style.backgroundColor="red"
}
return <GanttComponent dataSource={data} taskFields={taskFields}
splitterSettings={splitterSettings} queryCellInfo={customizeCell}
rowDataBound={rowDataBound}
height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 80 },
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const splitterSettings: any = {
columnIndex: 5
};
function customizeCell(args: any) {
if (args.column.field == "Progress") {
if (args.data.Progress < 60)
args.cell.style.backgroundColor="lightgreen"
else
args.cell.style.backgroundColor="yellow"
}
};
function rowDataBound(args: any) {
if(args.data.TaskID==4)
args.row.style.backgroundColor="red"
}
return <GanttComponent dataSource={data} taskFields={taskFields}
splitterSettings={splitterSettings} queryCellInfo={customizeCell}
rowDataBound={rowDataBound}
height = '450px'>
</GanttComponent>
};
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 70 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 80 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 70 }
]
},
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
height='450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
.e-altrow, tr.e-chart-row:nth-child(even) {
background-color: #f2f2f2;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Row spanning
Gantt chart has an option to span row cells. You can achieve this using rowSpan attribute to span cells in
the QueryCellInfo event.
In the following demo, Soil test approval cell is spanned to two rows in the TaskName column.
INDEX.JSX
let data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 70 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 80 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 70 }
]
},
];
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function queryCellInfo(args) {
if (args.data['TaskID'] == 4 && args.column.field === 'TaskName') {
args.rowSpan = 2;
}}
return <GanttComponent dataSource={data} taskFields={taskFields}
queryCellInfo={queryCellInfo} height='450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 70 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 80 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Clip mode
The clip mode provides options to display its overflow cell content and it can be defined by the
columns.clipMode property.
The following are three types of clipMode:
NOTE
By default, all the column's clipMode property is defined as EllipsisWithTooltip.
Cell tooltip
You can enable or disable the Grid cell tooltip using the columns.clipMode property.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
height = '450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='100'
></ColumnDirective>
<ColumnDirective field='TaskName' headerText='Job Name'
clipMode='EllipsisWithTooltip' width='120'></ColumnDirective>
<ColumnDirective field='StartDate'></ColumnDirective>
<ColumnDirective field='Duration'></ColumnDirective>
<ColumnDirective field='Progress'></ColumnDirective>
</ColumnsDirective>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} taskFields={taskFields}
height = '450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='100'
></ColumnDirective>
<ColumnDirective field='TaskName' headerText='Job Name'
clipMode='EllipsisWithTooltip' width='120'></ColumnDirective>
<ColumnDirective field='StartDate'></ColumnDirective>
<ColumnDirective field='Duration'></ColumnDirective>
<ColumnDirective field='Progress'></ColumnDirective>
</ColumnsDirective>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Export
Excel export in React Gantt component
Gantt supports client-side exporting, which allows you to export its data to the Excel and CSV formats.
Use the excelExport and csvExport methods for exporting. To enable Excel export in the Gantt, set the
allowExcelExport to true.
To export data to Excel and CSV, inject the Link to the Video module in Gantt.
To get start quickly with Excel exporting and to know its functionalities, you can check on this video
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ClickEventArgs } from '@syncfusion/ej2-navigations';
import { GanttComponent, Inject, Toolbar, ToolbarItem, ExcelExport,
Selection } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
let ganttInstance;
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const toolbarOptions = ['ExcelExport', 'CsvExport'];
function toolbarClick(args) {
if (args.item.id === 'GanttExport_excelexport') {
ganttInstance.excelExport();
} else if (args.item.id === 'GanttExport_csvexport') {
ganttInstance.csvExport();
}
};
return <GanttComponent id='GanttExport' dataSource={data}
taskFields={taskFields} toolbar={toolbarOptions}
toolbarClick={toolbarClick} allowExcelExport={true} height='400px'
ref={gantt => ganttInstance = gantt}>
<Inject services={[Toolbar, ExcelExport, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ClickEventArgs } from '@syncfusion/ej2-navigations';
import { GanttComponent, Inject, Toolbar, ToolbarItem, ExcelExport,
Selection } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const toolbarOptions: ToolbarItem[] = ['ExcelExport', 'CsvExport'];
function toolbarClick(args: ClickEventArgs): void {
if (args.item.id === 'GanttExport_excelexport') {
ganttInstance.excelExport();
} else if (args.item.id === 'GanttExport_csvexport') {
ganttInstance.csvExport();
}
};
return <GanttComponent id='GanttExport' dataSource={data}
taskFields={taskFields} toolbar={toolbarOptions}
toolbarClick={toolbarClick} allowExcelExport={true} height='400px'
ref={gantt => ganttInstance = gantt}>
<Inject services={[Toolbar, ExcelExport, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
Export
Pdf export in React Gantt component
PDF export allows exporting Gantt data to PDF document. You need to use the pdfExport method for
exporting. To enable PDF export in the Gantt, set the allowPdfExport to true.
To export data to PDF document, inject the Link to the Video module in Gantt.
To get start quickly with PDF exporting and to know its functionalities, you can check on this video
Note: Currently, we do not have support for exporting manually scheduled tasks.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ClickEventArgs } from '@syncfusion/ej2-
navigations/src/toolbar/toolbar';
import { GanttComponent, Inject, Toolbar, ToolbarItem, PdfExport, Selection
} from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
let ganttChart;
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const toolbarOptions = ['PdfExport'];
function toolbarClick(args) {
if (args.item.text === 'Pdf export') {
ganttChart.pdfExport();
}
};
return <GanttComponent id='root' dataSource={data}
taskFields={taskFields}
toolbar={toolbarOptions}
toolbarClick={toolbarClick} allowPdfExport={true} height='400px'
ref={gantt => ganttChart = gantt}>
<Inject services={[Toolbar, PdfExport, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ClickEventArgs } from '@syncfusion/ej2-
navigations/src/toolbar/toolbar';
import { GanttComponent, Inject, Toolbar, ToolbarItem, PdfExport, Selection
} from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
let ganttChart: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const toolbarOptions: ToolbarItem[] = ['PdfExport'];
function toolbarClick(args: ClickEventArgs): void {
if (args.item.text === 'Pdf export') {
ganttChart.pdfExport();
}
};
return <GanttComponent id='root' dataSource={data}
taskFields={taskFields}
toolbar={toolbarOptions}
toolbarClick={toolbarClick} allowPdfExport={true} height='400px'
ref={gantt => ganttChart = gantt}>
<Inject services={[Toolbar, PdfExport, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
.e-gantt .e-gantt-chart .e-custom-holiday {
background-color:lightgreen;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ClickEventArgs } from '@syncfusion/ej2-
navigations/src/toolbar/toolbar';
import { GanttComponent, Inject, Toolbar, ToolbarItem, PdfExport, Selection
} from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
let ganttChart: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
indicators: 'Indicators'
};
const toolbarOptions: ToolbarItem[] = ['PdfExport'];
function toolbarClick(args: ClickEventArgs): void {
if (args.item.text === 'Pdf export') {
ganttChart.pdfExport();
}
};
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
.e-gantt .e-gantt-chart .e-custom-holiday {
background-color:lightgreen;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
To export the Gantt chart data as a blob object, follow these steps:
step 1: pdfExport fourth argument set as true.
step 2: Then , pdfExpComplete return as blob object.
INDEX.JSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Toolbar, PdfExport, Selection,ExcelExport }
from '@syncfusion/ej2-react-gantt';
import { ClickEventArgs } from '@syncfusion/ej2-
navigations/src/toolbar/toolbar';
import { data } from './datasource';
function App () {
const excelExpComplete = (args) => {
//This event will be triggered when excel exporting.
if (args.promise) {
args.promise.then((e) => {
//In this `then` function, we can get blob data through the arguments
after promise resolved.
exportBlob(e.blobData);
});
}
};
const pdfExpComplete= (args) => {
//This event will be triggered when pdf exporting.
if (args.promise) {
args.promise.then((e) => {
//In this `then` function, we can get blob data through the arguments
after promise resolved.
exportBlob(e.blobData);
});
}
};
const exportBlob = (blob) => {
let a = document.createElement('a');
document.body.appendChild(a);
a.style.display = 'none';
let url = window.URL.createObjectURL(blob);
a.href = url;
a.download = 'Export';
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
}
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const toolbarOptions = ['PdfExport','ExcelExport'];
let ganttChart;
function toolbarClick(args) {
};
return <GanttComponent id='root' dataSource={data}
taskFields={taskFields} toolbar={toolbarOptions}
pdfExportComplete={pdfExpComplete} excelExportComplete={excelExpComplete}
toolbarClick={toolbarClick} allowPdfExport={true} allowExcelExport={true}
height='400px' ref={gantt =>ganttChart = gantt}>
<Inject services={[Toolbar, PdfExport, Selection,ExcelExport]}/>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Toolbar, PdfExport,
Selection,ExcelExport,ExcelExportCompleteArgs, PdfExportCompleteArgs } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App () {
let excelExpComplete = (args: ExcelExportCompleteArgs) => {
//This event will be triggered when excel exporting.
if (args.promise) {
args.promise.then((e: { blobData: Blob }) => {
//In this `then` function, we can get blob data through the arguments
after promise resolved.
exportBlob(e.blobData);
});
}
};
let pdfExpComplete= (args: PdfExportCompleteArgs) => {
//This event will be triggered when pdf exporting.
if (args.promise) {
args.promise.then((e: { blobData: Blob }) => {
//In this `then` function, we can get blob data through the arguments
after promise resolved.
exportBlob(e.blobData);
});
}
};
let exportBlob: Function = (blob: Blob) => {
let a: HTMLAnchorElement = document.createElement('a');
document.body.appendChild(a);
a.style.display = 'none';
let url: string = window.URL.createObjectURL(blob);
a.href = url;
a.download = 'Export';
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
}
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const toolbarOptions = ['PdfExport','ExcelExport'];
let ganttChart:any;
function toolbarClick(args:any) {
if (args.item.text === "Pdf export") {
ganttChart.pdfExport(null,null,null,true);
}
if (args.item.text === 'Excel export') {
ganttChart.excelExport(null,null,null,true);
}
};
return <GanttComponent id='root' dataSource={data}
taskFields={taskFields} pdfExportComplete={pdfExpComplete}
excelExportComplete={excelExpComplete} toolbar={toolbarOptions}
toolbarClick={toolbarClick} allowPdfExport={true} allowExcelExport={true}
height='400px' ref={gantt =>ganttChart = gantt}>
<Inject services={[Toolbar, PdfExport, Selection,ExcelExport]}/>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
toolbar={toolbarOptions}
toolbarClick={toolbarClick} allowPdfExport={true} height='400px'
ref={gantt => ganttChart = gantt}>
<Inject services={[Toolbar, PdfExport, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ClickEventArgs } from '@syncfusion/ej2-
navigations/src/toolbar/toolbar';
import { GanttComponent, Inject, Toolbar, ToolbarItem, PdfExport, Selection,
PdfExportProperties } from '@syncfusion/ej2-react-gantt';
import { GanttData } from './datasource';
function App(){
let ganttChart: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
endDate: 'EndDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks',
};
const toolbarOptions: ToolbarItem[] = ['PdfExport'];
function toolbarClick(args: ClickEventArgs): void {
if (args.item.text === 'Pdf export') {
let exportProperties : PdfExportProperties= {
fitToWidthSettings: {
isFitToWidth: true,
}
};
ganttChart.pdfExport(exportProperties);
}
};
return <GanttComponent id='root' dataSource={GanttData}
taskFields={taskFields}
toolbar={toolbarOptions}
toolbarClick={toolbarClick} allowPdfExport={true} height='400px'
ref={gantt => ganttChart = gantt}>
<Inject services={[Toolbar, PdfExport, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
let data = [
{
TaskID: 1,
TaskName: 'Product concept',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
EmailId: '[email protected]',
subtasks: [
{ TaskID: 2, TaskName: 'Defining the product and its usage',
StartDate: new Date('04/02/2019'),
Duration: 3, Progress: 30, resources: [2], EmailId:
'[email protected]', resourcesImage:
'/9j/4AAQSkZJRgABAQAAAQABAAD//gAfQ29tcHJlc3NlZCBieSBqcGVnLXJlY29tcHJlc3P/2wC
EAAQEBAQEBAQEBAQGBgUGBggHBwcHCAwJCQkJCQwTDA4MDA4MExEUEA8QFBEeFxUVFx4iHRsdIio
lJSo0MjRERFwBBAQEBAQEBAQEBAYGBQYGCAcHBwcIDAkJCQkJDBMMDgwMDgwTERQQDxAUER4XFRU
XHiIdGx0iKiUlKjQyNEREXP/CABEIADcANwMBIgACEQEDEQH/xAAbAAADAAMBAQAAAAAAAAAAAAA
FBwgEBgkCA//aAAgBAQAAAAC/hQFOvYjnCinKzbmZbGH5zuQtL+rjE/fO5y7I93/rpMhES5qCgxO
TPErmqDaDCzVpNoBsPfbf/8QAGgEAAQUBAAAAAAAAAAAAAAAAAAECAwQFBv/aAAgBAhAAAAAoWZj
mNLVM6a2Pan//xAAXAQEBAQEAAAAAAAAAAAAAAAAABAUG/9oACAEDEAAAAGjNO7PFxm1FEH//xAA
3EAACAgECBAMFBgQHAAAAAAABAgMEBQAGBxESQSExMhATUVKBCBQiYWKhFiNxkTNCU2RygrH/2gA
IAQEAAT8A0chavSvWwcaFUYrJdlBMSkeYjA9Z/bW5b209pY98xvncBFf57UrKrP8ACOGL1H8gCdR
cfOB8txaopTojeU5p8o9Uq+OuVUv7XzrLE4DIYpvvNduY+Vif2I1Vyk0NiPH5eBYLD+EUqEmCc/B
SfJv0n2ZB5MjajwlZ2RCnvbkinkViJ5CMH5n/APNdNajV5L0Q14IyflREUeJ1vDP53jTu65l72QM
OMWZ4MbW/yQwBuw+Yj1HW3OAEF1lntZ50iHNRGkHiSe/MtrbEF3ghuPEWkyktvbt2daeQRx4oH8E
fkPk1PTr5CrLVtRBom5fkQR3B7EdjrD2Z1exibrdVury/mf6sLeiT+vY6wRV69rJv671mSX4n3an
oRfoo1l6pv4rKUAwQ2ak8AY+QMiFef76x2VbacmNrvjnnmjAMiGRU5OW9IB8WOtucRXk2ra3FiMK
9panISQGTpCv+ZAJ1ZvZjiJgbr28VBVimjjmj6RYVo2V/DwljQN3BI1Gysqup5hgCNZ2VcbZx2Z7
Rl683LzaORSw/syjW3HUYHFfEVkB9m7sNitqby3LVzlFmkhlkmrFVKO6MSY+nXBvN0Zq+YoLQsix
LKr9DxosBHkSCxAIXvrFTRzyDCrSjhnM6x9KgCFwT6l5dtIOlFX4Aa3uhG3bCjxYyxfU9WsEfu5v
4lvBqlhygPeGY9aH9yPZ9rHEQ0M5tvOo/4sjVnqSoP9uQQw+kuuFMAd0DW4pK5J61lkYsOf8A28D
rYaU23dFVqoohgWWdlTyDEcv7nnz9mShTIZGhiTzaNFe1Z5dlAKIPqTrK1bEU8GYx8ZezApSWIec
8BPMqP1DzXXEn7Ue2dlT2sNisLfyGZi7TxmrWT+rP+JtY7c03GVty/wAVSKcnNcjsQyJ4CCLoEaJ
EOypy1tjgruGnuypiZcpXkSWMWVevZVHeH5mTnzGt75ylwWweJkw5jmzlu5FyD94IiGm+jenWy+N
G1N60m+4CxHlo4laTGshMhZjyHQw8GBOsZTmrJNaukNftMJJyPJeyxj9KD2cReDu0OJNUnJVBDdH
+Hai/C6nW2+AWe4ZbrOTe3VvYKeKSByT0ypzIKkL31tfZ+8It62tx5a37h6+T+/0pY5FKycj0CAg
EkRmPw1ujg/n+Ke7XzuRvpTwcaJBVjRg0vuk8T/xJOtmcPtu7EpJVw9VRL0/zJ28XY+z/xAAiEQA
CAQMEAgMAAAAAAAAAAAABAgMABBEQEhNRISIFQYH/2gAIAQIBAT8AqW/hjk4y/t1ioJ0nTemtyA0
pYREOjeT3XxjFufxhcg/ut5aMw5Ez7H6Gas7ZraHa4wzHcdVYjaOjmiSTk6f/xAAiEQACAQIGAwE
AAAAAAAAAAAABAgMEEQAFEBITISJBUZH/2gAIAQMBAT8AxFltRJGsvH4H3fFTTvTPsf2LjWlBECh
p1aNk8V+YzdVUwDddrH81y6t4xxkjpSLsbdYr6hamfehuoULr91//2Q==' },
{ TaskID: 3, TaskName: 'Defining target audience', StartDate:
new Date('04/02/2019'),
Duration: 3, resources: [3], EmailId:
'[email protected]', resourcesImage:
'/9j/4AAQSkZJRgABAQAAAQABAAD//gAfQ29tcHJlc3NlZCBieSBqcGVnLXJlY29tcHJlc3P/2wC
EAAQEBAQEBAQEBAQGBgUGBggHBwcHCAwJCQkJCQwTDA4MDA4MExEUEA8QFBEeFxUVFx4iHRsdIio
lJSo0MjRERFwBBAQEBAQEBAQEBAYGBQYGCAcHBwcIDAkJCQkJDBMMDgwMDgwTERQQDxAUER4XFRU
XHiIdGx0iKiUlKjQyNEREXP/CABEIADcANwMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAA
EBwMFCAb/2gAIAQEAAAAA39UUCnct2dVSZMV11tS5G5fmOGS73fU8SeVXNvlpWZ6WVEOtoiTVwgB
tW2poSoCztszrv//EABoBAAICAwAAAAAAAAAAAAAAAAUGAAMBAgT/2gAIAQIQAAAA1WTBChM72vC
cdKyi+f/EABkBAAIDAQAAAAAAAAAAAAAAAAAGAQMFBP/aAAgBAxAAAACWjF4L3/LTR/WMcvoP/8Q
AHhAAAgMBAQEBAQEAAAAAAAAABAUCAwYBAAcIFBP/2gAIAQEAAQgA9NkSZZMdLpDUWdEkXoQvreH
KL6PcoksbBcYZYVpdSRWvb+YTsYlVpBnDIPOJCzOPgtNuibSb2HzhkuvnfDL6jW4QvhA+cdL9xmR
y7k5N8ZkKTUnOWDkMPfTuXV5uu6Fd4ku1i8006qreD+1lkIrbb/fmd1ezzr//AFe2xWkrnPs5OPE
Krz2iN6oyEy0QFzWhh0hfI921rv0iT+1UQtt/Pau5PlTed28O8zpEeIu/z9PUyvqjdTbXNgvOGvt
7WSFfW9p7SKtt1BxagJEsilSKE0GVMGDEBT1qKRVfQ4XhmDnj1lC6r+jhxXQ24moaF3DA06BJ8S7
RodKp2KBzn12lTLA7hoXFG+KTy5fM5V1NolT3QMdC4eQHVkQQL/zZu/oDm3S7/B/OM189WUrkfv/
EADMQAAIBAwIDBQYFBQAAAAAAAAECAwAEERIhMUGBBRMyUWEQFCIzYpEGI0JxsVNjc4Kh/9oACAE
BAAk/AKRCqMVkvZQTEpHERgeMj7Ve3faM5BKQazlz9EaFVA9TX4TW2USmLL41huWQBsTywa7ZmhX
O8eszRBseFo5OHSoFguH2ilQkwTnyUng30n2OyIU728kU4KxE4EYPJn/ioglrZwEhEHEjZUGPM0G
jjc7SsShC8lQKQQBXasrsMACUZ8DBl3HkRV+hhfR30Zj1LIEGNxVqUWZcSR53SRean/qmm1Xdrj8
z+rC3gk/fka8V7cSS+vdqdEa9AKUlE7RsTOv9ppgtSvFK65QGJwrfsxGKkd5TvoSJ3PXSDispokX
DEEFaZ3WC7iVC3m0e9cIy9vNji0cilh9mUVxFsgPSlJQgA+u+aiBvLfLKwkYthv44UzM07ZUM5DL
obPwHl64qUhQqgM7FiApzueJxVsYYJLoiJTzKKFZq3YyxdTqrZrS4coDzhmOtD0yRXBlKnrUg7j4
xOipmbXsAyljjAHLFMY7cOXuJp4wjkAfoCnz5mptFxeq0MMh/Qxyxb/UCpmlWys4Ldpn8UpiQKXb
1bGay0aK91c45KAUQdSc9KjL3MClJYhxngJyVH1DitSao26EEcQRyIqFJm0g6C2nlyNWJUt4zqyq
g+bVete9qTZSGxtyNbIxw2nP3LGrxb22vlU2yQ7yO7D5Wnk44MDwohr+6YST44LgYWMfSg9lx7rd
v8zI1Qzf5E8/Ub1Ms3Z1/cLPbe7sCYSI1jMY1EHTtkVaLNd6CIIflqXI21M3rxNdvQRRzPulq+sq
nKNCfBVoBoyTK27Fm4nfmfZ//xAAjEQACAQQBAwUAAAAAAAAAAAABAgMABBESEAUiURMjMWKR/9o
ACAECAQE/AGZUVnY4UDJNTdbLSN6b6R5wO3Oasr+O6ULkb44uRtbzD6GpY4cIjKdfIrouqzKoBz3
fnBAIIPwauk0Y2scezByB5rpVmbWD3FxIeY7eGJ3dEGzEknn/xAAjEQACAgEEAQUBAAAAAAAAAAA
BAgMEEQAFEBIiITFRYnGx/9oACAEDAQE/AFUsyqoySQANQbATEC695CMkdsY1eoS03IYeGeKx62I
T911VE3m6MpPwdb/E5rvMWUAdR+kngHBBGqFvNYSysFygJPtrebot2AInzEv95kszSqiO56qAAB6
Dn//Z' },
{ TaskID: 4, TaskName: 'Prepare product sketch and notes',
StartDate: new Date('04/02/2019'),
Duration: 2, Predecessor: '2', Progress: 30, resources: [4],
EmailId: '[email protected]', resourcesImage:
'/9j/4AAQSkZJRgABAQAAAQABAAD//gAfQ29tcHJlc3NlZCBieSBqcGVnLXJlY29tcHJlc3P/2wC
EAAQEBAQEBAQEBAQGBgUGBggHBwcHCAwJCQkJCQwTDA4MDA4MExEUEA8QFBEeFxUVFx4iHRsdIio
lJSo0MjRERFwBBAQEBAQEBAQEBAYGBQYGCAcHBwcIDAkJCQkJDBMMDgwMDgwTERQQDxAUER4XFRU
XHiIdGx0iKiUlKjQyNEREXP/CABEIADcANwMBIgACEQEDEQH/xAAbAAACAwEBAQAAAAAAAAAAAAA
FBwQGCAMCCf/aAAgBAQAAAADfwhV0x/EZ4hW5npVo+hcTlnMn4TW6ofZUBIXDSIEnOzwAaDYEyIC
YV79vc+aEqNLsbBM//8QAGAEAAwEBAAAAAAAAAAAAAAAAAgQFAwD/2gAIAQIQAAAABNvRaHSpjAq
O9hof/8QAGQEAAgMBAAAAAAAAAAAAAAAAAgUDBAYA/9oACAEDEAAAADbLIbutRIi2OdXdagD/xAA
fEAACAwEBAQADAQAAAAAAAAAEBQIDBgEHABITFBX/2gAIAQEAAQgA+/0izrLKEuj9O81zxtwL2r3
Pze87lUFwwDEEVrlQ21sL617X47th5VaUf2TSlZ/O0Z9IT468vpqspb+dtFYNhQ3jnpLfFP6lzAo
QY4aY5acm+MyFJqOf5jlMu+12WWaxaJBjugEFv8cG+5kMlobU70irSIgntauc+rF0rHtsVpK5z9n
Z/ihVc56fmiTmueaDmJMvJkTeVxnnCKIgcJUrma0oRaHRwYYYeO3h3mdIjxF3+fp6mRlA5dMxyHy
yqbZuDVFcbTyFFuAVdpIlKz5lTBgxAU9aikV30OALtIDMbnQ9akbk12vEoL7YmE1i9xrWtZKdU6t
YkvF7IVYHcNC4o35zmhjLJmCfqbZwqBJeqGzphcDs2mzjIsTN8WJ84Ak7K2H3/8QAMxAAAgEDAgM
ECQMFAAAAAAAAAQIDAAQREjETIVEFQWGhEBQjMkJicXKBBiIzUlOCkbH/2gAIAQEACT8ApE0IxWS
9l5xKRuEHxnyrt687Wv4v5o4Q7oh8Fj0pX6PuY7HIBunjjDjqdCk12xItvOgkhZJDPbspH9D58iD
UKw3D8opUJMEx6KTs3yn0SMqlOLeyqcFYicCNT1f/AJXsZryMxkxjBSHbC/dUS3XEjDSaSoYN/kR
VndZikKSppJKMOoHcakkXseadI7mCbKhdZwZUB2K0gaKTGANwe4g9xFNqu7XHtP7sLe5J9e40My3
1zJL1IjU6EH4UUTxNFsR0KvIVxVnLPPGig5dIkzjnguQTiuxxi4bHtpAgBHzYNWcEc9rexJrt51n
DRzciCQBUgaQ20RYg55ledbRl7ebG7RyKWH+mUVv6sgPhgUoYiWO3lDclVUbiqSfrUEMlyrH4QWO
fOpFdopjmAxMMN0C489qgRtckMiRON3WQPjyonTFEqDPRRiubGWL8nVXJrS4coOsMx1ofMiow6Hc
VcvBLLMdMyAFlO/xCnLXnMLcNAMdNVScd7ePEkxULqZ+/C4A9GWjRXurnHcoBRB+Saj13MAKSxDe
eA8yo+YbrUmt2HMEEafr4ipHkljYm4Qe+veGHUVLFpZsamWpGnyWSd1HvTIobC/aDtUrTTNgJbqh
EruTyUCiGv7phJPjZcDCxj5UHok9WvH95gMxyfevXxFW4MWzNFIGR1+hwaaW2u5c8UJEBFkjGcMV
w3iKs/Ubaxt7mOX1iZZuJLOysZMpgs37eg3ocW9fOudhjGdwg7h6P/8QAIREBAAIBBAEFAAAAAAA
AAAAAAQIDAAQQETESBSJBYYH/2gAIAQIBAT8AnMhFk4a2Euph+ZXYWG2rOaX6yTxEDr5z015jMD2
m0kB5yyLXKzkAVTND4RoiHart3llNdkGE48mRhGIeMToNv//EACIRAQACAQMEAwEAAAAAAAAAAAE
CAxEAEBIEBTFhFSEiNP/aAAgBAwEBPwCuuVs4wj5dfFTBzFUPGdXUyplxdu3/ANURQyOq6xCUs5c
Ydd7hwnUyRk7R5cjj510t5OqGP2kQfSa7k2T6qyUj6MB62FETVHU3U2RsrniXh96nZOaspLlV2//
Z' }
]
},
{
TaskID: 5, TaskName: 'Concept approval', StartDate: new
Date('04/02/2019'), Duration: 0, Predecessor: '3,4', resources: [5],
EmailId: '[email protected]', resourcesImage:
'/9j/4AAQSkZJRgABAQAAAQABAAD//gAfQ29tcHJlc3NlZCBieSBqcGVnLXJlY29tcHJlc3P/2wC
EAAQEBAQEBAQEBAQGBgUGBggHBwcHCAwJCQkJCQwTDA4MDA4MExEUEA8QFBEeFxUVFx4iHRsdIio
lJSo0MjRERFwBBAQEBAQEBAQEBAYGBQYGCAcHBwcIDAkJCQkJDBMMDgwMDgwTERQQDxAUER4XFRU
XHiIdGx0iKiUlKjQyNEREXP/CABEIADcANwMBIgACEQEDEQH/xAAaAAACAwEBAAAAAAAAAAAAAAA
HCAQFBgID/9oACAEBAAAAAH+qsdiSrczqiUBMb22cXitDeKqHJh+9YFRxtGA87Oevw2Kx1qZOdFq
/gVwmsmjsTDfKu9sf/8QAGQEAAwEBAQAAAAAAAAAAAAAAAAQFBgED/9oACAECEAAAAORaDfjmqNo
zlhsZWP/EABkBAAIDAQAAAAAAAAAAAAAAAAAGAwQFAf/aAAgBAxAAAADu/l0535dXB6VKBDMf/8Q
ANRAAAgIBAgQDBgUCBwAAAAAAAQIDBAUABhESIUEHIjEQEzJhgZEIFFJicRYjQkNRU6Gx0f/aAAg
BAQABPwDRyFq9K9bBxoVRisl2UExKR6iMD4z/AMa3ZuPaO0ljG6stav3JFLpVVizn5iKMqqL821S
8WPC675v6duQR8SDK9VOA+fkYnWJfE5eimT2jnZFhPoFcywhv0vHJ1U/Y6qZSeGePHZeAQWHPCKV
OsE5/0Un0b9p9mRle9ZTDV5GSMoJLkingViJ4CNT+p/8ArWSsLicRZkpQKErQkRRjopb0UfxqvtK
DJy5DI5ZFnuW3LyyP1PA/4RrM7OxVPnaJCir5Qo462Bck2luuCerZc46+Vgnic9FPz/j1GrVWtfr
SVbKB42HXsQexB7Eaw9mdXsYm63Nbq8P7n+7C3wSfz2OsEVkr2snJ1e9ZklHc+7Q8kY+gGt3OYMR
zMQqvNGp+p1l/ELD7fdaj15ZmLBCyPGoB+QZgW+g1u/etWq8cEVI2PeRrM3K4HlZebsCTrbmWpZq
JrEdaeKeOVeEfu3kC9QOYlAeH11i7iXMXRlSVZCY1DFTxBZeh+x1nZVxtnHZntGXrzcPVo5FLD7M
o1txlGCxRHxCsgOt2442sM3lDGJxMVb0IH/gPHVuth1s1oI4meRuMrhVBVFXuen21ubKYo7gi9yv
vVSFIDGkbIyIo9OLDh/A1tCCNoMpdqM0R/J2EjUgcyMqgq3A62nhzg8BjMbJIXkih4yv+qWQl3I+
XMTw1vdCNu2FHVjLF9TzawZ/Lm/iWPBqdhygPeGY86EfcjUsayK6OoZWUqQfQg6yuCWPMGvYkmik
qWRMhjdk94i9VDcpHMpHqNbrxUty4VmhgEDyBnMMUkbso7czSPw9O2vDivEk/AgK5aOMD08yedvt
zBfZkoUyGRoYk8WjRXtWeHZQCiD6k6ytWxFPBmMfGXswKUliHrPATxKj9w9V1mfETY23KkV3Oblp
1VdOdYGYtYI9OkKcX1Z3zQ8Q6ljO7TpzitjbUlMTyoEaduRX4qvZRx6cdbq3Nu5bDKFPkPUiuUCB
evEknhrJ+J+6bNqEUMrNDFWsCdJUYq7zIxYScfkTxGvCn8S2e3ZNits39ny5LKjyWr9SURx8naVo
yvRtYynNWSa1dIa/aYSTkei9ljH7UHs8QPCTa+/4C1+uIbw+CzF5XGsNsbdXhdtnI4PEClfju5SS
y1qySAsRijjCKilSX8vxa8RU35ubBxbdwWBrQGy5F65+ZQNLGT0iHE8VX9etl/hN3LlpIbe5MrWq
0+6Vn53OtheGe1vDvHpSwNBEk/wAyc9Xdu5JPs//EACMRAAIBAwMEAwAAAAAAAAAAAAECAwAREgQ
QMQUTIUEiM3L/2gAIAQIBAT8AJABJ4FSdWChmwOPANaPVJq4s15HO0/0y/k1IUKhcSUHqulKEzwS
ysLnzvPBJFM0CDk3Xx6NaOJooQrizHfJTAD2o8wbCS3ytv//EACMRAAEDAwQCAwAAAAAAAAAAAAE
CAxEABBIFECExFCJBUXH/2gAIAQMBAT8AAJIA7JimNELsAujOORV7Zrs3i0v9B2tY8liTHuO6t7V
cyk4qUJyNa8BnC3cnEKCRA7ESd9OvG3rYXD6uQnE8/IrUXkv3K1oVkn73BcDpSHlhCuSifUnf/9k
='
},
{
TaskID: 6,
TaskName: 'Market research',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
EmailId: '[email protected]',
subtasks: [
{
TaskID: 7,
TaskName: 'Demand analysis',
StartDate: new Date('04/04/2019'),
EndDate: new Date('04/21/2019'),
EmailId: '[email protected]',
subtasks: [
{ TaskID: 8, TaskName: 'Customer strength', StartDate:
new Date('04/04/2019'),
Duration: 4, Predecessor: '5', Progress: 30,
resources: [7], EmailId: '[email protected]', resourcesImage:
'/9j/4AAQSkZJRgABAQAAAQABAAD//gAfQ29tcHJlc3NlZCBieSBqcGVnLXJlY29tcHJlc3P/2wC
EAAQEBAQEBAQEBAQGBgUGBggHBwcHCAwJCQkJCQwTDA4MDA4MExEUEA8QFBEeFxUVFx4iHRsdIio
lJSo0MjRERFwBBAQEBAQEBAQEBAYGBQYGCAcHBwcIDAkJCQkJDBMMDgwMDgwTERQQDxAUER4XFRU
XHiIdGx0iKiUlKjQyNEREXP/CABEIADcANwMBIgACEQEDEQH/xAAdAAACAgIDAQAAAAAAAAAAAAA
EBwUIAwYAAQkC/9oACAEBAAAAAL/RKXSL6ch0UrvNI3nqPuPwl9aaldWm688LUdtYd922TOpawDH
viJKrZ2W4J00JAp+yjGkf/8QAGgEAAgMBAQAAAAAAAAAAAAAAAAMBBAUCBv/aAAgBAhAAAAAR2yP
O2tkxrV8S+P/EABkBAAIDAQAAAAAAAAAAAAAAAAAFAQQGA//aAAgBAxAAAACb9ev01i5AbFIpGC8
//8QANBAAAgIBAgMFBgUEAwAAAAAAAQIDBAUABgcREhMhIjFBFDJRYnKBCBAVQqFTYXGRI3Ox/9o
ACAEBAAE/ANHIW70skGFRCqErJdlHOFCPMRj95/jXEHi/w32HA4zmbl3BmA5Q42pYDujjz60jISI
D5tVvxT7auTOIOFkIh9Ge6Fcj7Ra4ecUtmb96Ku28xaw+Y6S36bccOj/QGJDj6DqrlJobEePy8Cw
WH7opUJME5+Ck+TfKfyyDyZG1HhKzsiFO1uSKeRWInkIwfRn/APNceN0vsvhhlxiXNa1cVMZS7Lw
lDP3Mw/uqAnUXC3dt5Ip6dSSwHTqPQpY6j2LuvFiT23b2TLwqSI46jv8AfuGrWA3ttaLG7nt46xT
AkVon6ws0bDxo3h5sp/zrhruJeJfDbb2dycQ7W5Ay2QP68DmIuvwJK8xrD2Z1exibrdVury/5P6s
Le5J/n0OsB0tWs5Jh47tmSQep7NT0IPsBr8RWIN/bG1JSoMdbdGMef/rdyh1w8kQ0olji7h5nUzy
PA6dIOuL2MsWtp5/2eEuUgEpUeYER6iRr8LmThv8ACbFQiXvp2bUJT4EuX1nZVxtnHZn0jL15uXm
0cilh/plGtuOowOK+IrIDrfmHOc2jk6ar41aGwn1VpVmH8rrAVt9YaGfLpmIVhWszmvKhkhceagE
KvTrN4e/uGtUavlLtVexR2SvMU5u68+Z5FQwHwOptvLj6EyT2J7HbR9EomIIAI5eQ7tcFtvRbY2Z
QxUUaDs1DSunk8rgF21vdCNu2FHexli+56tYI+zm/iW7mqWHKA+sMx60P8kamj7WGaMnkHUr/ALG
s5kbuJ2xkaMkDA17TVJH8kVonAKuf2gj11j8hkMpiqlubHSU4Y4lQ8uouXA5c1Ze4aFu1Yov7eJE
kUMCsg6SeXkdbf6IsFiliUL1VYj3D4oNZKFMhkaGJPNo0V7Vnl6KAUQfcnWVq2Ip4Mxj4y9mBSks
Q854CeZUfMPNdVrte/VSzVk643+xBHmCPQjXGixgsPuPEVhN2VjORTpbjA8DCLpEc31gnlra/tQq
169mSvJFCp7Hkh6vCeRKk+Q1JZTK5T9KpsJrTP1OqnmEjT1b4AE6xOQgweMhx83azyIAkCjxPMxP
PpX7n7DWMpzVkmtXSGv2mEk5HkvosY+VB+VvDv28l7FWjUuP7/hDRS/Wnx/uNcSeHlzcYpWc7EDL
UNns545AwmE/SSPRkKlfDqngt/i3Xw0WYWtiWcq11wkk0UfyovIsx1szaX6NjWqYHHgCWTnNkrso
eawR++QLzJPwXuUaxuGgx7e1TObF4ry7Vx7oPogHuj8v/xAAjEQACAgEDAwUAAAAAAAAAAAABAwI
RABAhMQQFYRIyQVFi/9oACAECAQE/AOMHUpn7WA4tsWi4SBHjQ7g4ulxkv1A2Tx5zthK5MT+r1mm
KmygRyLGdCqQLZgGtt9Wwi1sJz5oDL+BsPoaf/8QAIhEAAgEDAwUBAAAAAAAAAAAAAQMCAAQREBI
hBRMiMWFi/9oACAEDAQE/AIgyIiPZo2D1kdxUqeiSCBIEfDok7WrP6FXEJMYGY2j7XVYhioOzyAI
6puZXNpBwwDE811RsT2oGXkSTt+a2l25FuxK8beSMjkZo5lIzkSZH2T70/9k=' },
]
}
]
}
];
};
function pdfQueryCellInfo(args) {
if (args.column.headerText === 'Resources') {
{
args.image = { height:40,width:40, base64:
(args).data.taskData.resourcesImage };
}
}
if (args.column.headerText === 'Email ID') {
args.hyperLink = {
target: 'mailto:' + (args).data.taskData.EmailId,
displayText: (args).data.taskData.EmailId
};
}
}
const splitterSettings = {
columnIndex: 7
};
const resourceFields = {
id: 'resourceId',
name: 'resourceName',
};
function ganttTemplate(props) {
var src = props.TaskID + '.png';
return (<div className='image' >
<img src={src} style={{height:'42px'}}/>
</div>);
};
const template = ganttTemplate;
return <GanttComponent dataSource={data} rowHeight={60}
taskFields={taskFields} toolbar={toolbarOptions} pdfQueryCellInfo =
{pdfQueryCellInfo} toolbarClick={toolbarClick} allowPdfExport={true}
ref={gantt => ganttChart = gantt}
splitterSettings={splitterSettings}
resourceFields={resourceFields} resources={ProjectResources} height =
'450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'></ColumnDirective>
<ColumnDirective field='resources'
headerText='Resources' width='250' template={template}
textAlign='Center'></ColumnDirective>
<ColumnDirective field='TaskName'></ColumnDirective>
<ColumnDirective field='EmailId' headerText='Email ID'
width='250' ></ColumnDirective>
</ColumnsDirective>
<Inject services={[Toolbar, PdfExport, Selection]}/>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let ProjectResources: Object[] = [
{ resourceId: 1, resourceName: 'Martin Tamer' },
{ resourceId: 2, resourceName: 'Rose Fuller' },
{ resourceId: 3, resourceName: 'Margaret Buchanan' },
lJSo0MjRERFwBBAQEBAQEBAQEBAYGBQYGCAcHBwcIDAkJCQkJDBMMDgwMDgwTERQQDxAUER4XFRU
XHiIdGx0iKiUlKjQyNEREXP/CABEIADcANwMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAA
EBwMFCAb/2gAIAQEAAAAA39UUCnct2dVSZMV11tS5G5fmOGS73fU8SeVXNvlpWZ6WVEOtoiTVwgB
tW2poSoCztszrv//EABoBAAICAwAAAAAAAAAAAAAAAAUGAAMBAgT/2gAIAQIQAAAA1WTBChM72vC
cdKyi+f/EABkBAAIDAQAAAAAAAAAAAAAAAAAGAQMFBP/aAAgBAxAAAACWjF4L3/LTR/WMcvoP/8Q
AHhAAAgMBAQEBAQEAAAAAAAAABAUCAwYBAAcIFBP/2gAIAQEAAQgA9NkSZZMdLpDUWdEkXoQvreH
KL6PcoksbBcYZYVpdSRWvb+YTsYlVpBnDIPOJCzOPgtNuibSb2HzhkuvnfDL6jW4QvhA+cdL9xmR
y7k5N8ZkKTUnOWDkMPfTuXV5uu6Fd4ku1i8006qreD+1lkIrbb/fmd1ezzr//AFe2xWkrnPs5OPE
Krz2iN6oyEy0QFzWhh0hfI921rv0iT+1UQtt/Pau5PlTed28O8zpEeIu/z9PUyvqjdTbXNgvOGvt
7WSFfW9p7SKtt1BxagJEsilSKE0GVMGDEBT1qKRVfQ4XhmDnj1lC6r+jhxXQ24moaF3DA06BJ8S7
RodKp2KBzn12lTLA7hoXFG+KTy5fM5V1NolT3QMdC4eQHVkQQL/zZu/oDm3S7/B/OM189WUrkfv/
EADMQAAIBAwIDBQYFBQAAAAAAAAECAwAEERIhMUGBBRMyUWEQFCIzYpEGI0JxsVNjc4Kh/9oACAE
BAAk/AKRCqMVkvZQTEpHERgeMj7Ve3faM5BKQazlz9EaFVA9TX4TW2USmLL41huWQBsTywa7ZmhX
O8eszRBseFo5OHSoFguH2ilQkwTnyUng30n2OyIU728kU4KxE4EYPJn/ioglrZwEhEHEjZUGPM0G
jjc7SsShC8lQKQQBXasrsMACUZ8DBl3HkRV+hhfR30Zj1LIEGNxVqUWZcSR53SRean/qmm1Xdrj8
z+rC3gk/fka8V7cSS+vdqdEa9AKUlE7RsTOv9ppgtSvFK65QGJwrfsxGKkd5TvoSJ3PXSDispokX
DEEFaZ3WC7iVC3m0e9cIy9vNji0cilh9mUVxFsgPSlJQgA+u+aiBvLfLKwkYthv44UzM07ZUM5DL
obPwHl64qUhQqgM7FiApzueJxVsYYJLoiJTzKKFZq3YyxdTqrZrS4coDzhmOtD0yRXBlKnrUg7j4
xOipmbXsAyljjAHLFMY7cOXuJp4wjkAfoCnz5mptFxeq0MMh/Qxyxb/UCpmlWys4Ldpn8UpiQKXb
1bGay0aK91c45KAUQdSc9KjL3MClJYhxngJyVH1DitSao26EEcQRyIqFJm0g6C2nlyNWJUt4zqyq
g+bVete9qTZSGxtyNbIxw2nP3LGrxb22vlU2yQ7yO7D5Wnk44MDwohr+6YST44LgYWMfSg9lx7rd
v8zI1Qzf5E8/Ub1Ms3Z1/cLPbe7sCYSI1jMY1EHTtkVaLNd6CIIflqXI21M3rxNdvQRRzPulq+sq
nKNCfBVoBoyTK27Fm4nfmfZ//xAAjEQACAQQBAwUAAAAAAAAAAAABAgMABBESEAUiURMjMWKR/9o
ACAECAQE/AGZUVnY4UDJNTdbLSN6b6R5wO3Oasr+O6ULkb44uRtbzD6GpY4cIjKdfIrouqzKoBz3
fnBAIIPwauk0Y2scezByB5rpVmbWD3FxIeY7eGJ3dEGzEknn/xAAjEQACAgEEAQUBAAAAAAAAAAA
BAgMEEQAFEBIiITFRYnGx/9oACAEDAQE/AFUsyqoySQANQbATEC695CMkdsY1eoS03IYeGeKx62I
T911VE3m6MpPwdb/E5rvMWUAdR+kngHBBGqFvNYSysFygJPtrebot2AInzEv95kszSqiO56qAAB6
Dn//Z' },
{ TaskID: 4, TaskName: 'Prepare product sketch and notes',
StartDate: new Date('04/02/2019'),
Duration: 2, Predecessor: '2', Progress: 30, resources: [4],
EmailId: '[email protected]', resourcesImage:
'/9j/4AAQSkZJRgABAQAAAQABAAD//gAfQ29tcHJlc3NlZCBieSBqcGVnLXJlY29tcHJlc3P/2wC
EAAQEBAQEBAQEBAQGBgUGBggHBwcHCAwJCQkJCQwTDA4MDA4MExEUEA8QFBEeFxUVFx4iHRsdIio
lJSo0MjRERFwBBAQEBAQEBAQEBAYGBQYGCAcHBwcIDAkJCQkJDBMMDgwMDgwTERQQDxAUER4XFRU
XHiIdGx0iKiUlKjQyNEREXP/CABEIADcANwMBIgACEQEDEQH/xAAbAAACAwEBAQAAAAAAAAAAAAA
FBwQGCAMCCf/aAAgBAQAAAADfwhV0x/EZ4hW5npVo+hcTlnMn4TW6ofZUBIXDSIEnOzwAaDYEyIC
YV79vc+aEqNLsbBM//8QAGAEAAwEBAAAAAAAAAAAAAAAAAgQFAwD/2gAIAQIQAAAABNvRaHSpjAq
O9hof/8QAGQEAAgMBAAAAAAAAAAAAAAAAAgUDBAYA/9oACAEDEAAAADbLIbutRIi2OdXdagD/xAA
fEAACAwEBAQADAQAAAAAAAAAEBQIDBgEHABITFBX/2gAIAQEAAQgA+/0izrLKEuj9O81zxtwL2r3
Pze87lUFwwDEEVrlQ21sL617X47th5VaUf2TSlZ/O0Z9IT468vpqspb+dtFYNhQ3jnpLfFP6lzAo
QY4aY5acm+MyFJqOf5jlMu+12WWaxaJBjugEFv8cG+5kMlobU70irSIgntauc+rF0rHtsVpK5z9n
Z/ihVc56fmiTmueaDmJMvJkTeVxnnCKIgcJUrma0oRaHRwYYYeO3h3mdIjxF3+fp6mRlA5dMxyHy
yqbZuDVFcbTyFFuAVdpIlKz5lTBgxAU9aikV30OALtIDMbnQ9akbk12vEoL7YmE1i9xrWtZKdU6t
YkvF7IVYHcNC4o35zmhjLJmCfqbZwqBJeqGzphcDs2mzjIsTN8WJ84Ak7K2H3/8QAMxAAAgEDAgM
ECQMFAAAAAAAAAQIDAAQREjETIVEFQWGhEBQjMkJicXKBBiIzUlOCkbH/2gAIAQEACT8ApE0IxWS
9l5xKRuEHxnyrt687Wv4v5o4Q7oh8Fj0pX6PuY7HIBunjjDjqdCk12xItvOgkhZJDPbspH9D58iD
UKw3D8opUJMEx6KTs3yn0SMqlOLeyqcFYicCNT1f/AJXsZryMxkxjBSHbC/dUS3XEjDSaSoYN/kR
VndZikKSppJKMOoHcakkXseadI7mCbKhdZwZUB2K0gaKTGANwe4g9xFNqu7XHtP7sLe5J9e40My3
1zJL1IjU6EH4UUTxNFsR0KvIVxVnLPPGig5dIkzjnguQTiuxxi4bHtpAgBHzYNWcEc9rexJrt51n
DRzciCQBUgaQ20RYg55ledbRl7ebG7RyKWH+mUVv6sgPhgUoYiWO3lDclVUbiqSfrUEMlyrH4QWO
fOpFdopjmAxMMN0C489qgRtckMiRON3WQPjyonTFEqDPRRiubGWL8nVXJrS4coOsMx1ofMiow6Hc
VcvBLLMdMyAFlO/xCnLXnMLcNAMdNVScd7ePEkxULqZ+/C4A9GWjRXurnHcoBRB+Saj13MAKSxDe
eA8yo+YbrUmt2HMEEafr4ipHkljYm4Qe+veGHUVLFpZsamWpGnyWSd1HvTIobC/aDtUrTTNgJbqh
EruTyUCiGv7phJPjZcDCxj5UHok9WvH95gMxyfevXxFW4MWzNFIGR1+hwaaW2u5c8UJEBFkjGcMV
w3iKs/Ubaxt7mOX1iZZuJLOysZMpgs37eg3ocW9fOudhjGdwg7h6P/8QAIREBAAIBBAEFAAAAAAA
AAAAAAQIDAAQQETESBSJBYYH/2gAIAQIBAT8AnMhFk4a2Euph+ZXYWG2rOaX6yTxEDr5z015jMD2
m0kB5yyLXKzkAVTND4RoiHart3llNdkGE48mRhGIeMToNv//EACIRAQACAQMEAwEAAAAAAAAAAAE
CAxEAEBIEBTFhFSEiNP/aAAgBAwEBPwCuuVs4wj5dfFTBzFUPGdXUyplxdu3/ANURQyOq6xCUs5c
Ydd7hwnUyRk7R5cjj510t5OqGP2kQfSa7k2T6qyUj6MB62FETVHU3U2RsrniXh96nZOaspLlV2//
Z' }
]
},
{
TaskID: 5, TaskName: 'Concept approval', StartDate: new
Date('04/02/2019'), Duration: 0, Predecessor: '3,4', resources: [5],
EmailId: '[email protected]', resourcesImage:
'/9j/4AAQSkZJRgABAQAAAQABAAD//gAfQ29tcHJlc3NlZCBieSBqcGVnLXJlY29tcHJlc3P/2wC
EAAQEBAQEBAQEBAQGBgUGBggHBwcHCAwJCQkJCQwTDA4MDA4MExEUEA8QFBEeFxUVFx4iHRsdIio
lJSo0MjRERFwBBAQEBAQEBAQEBAYGBQYGCAcHBwcIDAkJCQkJDBMMDgwMDgwTERQQDxAUER4XFRU
XHiIdGx0iKiUlKjQyNEREXP/CABEIADcANwMBIgACEQEDEQH/xAAaAAACAwEBAAAAAAAAAAAAAAA
HCAQFBgID/9oACAEBAAAAAH+qsdiSrczqiUBMb22cXitDeKqHJh+9YFRxtGA87Oevw2Kx1qZOdFq
/gVwmsmjsTDfKu9sf/8QAGQEAAwEBAQAAAAAAAAAAAAAAAAQFBgED/9oACAECEAAAAORaDfjmqNo
zlhsZWP/EABkBAAIDAQAAAAAAAAAAAAAAAAAGAwQFAf/aAAgBAxAAAADu/l0535dXB6VKBDMf/8Q
ANRAAAgIBAgQDBgUCBwAAAAAAAQIDBAUABhESIUEHIjEQEzJhgZEIFFJicRYjQkNRU6Gx0f/aAAg
BAQABPwDRyFq9K9bBxoVRisl2UExKR6iMD4z/AMa3ZuPaO0ljG6stav3JFLpVVizn5iKMqqL821S
8WPC675v6duQR8SDK9VOA+fkYnWJfE5eimT2jnZFhPoFcywhv0vHJ1U/Y6qZSeGePHZeAQWHPCKV
OsE5/0Un0b9p9mRle9ZTDV5GSMoJLkingViJ4CNT+p/8ArWSsLicRZkpQKErQkRRjopb0UfxqvtK
DJy5DI5ZFnuW3LyyP1PA/4RrM7OxVPnaJCir5Qo462Bck2luuCerZc46+Vgnic9FPz/j1GrVWtfr
SVbKB42HXsQexB7Eaw9mdXsYm63Nbq8P7n+7C3wSfz2OsEVkr2snJ1e9ZklHc+7Q8kY+gGt3OYMR
zMQqvNGp+p1l/ELD7fdaj15ZmLBCyPGoB+QZgW+g1u/etWq8cEVI2PeRrM3K4HlZebsCTrbmWpZq
JrEdaeKeOVeEfu3kC9QOYlAeH11i7iXMXRlSVZCY1DFTxBZeh+x1nZVxtnHZntGXrzcPVo5FLD7M
o1txlGCxRHxCsgOt2442sM3lDGJxMVb0IH/gPHVuth1s1oI4meRuMrhVBVFXuen21ubKYo7gi9yv
vVSFIDGkbIyIo9OLDh/A1tCCNoMpdqM0R/J2EjUgcyMqgq3A62nhzg8BjMbJIXkih4yv+qWQl3I+
XMTw1vdCNu2FHVjLF9TzawZ/Lm/iWPBqdhygPeGY86EfcjUsayK6OoZWUqQfQg6yuCWPMGvYkmik
qWRMhjdk94i9VDcpHMpHqNbrxUty4VmhgEDyBnMMUkbso7czSPw9O2vDivEk/AgK5aOMD08yedvt
zBfZkoUyGRoYk8WjRXtWeHZQCiD6k6ytWxFPBmMfGXswKUliHrPATxKj9w9V1mfETY23KkV3Oblp
1VdOdYGYtYI9OkKcX1Z3zQ8Q6ljO7TpzitjbUlMTyoEaduRX4qvZRx6cdbq3Nu5bDKFPkPUiuUCB
evEknhrJ+J+6bNqEUMrNDFWsCdJUYq7zIxYScfkTxGvCn8S2e3ZNits39ny5LKjyWr9SURx8naVo
yvRtYynNWSa1dIa/aYSTkei9ljH7UHs8QPCTa+/4C1+uIbw+CzF5XGsNsbdXhdtnI4PEClfju5SS
y1qySAsRijjCKilSX8vxa8RU35ubBxbdwWBrQGy5F65+ZQNLGT0iHE8VX9etl/hN3LlpIbe5MrWq
0+6Vn53OtheGe1vDvHpSwNBEk/wAyc9Xdu5JPs//EACMRAAIBAwMEAwAAAAAAAAAAAAECAwAREgQ
QMQUTIUEiM3L/2gAIAQIBAT8AJABJ4FSdWChmwOPANaPVJq4s15HO0/0y/k1IUKhcSUHqulKEzwS
ysLnzvPBJFM0CDk3Xx6NaOJooQrizHfJTAD2o8wbCS3ytv//EACMRAAEDAwQCAwAAAAAAAAAAAAE
CAxEABBIFECExFCJBUXH/2gAIAQMBAT8AAJIA7JimNELsAujOORV7Zrs3i0v9B2tY8liTHuO6t7V
cyk4qUJyNa8BnC3cnEKCRA7ESd9OvG3rYXD6uQnE8/IrUXkv3K1oVkn73BcDpSHlhCuSifUnf/9k
='
},
{
TaskID: 6,
TaskName: 'Market research',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
EmailId: '[email protected]',
subtasks: [
{
TaskID: 7,
TaskName: 'Demand analysis',
StartDate: new Date('04/04/2019'),
EndDate: new Date('04/21/2019'),
EmailId: '[email protected]',
subtasks: [
{ TaskID: 8, TaskName: 'Customer strength', StartDate:
new Date('04/04/2019'),
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
resourceInfo: 'resources'
};
const toolbarOptions = ['PdfExport'];
let ganttChart;
function toolbarClick(args) {
if (args.item.text === 'Pdf export') {
let exportProperties = {
enableFooter: false
};
ganttChart.pdfExport(exportProperties);
}
};
function pdfQueryTaskbarInfo(args) {
if (!args.data.hasChildRecords) {
if (args.data.ganttProperties.resourceNames) {
args.taskbarTemplate.image = [{
width: 20, base64: (args).data.taskData.resourcesImage,
height: 20
}]
}
args.taskbarTemplate.value = args.data.TaskName;
args.taskbarTemplate.fontStyle = {
fontColor: new PdfColor(255, 255, 255),
fontFamily: 'TimesRoman',
}
}
if (args.data.hasChildRecords) {
if (args.data.ganttProperties.resourceNames) {
args.taskbarTemplate.image = [{
width: 20, base64: (args).data.taskData.resourcesImage,
height: 20
}]
}
args.taskbarTemplate.value = args.data.TaskName;
args.taskbarTemplate.fontStyle = {
fontColor: new PdfColor(255, 255, 255),
fontFamily: 'TimesRoman',
}
}
if (args.data.ganttProperties.duration === 0) {
if (args.data.ganttProperties.resourceNames) {
args.taskbarTemplate.image = [{
width: 20, base64: (args).data.taskData.resourcesImage,
height: 20,
}]
}
args.taskbarTemplate.value = args.data.TaskName,
args.taskbarTemplate.fontStyle = {
fontColor: new PdfColor(255, 255, 255),
fontFamily: 'TimesRoman'
}
}
}
const splitterSettings = {
columnIndex: 2
};
function TaskbarTemplate(props) {
return (
<div className="e-gantt-child-taskbar-inner-div e-gantt-child-
taskbar" style={{ height: "100%" }} >
<div className="e-gantt-child-progressbar-inner-div e-gantt-
child-progressbar" style={{ width: props.ganttProperties.progressWidth +
"px", height: "100%" }} >
<img className="image"
src={`./images/${props.ganttProperties.resourceNames}.png`} style={{
height: '30px', width: '30px', top: '10px' }} />
</div>
<span
className="e-task-label"
style={{ position: "absolute", fontSize: "12px", color:
"white", top: "5px", left: "30px", fontFamily: "Segoe UI", cursor: "move",
overflow: "hidden" }} >
{props.TaskName}
</span>
</div>
);
}
function ParentTaskbarTemplate(props) {
return (
<div className="e-gantt-parent-taskbar-inner-div e-gantt-parent-
taskbar" style={{ height: "100%" }} >
<div className="e-gantt-parent-progressbar-inner-div e-row-
expand e-gantt-parent-progressbar" style={{ width:
props.ganttProperties.progressWidth + "px", height: "100%" }} >
</div>
<span className="e-task-label" style={{ position:
"absolute", fontSize: "12px", color: "white", top: "5px", left: "10px",
fontFamily: "Segoe UI", cursor: "move" }} >
{props.TaskName}
</span>
</div>
);
}
function MilestoneTemplate(props) {
return (
<div className="e-gantt-milestone" style={{ position:
"relative", display: "inline-block" }}>
<div className="e-milestone-top" style={{ position:
"absolute", borderRightWidth: "20px", borderLeftWidth: "20px",
borderBottomWidth: "20px" }} />
<div className="e-milestone-bottom" style={{ position:
"absolute", top: "20px", borderRightWidth: "20px", borderLeftWidth: "20px",
borderTopWidth: "20px" }} />
<img className="image"
src={`./images/${props.ganttProperties.resourceNames}.png`} style={{
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective, Inject, Toolbar,
PdfExport, Selection, PdfExportProperties, PdfQueryTaskbarInfoEventArgs }
from '@syncfusion/ej2-react-gantt';
import { base64Data, editingResources } from './datasource';
import { ClickEventArgs } from '@syncfusion/ej2-
navigations/src/toolbar/toolbar';
function App() {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
child: 'subtasks',
resourceInfo: 'resources'
};
const toolbarOptions = ['PdfExport'];
let ganttChart: any;
function toolbarClick(args: ClickEventArgs) {
if (args.item.text === 'Pdf export') {
let exportProperties: PdfExportProperties = {
enableFooter: false
};
ganttChart.pdfExport(exportProperties);
}
};
function pdfQueryTaskbarInfo(args: PdfQueryTaskbarInfoEventArgs) {
if (!args.data.hasChildRecords) {
if (args.data.ganttProperties.resourceNames) {
args.taskbarTemplate.image = [{
width: 20, base64: (args as
any).data.taskData.resourcesImage, height: 20
}]
}
args.taskbarTemplate.value = args.data.TaskName;
}
if (args.data.hasChildRecords) {
if (args.data.ganttProperties.resourceNames) {
args.taskbarTemplate.image = [{
width: 20, base64: (args as
any).data.taskData.resourcesImage, height: 20
}]
}
args.taskbarTemplate.value = args.data.TaskName;
}
if (args.data.ganttProperties.duration === 0) {
if (args.data.ganttProperties.resourceNames) {
args.taskbarTemplate.image = [{
width: 20, base64: (args as
any).data.taskData.resourcesImage, height: 20,
}]
}
args.taskbarTemplate.value = args.data.TaskName;
}
}
const splitterSettings: any = {
columnIndex: 2
};
const resourceFields: any = {
id: 'resourceId',
name: 'resourceName',
};
function TaskbarTemplate(props: any) {
return (
<div className="e-gantt-child-taskbar-inner-div e-gantt-child-
taskbar" style={{ height: "100%" }} >
<div className="e-gantt-child-progressbar-inner-div e-gantt-
child-progressbar" style={{ width: props.ganttProperties.progressWidth +
"px", height: "100%" }} >
<img className="image"
src={`./images/${props.ganttProperties.resourceNames}.png`} style={{ height:
'30px', width: '30px', top: '10px' }} />
</div>
<span
className="e-task-label"
style={{ position: "absolute", fontSize: "12px", color:
"white", top: "5px", left: "30px", fontFamily: "Segoe UI", cursor: "move",
overflow: "hidden" }}>
{props.TaskName}
</span>
</div>
);
}
function ParentTaskbarTemplate(props: any) {
return (
<div className="e-gantt-parent-taskbar-inner-div e-gantt-parent-
taskbar" style={{ height: "100%" }} >
<div className="e-gantt-parent-progressbar-inner-div e-row-
expand e-gantt-parent-progressbar" style={{ width:
props.ganttProperties.progressWidth + "px", height: "100%" }} >
</div>
<span className="e-task-label" style={{ position:
"absolute", fontSize: "12px", color: "white", top: "5px", left: "10px",
fontFamily: "Segoe UI", cursor: "move" }} >
{props.TaskName}
</span>
</div>
);
}
function MilestoneTemplate(props: any) {
return (
<div className="e-gantt-milestone" style={{ position:
"relative", display: "inline-block" }}>
<div className="e-milestone-top" style={{ position:
"absolute", borderRightWidth: "20px", borderLeftWidth: "20px",
borderBottomWidth: "20px" }} />
<div
className="e-milestone-bottom"
style={{ position: "absolute", top: "20px",
borderRightWidth: "20px", borderLeftWidth: "20px", borderTopWidth: "20px" }}
/>
<img className="image"
src={`./images/${props.ganttProperties.resourceNames}.png`} style={{ height:
'30px', width: '30px', position: 'absolute', top: '1px', left: '80%',
transform: 'translateX(-50%)' }} />
</div>
);
}
return <GanttComponent dataSource={base64Data} rowHeight={45}
taskFields={taskFields} pdfQueryTaskbarInfo={pdfQueryTaskbarInfo}
toolbar={toolbarOptions} toolbarClick={toolbarClick} allowPdfExport={true}
ref={gantt => ganttChart = gantt}
splitterSettings={splitterSettings} resourceFields={resourceFields}
resources={editingResources} taskbarTemplate={TaskbarTemplate}
parentTaskbarTemplate={ParentTaskbarTemplate}
milestoneTemplate={MilestoneTemplate} height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'></ColumnDirective>
<ColumnDirective field='TaskName'></ColumnDirective>
</ColumnsDirective>
<Inject services={[Toolbar, PdfExport, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
child: 'subtasks',
resourceInfo: 'resources'
};
const toolbarOptions = ['PdfExport'];
let ganttChart;
function toolbarClick(args) {
if (args.item.text === 'Pdf export') {
let exportProperties = {
enableFooter: false
};
ganttChart.pdfExport(exportProperties);
}
};
function pdfQueryTaskbarInfo(args) {
args.labelSettings.leftLabel.value =
args.data.ganttProperties.taskName + '[' +
args.data.ganttProperties.progress + ']';
if (args.data.ganttProperties.resourceNames) {
args.labelSettings.rightLabel.value =
args.data.ganttProperties.resourceNames;
args.labelSettings.rightLabel.image = [{
base64: (args).data.taskData.resourcesImage, width: 20,
height: 20
}]
}
args.labelSettings.taskLabel.value =
args.data.ganttProperties.progress + '%'
}
const LeftLabelTemplate = (props) => {
return (<span>{props.TaskName} [ {props.Progress}% ]</span>);
};
const templateLeft = LeftLabelTemplate;
const RightLabelTemplate = (props) => {
if (props.ganttProperties.resourceInfo) {
let resources = props.ganttProperties.resourceInfo;
let out = [];
for (let index = 0; index < resources.length; index++) {
let src =
'https://ej2.syncfusion.com/react/demos/src/gantt/images/' +
resources[index].resourceName + '.png';
let img = <img src={src} height='40px' />;
let span = <span style={{ marginLeft: '5px', marginRight:
'5px' }}>{resources[index].resourceName}</span>;
out.push(img, span);
}
return (<div>{out}</div>);
} else {
return <div></div>
}
};
const templateRight = RightLabelTemplate;
const labelSettings = {
leftLabel: templateLeft.bind(this),
rightLabel: templateRight.bind(this),
taskLabel: '${Progress}%'
};
const splitterSettings = {
columnIndex: 2
};
const resourceFields = {
id: 'resourceId',
name: 'resourceName',
};
const projectStartDate = new Date('03/24/2019');
const projectEndDate = new Date('04/30/2019');
return <GanttComponent dataSource={base64Data} rowHeight={60}
taskFields={taskFields} toolbar={toolbarOptions}
pdfQueryTaskbarInfo={pdfQueryTaskbarInfo} toolbarClick={toolbarClick}
allowPdfExport={true} ref={gantt => ganttChart = gantt}
splitterSettings={splitterSettings} labelSettings={labelSettings}
resourceFields={resourceFields} resources={editingResources}
projectStartDate={projectStartDate} projectEndDate={projectEndDate}
height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'></ColumnDirective>
<ColumnDirective field='TaskName'></ColumnDirective>
</ColumnsDirective>
<Inject services={[Toolbar, PdfExport, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective,
PdfExportProperties,ColumnDirective, pdfQueryTaskbarInfoEventArgs, Inject,
Toolbar, PdfExport, Selection } from '@syncfusion/ej2-react-gantt';
import { base64Data, editingResources } from './datasource';
import { ClickEventArgs } from '@syncfusion/ej2-navigations';
function App() {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
resourceInfo: 'resources'
};
const toolbarOptions = ['PdfExport'];
let ganttChart: any;
function toolbarClick(args : ClickEventArgs) {
if (args.item.text === 'Pdf export') {
let exportProperties: PdfExportProperties = {
enableFooter: false
};
ganttChart.pdfExport(exportProperties);
}
};
function pdfQueryTaskbarInfo(args: pdfQueryTaskbarInfoEventArgs) {
args.labelSettings.leftLabel.value =
args.data.ganttProperties.taskName + '[' +
args.data.ganttProperties.progress + ']';
if (args.data.ganttProperties.resourceNames) {
args.labelSettings.rightLabel.value =
args.data.ganttProperties.resourceNames;
args.labelSettings.rightLabel.image = [{
base64: (args as any).data.taskData.resourcesImage, width:
20, height: 20
}]
}
args.labelSettings.taskLabel.value =
args.data.ganttProperties.progress + '%'
}
const LeftLabelTemplate = (props : any) => {
return (<span>{props.TaskName} [ {props.Progress}% ]</span>);
};
const templateLeft: any = LeftLabelTemplate;
const RightLabelTemplate = (props : any) => {
if (props.ganttProperties.resourceInfo) {
let resources = props.ganttProperties.resourceInfo;
let out : any = [];
for (let index = 0; index < resources.length; index++) {
let src =
'https://ej2.syncfusion.com/react/demos/src/gantt/images/' +
resources[index].resourceName + '.png';
let img = <img src={src} height='40px' />;
let span = <span style={{ marginLeft: '5px', marginRight:
'5px' }}>{resources[index].resourceName}</span>;
out.push(img, span);
}
return (<div>{out}</div>);
} else {
return <div></div>
}
};
const templateRight: any = RightLabelTemplate;
const labelSettings: any = {
leftLabel: templateLeft.bind(this),
rightLabel: templateRight.bind(this),
taskLabel: '${Progress}%'
};
const splitterSettings: any = {
columnIndex: 2
};
const resourceFields: any = {
id: 'resourceId',
name: 'resourceName',
};
const projectStartDate = new Date('03/24/2019');
const projectEndDate = new Date('04/30/2019');
return <GanttComponent dataSource={base64Data} rowHeight={60}
taskFields={taskFields} pdfQueryTaskbarInfo={pdfQueryTaskbarInfo}
toolbar={toolbarOptions} toolbarClick={toolbarClick} allowPdfExport={true}
ref={gantt => ganttChart = gantt}
splitterSettings={splitterSettings} labelSettings={labelSettings}
resourceFields={resourceFields} resources={editingResources}
projectStartDate={projectStartDate} projectEndDate={projectEndDate}
height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'></ColumnDirective>
<ColumnDirective field='TaskName'></ColumnDirective>
</ColumnsDirective>
<Inject services={[Toolbar, PdfExport, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
AABEBIUH/2gAMAwEAAhEDEQA/AG2t2PafKP4qHFI3sLlRGR4bE4QlEIi4Yu1XqLJdBsq5UAU1spj
EKqoJQBIfEoZTD8QCJcxxTdhwp3JlI6RxCQ5yYQmGOVYjEVYbE8oPVoi8VFNMVRanEoInbjcUvIx
wAw27BTHjim7EfTuc6R1ciEhyawi0MbKw6IpQ2J5ReoxFmqCagpC6OBRRI4G4JeRSAJgv3B3ojj2
nysGKhvSNlC5UWkeJROLpQ+It2LtJ6syQQcqtlBFRbKUxypJiYBSDyMGUo/AOtP7GoFVcRtTZRkW
jGHiLcm8F3qKTvLi68Qd72wIoTMslm1MmmcgXAtigmAXsO1lSwYwJKqEwV0mLD8yw54TiTFLMNJF
XblWUHAMjpHK2MAJnC5xNZ2n2EgB2N37BdCqOpVQl+uku4fnuHPCceYpmhp4q0cpSg4FkRIhXJhB
Q42OBrNFOwEEO5e/cbIUnSAxqBSrEbTKUZ6oxh4hPOXGt1ikkS4uhEGm6MDqHyrK5dPPqEINgNco
qANrhskLWameB0/jWL2uPPWIuYaV6PLO68Jm5CB8SvCy58+qA62nYlreOqN/INmGiCT5cpetjBnm
EvcV00w2XUIAio0ndKem6L2Jq5GN2ykQEMixQEygaYBcN3KH5Y7PTxThLlL0cYMjQlliummJS6vA
FlHc7qz03WewxXI+s2TiABkRKIlTDTELjvBg/MDZ6eF+WIHT+C4vaHci4i5hqprczb1xabkI5w20
LNkyaQBo6lz3v5aQW8R2aYz1VOkrq9rP1Sfx3gX1P9rJvPof8PP8Ar92zDQxLHQ71NzbzJ+EHBku
AfV/X5Gefw968t8+Z7P6fZs4dUz9DvU3KXLf4QcGV4/8AV/X5HmTz968tz+X7P6/fs4dM9K+krq9
ox0t/yLjv1P8Aaz7t67/fw/t9uzTH/9k=' },
]
while (i < base64Array.length) {
const key = Object.keys(base64Array[i])[0];
const value = base64Array[i][key];
if (key === args.column.field) {
args.headerTemplate.image = [{
base64: value, width: 20, height: 20
}];
args.headerTemplate.value = args.column.field;
break;
}
i++;
}
}
const splitterSettings = {
columnIndex: 2
};
const resourceFields = {
id: 'resourceId',
name: 'resourceName',
};
const projectStartDate = new Date('03/24/2019');
const projectEndDate = new Date('04/30/2019');
return <GanttComponent dataSource={base64Data} rowHeight={60}
taskFields={taskFields} toolbar={toolbarOptions}
pdfColumnHeaderQueryCellInfo={pdfColumnHeaderQueryCellInfo}
toolbarClick={toolbarClick} allowPdfExport={true} ref={gantt => ganttChart =
gantt}
splitterSettings={splitterSettings} labelSettings={labelSettings}
resourceFields={resourceFields} resources={editingResources}
projectStartDate={projectStartDate} projectEndDate={projectEndDate}
height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskName'
headerText='TaskName' headerTemplate={() => {
return (<div><img className="image"
src="https://ej2.syncfusion.com/angular/demos/assets/gantt/images/Task
name.png" width="20" height="20" />
<b className='e-header'>Task
Name</b></div>);
}} ></ColumnDirective>
<ColumnDirective field='StartDate' headerText='Start
Date' headerTemplate={() => {
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, ColumnsDirective, ColumnDirective,
PdfQueryCellInfoEventArgs, pdfColumnHeaderQueryCellInfo, Inject, Toolbar,
PdfExport, Selection } from '@syncfusion/ej2-react-gantt';
import { base64Data, editingResources } from './datasource';
import { PdfColor } from '@syncfusion/ej2-pdf-export';
import { ClickEventArgs } from '@syncfusion/ej2-navigations';
function App() {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks',
resourceInfo: 'resources'
};
const toolbarOptions = ['PdfExport'];
let ganttChart: any;
function toolbarClick(args: ClickEventArgs) {
if (args.item.text === 'Pdf export') {
let exportProperties: PdfExportProperties = {
enableFooter: false
};
ganttChart.pdfExport(exportProperties);
}
};
let i: number = 0;
function pdfColumnHeaderQueryCellInfo(args:
pdfColumnHeaderQueryCellInfo) {
let base64Array: Object[] = [
{ 'TaskName':
'/9j/4AAQSkZJRgABAQIAHAAcAAD/4QBiRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAU
AAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAMAAAITAAMAAAABAAEAAAAAAAAAAAAcAAAAAQA
AABwAAAAB/9sAQwADAgICAgIDAgICAwMDAwQGBAQEBAQIBgYFBgkICgoJCAkJCgwPDAoLDgsJCQ0
RDQ4PEBAREAoMEhMSEBMPEBAQ/9sAQwEDAwMEAwQIBAQIEAsJCxAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/8AAEQgAIAAgAwERAAIRAQMRAf/EABgAAQE
BAQEAAAAAAAAAAAAAAAYIAAcF/8QALBAAAQQCAgEDAwIHAAAAAAAAAQIDBAUGBxESAAgTIRQVQRY
xFzhXdpa01f/EABQBAQAAAAAAAAAAAAAAAAAAAAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAM
BAAIRAxEAPwB7gessOlaiw2zpdS4Ld2cqngOyl2rLbHcqjpLiy6IzylL7/gp/J+RxwQQt68w6mew
u7XrfEKC+azXGuiqiO2r2ybqKnhD3stLVy2TyOg/cj5A5IXr4G8Cf9+aD0XT6K2Nb1GlsEgz4OJW
8mLKjY5DaeYdRDdUhxC0thSVJUAQoEEEAjwNW2XoFprGLb1E/QEGdBeRJiyoztK08w6hQUhxC0kF
KkqAIUCCCAR4CDD9sbV2RWSso19r3BrDGza2NfWWEnOH21T2Yst2MJKUs1ryAhwslSeHFfBHyRwS
HnW26tv12qpO5Ier8GtMdYoVZI2qJm01L0iCGPfC0IeqEcKLfyErKT+DwfjwFvqO/l62h/Zl3/ov
eB0TwJTe2FRYxX5RqrLrj065HUuZRdzXIOQ7GRHc6yLV+YlmVDcgPJS6044AQVHhTY/I58Ao3lmJ
UeibfRWBZH6bKCFbUL1K7PTtRpTrzjsQRlzJCWqxoPyFISkqWepUQOfj48Ctdj4j/ABA15lGB/cP
oP1JSzaj6v2vd+n+oYW17nTsnv1789ew5445H7+Ad+x+oX+qGu/8AA53/AGPA5drHb+D4rru/xSy
3nrPG86i5hkwnOXDjbTIkG9lrU4qCqY271W0R0BfJSFI5UvqQQKWW5cOT6NMhxTZO+9d5Fl72ByI
YjQrmM9LMo1oQll0iXIMuSH+3Z9BSlaiFBCeOSH//2Q==' },
{ 'StartDate':
'/9j/4AAQSkZJRgABAQIAHAAcAAD/4QBiRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAU
AAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAMAAAITAAMAAAABAAEAAAAAAAAAAAAcAAAAAQA
AABwAAAAB/9sAQwADAgICAgIDAgICAwMDAwQGBAQEBAQIBgYFBgkICgoJCAkJCgwPDAoLDgsJCQ0
RDQ4PEBAREAoMEhMSEBMPEBAQ/9sAQwEDAwMEAwQIBAQIEAsJCxAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/8AAEQgAIAAgAwERAAIRAQMRAf/EABcAAQE
BAQAAAAAAAAAAAAAAAAcABgX/xAAzEAAABAQDBwEGBwAAAAAAAAABAgMEBQYHEQgSEwAUFRYYITI
0IiQxMzVCN0NRVWaCg//EABUBAQEAAAAAAAAAAAAAAAAAAAAB/8QAGBEBAQEBAQAAAAAAAAAAAAA
AABEBIUH/2gAMAwEAAhEDEQA/AG2t2PafKP4qHFI3sLlRGR4bE4QlEIi4Yu1XqLJdBsq5UAU1spj
EKqoJQBIfEoZTD8QCJcxxTdhwp3JlI6RxCQ5yYQmGOVYjEVYbE8oPVoi8VFNMVRanEoInbjcUvIx
wAw27BTHjim7EfTuc6R1ciEhyawi0MbKw6IpQ2J5ReoxFmqCagpC6OBRRI4G4JeRSAJgv3B3ojj2
nysGKhvSNlC5UWkeJROLpQ+It2LtJ6syQQcqtlBFRbKUxypJiYBSDyMGUo/AOtP7GoFVcRtTZRkW
jGHiLcm8F3qKTvLi68Qd72wIoTMslm1MmmcgXAtigmAXsO1lSwYwJKqEwV0mLD8yw54TiTFLMNJF
XblWUHAMjpHK2MAJnC5xNZ2n2EgB2N37BdCqOpVQl+uku4fnuHPCceYpmhp4q0cpSg4FkRIhXJhB
Q42OBrNFOwEEO5e/cbIUnSAxqBSrEbTKUZ6oxh4hPOXGt1ikkS4uhEGm6MDqHyrK5dPPqEINgNco
qANrhskLWameB0/jWL2uPPWIuYaV6PLO68Jm5CB8SvCy58+qA62nYlreOqN/INmGiCT5cpetjBnm
EvcV00w2XUIAio0ndKem6L2Jq5GN2ykQEMixQEygaYBcN3KH5Y7PTxThLlL0cYMjQlliummJS6vA
FlHc7qz03WewxXI+s2TiABkRKIlTDTELjvBg/MDZ6eF+WIHT+C4vaHci4i5hqprczb1xabkI5w20
LNkyaQBo6lz3v5aQW8R2aYz1VOkrq9rP1Sfx3gX1P9rJvPof8PP8Ar92zDQxLHQ71NzbzJ+EHBku
AfV/X5Gefw968t8+Z7P6fZs4dUz9DvU3KXLf4QcGV4/8AV/X5HmTz968tz+X7P6/fs4dM9K+krq9
ox0t/yLjv1P8Aaz7t67/fw/t9uzTH/9k=' },
]
while (i < base64Array.length) {
const key = Object.keys(base64Array[i])[0];
const value = base64Array[i][key];
if (key === args.column.field) {
args.headerTemplate.image = [{
base64: value, width: 20, height: 20
}];
args.headerTemplate.value = args.column.field;
break;
}
i++;
}
}
const splitterSettings: any = {
columnIndex: 2
};
const resourceFields: any = {
id: 'resourceId',
name: 'resourceName',
};
const projectStartDate = new Date('03/24/2019');
const projectEndDate = new Date('04/30/2019');
return (
<div className='control-pane'>
<div className='control-section'>
<GanttComponent dataSource={base64Data} rowHeight={60}
taskFields={taskFields}
pdfColumnHeaderQueryCellInfo={pdfColumnHeaderQueryCellInfo}
toolbar={toolbarOptions} toolbarClick={toolbarClick} allowPdfExport={true}
ref={gantt => ganttChart = gantt}
splitterSettings={splitterSettings}
resourceFields={resourceFields} resources={editingResources}
projectStartDate={projectStartDate} projectEndDate={projectEndDate}
height='450px'>
<ColumnsDirective>
<ColumnDirective field='TaskName'
headerText='TaskName' headerTemplate={() => {
return (<div><img className="image"
src="https://ej2.syncfusion.com/angular/demos/assets/gantt/images/Task
name.png" width="20" height="20" />
<b className='e-header'>Task
Name</b></div>);
}} ></ColumnDirective>
<ColumnDirective field='StartDate' headerText='Start
Date' headerTemplate={() => {
return (<div><img className="image"
src="https://ej2.syncfusion.com/angular/demos/assets/gantt/images/Start
date.png" width="20" height="20" />
<b className='e-header'>Start
Date</b></div>);
}}></ColumnDirective>
</ColumnsDirective>
<Inject services={[Toolbar, PdfExport, Selection]} />
</GanttComponent>
</div>
</div>
)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Selection, ContextMenu, Sort, Resize,
EditSettingsModel } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
const editSettings: EditSettingsModel = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
return <GanttComponent dataSource={data} taskFields={taskFields}
editSettings={editSettings} allowSorting={true} allowResizing={true}
enableContextMenu={true} height = '450px'>
<Inject services={[Edit, ContextMenu, Selection, Sort, Resize]}
/>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
let ganttInstance;
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
const editSettings = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const contextMenuItems = ['AutoFitAll', 'AutoFit', 'TaskInformation',
'DeleteTask', 'Save', 'Cancel', 'SortAscending', 'SortDescending', 'Add',
'DeleteDependency', 'Convert',
{ text: 'Collapse the Row', target: '.e-content', id: 'collapserow'
},
{ text: 'Expand the Row', target: '.e-content', id: 'expandrow' },
{ text: 'Hide Column', target: '.e-gridheader', id: 'hidecols' }
];
function contextMenuClick (args) {
let record = args.rowData;
if (args.item.id === 'collapserow') {
ganttInstance.collapseByID(Number(record.ganttProperties.taskId));
}
if (args.item.id === 'expandrow') {
ganttInstance.expandByID(Number(record.ganttProperties.taskId));
}
if (args.item.id === 'hidecols') {
ganttInstance.hideColumn(args.column.headerText);
}
};
function contextMenuOpen (args) {
let record = args.rowData;
if (args.type !== 'Header') {
if (!record.hasChildRecords) {
args.hideItems.push('Collapse the Row');
args.hideItems.push('Expand the Row');
} else {
if(record.expanded){
args.hideItems.push("Expand the Row");
} else {
args.hideItems.push("Collapse the Row");
}
}
}
};
return <GanttComponent dataSource={data} taskFields={taskFields}
editSettings={editSettings} allowSorting={true} allowResizing={true}
enableContextMenu={true} contextMenuItems={contextMenuItems}
contextMenuClick={contextMenuClick} contextMenuOpen={contextMenuOpen}
ref={gantt => ganttInstance = gantt} height = '450px'>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Selection, ContextMenu, Sort, Resize,
EditSettingsModel, IGanttData } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
const editSettings: EditSettingsModel = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const contextMenuItems: any = ['AutoFitAll', 'AutoFit', 'TaskInformation',
'DeleteTask', 'Save', 'Cancel', 'SortAscending', 'SortDescending', 'Add',
'DeleteDependency', 'Convert',
{ text: 'Collapse the Row', target: '.e-content', id: 'collapserow'
},
{ text: 'Expand the Row', target: '.e-content', id: 'expandrow' },
{ text: 'Hide Column', target: '.e-gridheader', id: 'hidecols' }
];
function contextMenuClick (args: any) {
let record: IGanttData = args.rowData;
if (args.item.id === 'collapserow') {
ganttInstance.collapseByID(Number(record.ganttProperties.taskId));
}
if (args.item.id === 'expandrow') {
ganttInstance.expandByID(Number(record.ganttProperties.taskId));
}
if (args.item.id === 'hidecols') {
ganttInstance.hideColumn(args.column.headerText);
}
};
function contextMenuOpen (args: any) {
let record: IGanttData = args.rowData;
if (args.type !== 'Header') {
if (!record.hasChildRecords) {
args.hideItems.push('Collapse the Row');
args.hideItems.push('Expand the Row');
} else {
if(record.expanded){
args.hideItems.push("Expand the Row");
} else {
args.hideItems.push("Collapse the Row");
}
}
}
};
return <GanttComponent dataSource={data} taskFields={taskFields}
editSettings={editSettings} allowSorting={true} allowResizing={true}
enableContextMenu={true} contextMenuItems={contextMenuItems}
contextMenuClick={contextMenuClick} contextMenuOpen={contextMenuOpen}
ref={gantt => ganttInstance = gantt} height = '450px'>
<Inject services={[Edit, ContextMenu, Selection, Sort, Resize]}
/>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
You can show an specific item in context menu for header/content area in the Gantt control by defining
the target property.
Touch interaction
To perform long press action on a row, context menu is opened, and then tap a menu item to trigger its
action.
State persistence in React Gantt component
State persistence refers to the Gantt's state maintained in the browser's localStorage even if the
browser is refreshed or if you move to the next page within the browser. State persistence stores gantt’s
model object in the local storage when the enablePersistence is defined as true.
Get or set localStorage value
If the enablePersistence property is set to true, the gantt property value is saved in the
window.localStorage for reference. You can get/set the localStorage value by using the
getItem/setItem method in the window.localStorage.
`ts
//get the Gantt model.
let value: string = window.localStorage.getItem('ganttGantt'); //"ganttGantt" is component name +
component id.
let model: Object = JSON.parse(model);
`
`ts
//set the Gantt model.
window.localStorage.setItem('ganttGantt', JSON.stringify(model)); //"ganttGantt" is component name +
component id.
`
You can refer to our React Gantt feature tour page for its groundbreaking feature representations. You
can also explore our React Gantt example to knows how to present and manipulate data.
Prevent columns from persisting
When the enablePersistence property is set to true, the Gantt properties such as Filtering, Sorting , and
Columns will persist. You can use the addOnPersist method to prevent these Gantt properties from
persisting.
The following example demonstrates how to prevent Gantt columns from persisting. In the dataBound
event of the Gantt, you can override the addOnPersist method and remove the columns from the key
list given for persistence.
Note: When the enablePersistence property is set to true, the Gantt features such as column template,
column formatter, header text, and value accessor will not persist.
INDEX.JSX
let data = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
},
];
import { GanttComponent,ColumnsDirective,ColumnDirective } from
'@syncfusion/ej2-react-gantt';
import { Gantt} from '@syncfusion/ej2-react-gantt';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
function App (){
let ganttInstance;
function dataBound(){
let cloned = ganttInstance.addOnPersist;
ganttInstance.addOnPersist = function (key) {
key = key.filter((item) => item !== "columns");
return cloned.call(this, key);
};
}
function addColumn(){
let obj = { field: "Progress", headerText: 'Progress', width: 100 };
ganttInstance.columns.push(obj); //you can add the columns by using the
Gantt columns method
ganttInstance.treeGrid.refreshColumns();
}
function removeColumn(){
ganttInstance.columns.pop();
ganttInstance.treeGrid.refreshColumns();
}
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return( <div> <ButtonComponent onClick= { addColumn }>Add
Columns</ButtonComponent>
<ButtonComponent onClick= { removeColumn }>Remove
Columns</ButtonComponent><GanttComponent id="Gantt" dataSource={data}
enablePersistence={true} dataBound={dataBound} height={430}
taskFields={taskFields}
ref={gantt => ganttInstance = gantt}>
<ColumnsDirective>
<ColumnDirective field='TaskID' width='100'/>
<ColumnDirective field='TaskName' width='100'/>
<ColumnDirective field='StartDate' width='100'/>
<ColumnDirective field='Duration' width='100'/>
</ColumnsDirective>
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
},
];
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
INDEX.TSX
let data: Object[] = [
{
TaskID: 1,
TaskName: 'Project Initiation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 2, TaskName: 'Identify Site location', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 3, TaskName: 'Perform Soil test', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
{ TaskID: 4, TaskName: 'Soil test approval', StartDate: new
Date('04/02/2019'), Duration: 4, Progress: 50 },
]
},
{
TaskID: 5,
TaskName: 'Project Estimation',
StartDate: new Date('04/02/2019'),
EndDate: new Date('04/21/2019'),
subtasks: [
{ TaskID: 6, TaskName: 'Develop floor plan for estimation',
StartDate: new Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 7, TaskName: 'List materials', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 },
{ TaskID: 8, TaskName: 'Estimation approval', StartDate: new
Date('04/04/2019'), Duration: 3, Progress: 50 }
]
},
];
import { ColumnDirective, ColumnsDirective, GanttComponent } from
'@syncfusion/ej2-react-gantt';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { Gantt} from '@syncfusion/ej2-react-gantt';
import * as ReactDOM from 'react-dom';
import * as React from 'react';
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
| separator (role) | This attribute is added to the e-split-bar element, which represents the splitter
between the Grid table and Chart |
| dialog (role) | This attribute is added to the e-dialog element, which represents the pop-up dialog |
| toolbar (role) | This attribute is added to the e-gantt-toolbar element, which represents the toolbars
of Gantt |
| aria-label | It indicates the element's information<br> It is assigned to the Gantt UI elements such as
timeline cell, taskbar, left label, right label, dependency line, and event markers. |
| aria-selected | This attribute is assigned to the Gantt chart row, and it defaults to false. The value is
changed to true when the user selects a grid cell or task |
| aria-expanded | This attribute is assigned to the Gantt chart parent task row. The value is changed to
true when the user clicks a parent taskbar to expand. After the user clicked a parent taskbar to collapse,
the attribute value is changed to false |
| aria-grabbed | This attribute is assigned to the taskbars of Gantt when the user tries to achieve
taskbar editing |
Keyboard navigation
The Gantt component followed the keyboard interaction guideline, making it easy for people who use
assistive technologies (AT) and those who completely rely on keyboard navigation. The following
keyboard shortcuts are supported by the Gantt component.
| Press | To do this |
| --- | --- |
| Home | Selects the first row. |
| End | Selects the last row. |
| DownArrow | Moves the cell focus/row or cell selection downward. |
| UpArrow | Moves the cell focus/row or cell selection upward. |
| LeftArrow | Moves the cell focus/row or cell selection left side. |
| RightArrow | Moves the cell focus/row or cell selection right side. |
| Ctrl + Up Arrow | Collapses all tasks. |
| Ctrl + Down Arrow | Expands all tasks. |
| Ctrl + Shift + Up Arrow | Collapses the selected row. |
| Ctrl + Shift + Down Arrow | Expands the selected row. |
|Enter | Saves request. |
| Esc | Cancels request. |
| Insert | Adds a new row. |
| Ctrl + Insert | Opens addRowDialog. |
| Ctrl + F2 | Opens editRowDialog. |
taskBeforePredecessor_FS | You moved "{0}" to start before "{1}" finishes and the two tasks are linked.
As the result, the links cannot be honored. Select one action below to perform
taskAfterPredecessor_FS | You moved "{0}" away from "{1}" and the two tasks are linked. As the result,
the links cannot be honored. Select one action below to perform
taskBeforePredecessor_SS | You moved "{0}" to start before "{1}" starts and the two tasks are linked. As
the result, the links cannot be honored. Select one action below to perform
taskAfterPredecessor_SS | You moved "{0}" to start after "{1}" starts and the two tasks are linked. As the
result, the links cannot be honored. Select one action below to perform
taskBeforePredecessor_FF | You moved "{0}" to finish before "{1}" finishes and the two tasks are linked.
As the result, the links cannot be honored. Select one action below to perform
taskAfterPredecessor_FF | You moved "{0}" to finish after "{1}" finishes and the two tasks are linked. As
the result, the links cannot be honored. Select one action below to perform
taskBeforePredecessor_SF | You moved "{0}" away from "{1}" to starts and the two tasks are linked. As
the result, the links cannot be honored. Select one action below to perform
taskAfterPredecessor_SF | You moved "{0}" to finish after "{1}" starts and the two tasks are linked. As
the result, the links cannot be honored. Select one action below to perform
okText | Ok
confirmDelete | Are you sure you want to Delete Record?
from | From
to | To
taskLink | Task Link
lag | Lag
start | Start
finish | Finish
enterValue | Enter the value
taskInformation | Task Information
deleteTask | Delete Task
deleteDependency | Delete Dependency
convert | Convert
save | Save
above | Above
below | Below
child | Child
milestone | Milestone
toTask | To Task
toMilestone | To Milestone
});
function App () {
const taskFields= {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} locale='de-DE'
allowSelection={true} taskFields={taskFields} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import { L10n, setCulture } from '@syncfusion/ej2-base';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
setCulture('de-DE');
L10n.load({
'de-DE': {
'gantt': {
"id": "Ich würde",
"name": "Name",
"startDate": "Anfangsdatum",
"duration": "Dauer",
"progress": "Fortschritt",
}
}
});
function App () {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} locale='de-DE'
allowSelection={true} taskFields={taskFields} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
Internationalization
The Internationalization library is used to globalize number, date, and time values in gantt component.
INDEX.JSX
import { L10n, loadCldr, setCulture } from '@syncfusion/ej2-base';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
import * as cagregorian from './ca-gregorian.jsx';
import * as numbers from './numbers.jsx';
loadCldr(cagregorian, numbers);
setCulture('de-DE');
L10n.load({
'de-DE': {
'gantt': {
"id": "Ich würde",
"name": "Name",
"startDate": "Anfangsdatum",
"duration": "Dauer",
"progress": "Fortschritt",
}
}
});
function App() {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} locale='de-DE'
allowSelection={true} taskFields={taskFields} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import { L10n, loadCldr, setCulture } from '@syncfusion/ej2-base';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
import * as cagregorian from './ca-gregorian.tsx';
import * as numbers from './numbers.tsx';
loadCldr(cagregorian, numbers);
setCulture('de-DE');
L10n.load({
'de-DE': {
'gantt': {
"id": "Ich würde",
"name": "Name",
"startDate": "Anfangsdatum",
"duration": "Dauer",
"progress": "Fortschritt",
}
}
});
function App() {
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} locale='de-DE'
allowSelection={true} taskFields={taskFields} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
",بداية" "start":
",إنهاء" "finish":
",أدخل القيمة" "enterValue":
قمت بنقل {'}' 0للبدء قبل انتهاء" "taskBeforePredecessor_FS":
ً '}'{1
ويتم ربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",واحدا أدناه للقيام به
قمت بنقل {'}' 0بعيدا عن {'}' 1ويتم" "taskAfterPredecessor_FS":
ً واحدا أدناه
ربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",للقيام به
قمت بنقل {'}' 0للبدء قبل أن يبدأ" "taskBeforePredecessor_SS":
ً واحدا '}'{1
وربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",أدناه للقيام به
'قمت بنقل {'}' 0للبدء بعد بدء {'"taskAfterPredecessor_SS": "}1
ً واحدا أدناه
وربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",للقيام به
قمت بنقل {'}' 0لإلنهاء قبل انتهاء" "taskBeforePredecessor_FF":
ً '}'{1
ويتم ربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",واحدا أدناه للقيام به
قمت بنقل {'' }0لإلنهاء بعد انتهاء" "taskAfterPredecessor_FF":
ً '}'{1
ويتم ربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",واحدا أدناه للقيام به
قمت بنقل {'}' 0بعيدا عن {'}' 1لبدء" "taskBeforePredecessor_SF":
التشغيل وترتبط المهمتان .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
ً
",واحدا أدناه للقيام به
'قمت بنقل {'}' 0لإلنهاء بعد بدء {'"taskAfterPredecessor_SF": "}1
ً واحدا أدناه
وربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",للقيام به
",معلومات المهمة" "taskInformation":
",حذف المهمة" "deleteTask":
",حذف التبعية" "deleteDependency":
",تحويل" "convert":
",حفظ" "save":
",في االعلى" "above":
",أدناه" "below":
",طفل" "child":
",معلما" "milestone":
",لمهمة" "toTask":
",إلى معلم" "toMilestone":
",عالمات الحدث" "eventMarkers":
",تسمية المهمة اليسرى" "leftTaskLabel":
",تسمية المهمة الصحيحة" "rightTaskLabel":
",خلية الجدول الزمني" "timelineCell":
هل أنت متأكد أنك تريد إزالة رابط" "confirmPredecessorDelete":
",التبعية؟
",وحدة" "unit":
",عمل" "work":
",نوع المهمة" "taskType":
",مهمة غير محددة" "unassignedTask":
",مجموعة" "group":
",مسافة بادئة" "indent":
",عفا عليها الزمن" "outdent":
",شرائح" "segments":
",تقسيم المهمة" "splitTask":
",مهمة الدمج" "mergeTask":
",اليسار" "left":
"حق" "right":
}
}
});
function App () {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} locale='ar-AE'
allowSelection={true} taskFields={taskFields} enableRtl= {true} height =
'450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import { L10n, loadCldr, setCulture } from '@syncfusion/ej2-base';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
setCulture('ar-AE');
L10n.load({
'ar-AE': {
"gantt": {
"emptyRecord": ""ال سجالت لعرضها,
"id": ""هوية شخصية,
"name": ""اسم,
"startDate": ""تاريخ البدء,
"endDate": ""تاريخ االنتهاء,
"duration": ""المدة الزمنية,
"progress": ""تقدم,
"dependency": ""االعتماد,
"notes": ""مالحظات,
"baselineStartDate": ""تاريخ البدء األساسي,
"baselineEndDate": ""تاريخ نهاية خط األساس,
"taskMode": ""وضع المهام,
"changeScheduleMode": ""تغيير وضع الجدول,
"subTasksStartDate": ""تاريخ بدء المهام الفرعية,
"subTasksEndDate": ""تاريخ انتهاء المهام الفرعية,
"scheduleStartDate": ""جدولة تاريخ البدء,
"scheduleEndDate": ""تاريخ انتهاء الجدول الزمني,
"auto": ""تلقاءي,
"manual": ""كتيب,
"type": ""اكتب,
"offset": ""عوض,
"resourceName": ""مصادر,
"resourceID": ""معرف المورد,
"day": ""يوم,
"hour": ""ساعة,
"minute": ""دقيقة,
"days": ""أيام,
",ساعات" "hours":
",الدقائق" "minutes":
",جنرال لواء" "generalTab":
",أعمدة مخصصة" "customTab":
",اكتب مالحظات" "writeNotes":
",مهمة جديدة" "addDialogTitle":
",معلومات المهمة" "editDialogTitle":
",حفظ" "saveButton":
",إضافة" "add":
",تعديل" "edit":
",تحديث" "update":
",حذف" "delete":
",إلغاء" "cancel":
",بحث" "search":
",مهمة " "task":
",مهام " "tasks":
",تكبير" "zoomIn":
",تصغير" "zoomOut":
",تكبير لتناسب" "zoomToFit":
",اكسل التصدير" "excelExport":
CSV",تصدير" "csvExport":
",توسيع الكل" "expandAll":
",انهيار جميع" "collapseAll":
",الجدول الزمني التالي" "nextTimeSpan":
",الجدول الزمني السابق" "prevTimeSpan":
",حسنا" "okText":
",هل أنت متأكد أنك تريد حذف السجل؟" "confirmDelete":
",من عند" "from":
",إلى" "to":
",رابط المهمة" "taskLink":
",بطئ" "lag":
",بداية" "start":
",إنهاء" "finish":
",أدخل القيمة" "enterValue":
قمت بنقل {'}' 0للبدء قبل انتهاء" "taskBeforePredecessor_FS":
ً '}'{1
ويتم ربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",واحدا أدناه للقيام به
قمت بنقل {'}' 0بعيدا عن {'}' 1ويتم" "taskAfterPredecessor_FS":
ً واحدا أدناه
ربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",للقيام به
قمت بنقل {'}' 0للبدء قبل أن يبدأ" "taskBeforePredecessor_SS":
ً واحدا '}'{1
وربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",أدناه للقيام به
'قمت بنقل {'}' 0للبدء بعد بدء {'"taskAfterPredecessor_SS": "}1
ً واحدا أدناه
وربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",للقيام به
قمت بنقل {'}' 0لإلنهاء قبل انتهاء" "taskBeforePredecessor_FF":
ً '}'{1
ويتم ربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",واحدا أدناه للقيام به
قمت بنقل {'}' 0لإلنهاء بعد انتهاء" "taskAfterPredecessor_FF":
ً '}'{1
ويتم ربط المهمتين .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
",واحدا أدناه للقيام به
قمت بنقل {'}' 0بعيدا عن {'}' 1لبدء" "taskBeforePredecessor_SF":
التشغيل وترتبط المهمتان .ونتيجة لذلك ،ال يمكن احترام الروابط .حدد إجراء
ً
",واحدا أدناه للقيام به
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
See Also
• Internationalization
• Localization
Grid Content|e-gridcontent|This class is added at root of body content. This is to override background
color of the body.
||e-table|This class is added to table of content. This CSS class makes table width as 100 %.
||e=row|This class is added to rows of gantt chart.
||e-altrow|This class is added to alternate rows of gantt chart. This is to override alternate row color of
the gantt chart.
||e-rowcell|This class is added to all cells in the gantt chart. This is to override cells appearance and
styling.
Chart Content|e-gantt-chart|This class is added to the chart side of the gantt chart.
||e-chart-row|This class is added to rows of gantt chart.
Timeline|e-timeline-header-container|This class is added to timeline of the gantt chart.
||e-header-cell-label|This class is added to the header cell of the timeline.
||e-weekend-header-cell|This class is added to the weekend cells.
Taskbar|e-taskbar-main-container|This class is added to taskbar of the gantt chart.
||e-gantt-parent-taskbar|This class is added to the parent task bar of the gantt chart.
||e-gantt-milestone|This class is added to the milestone tasks of the gantt chart.
||e-gantt-unscheduled-taskbar|This class is added to the unscheduled tasks.
||e-gantt-manualparenttaskbar|This class is added to the manual scheduled parent taskbar.
||e-gantt-child-manualtaskbar|This class is added to the manual scheduled child taskbar.
||e-gantt-unscheduled-manualtask|This class is added to the manual unscheduled tasks.
Splitter|e-split-bar|This class is added to the gantt chart splitter.
||e-resize-handler|This class is added to the resize handler of the gantt chart splitter.
||e-arrow-left|This class is added to the left arrow of the resize handler.
||e-arrow=right|This class is added to the right arrow of the resize handler.
Connector Lines|e-line|This class is added to the connector lines.
||e-connector-line-right-arrow|This class is added to the right arrow of the connector line.
||e-connector-line-left-arrow|This class is added to the left arrow of the connector line.
Labels|e-task-label|This class is added to the task labels.
||e-right-label-container|This class is added to the right label.
||e-left-label-container|This class is added to the left label.
Event Markers|e-event-markers|This class is added to the event markers.
Baseline|e-baseline-bar|This class is added to the baseline.
||e-baseline-gantt-milestone-container|This class is added to the baseline of milestone tasks.
Tooltip|e-gantt-tooltip|This class is added to the tooltip.
Grid lines
In the Gantt component, you can show or hide the grid lines in the TreeGrid side and chart side by using
the gridLines property.
The following options are available in the Gantt component for rendering the grid lines:
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import {data} from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
return <GanttComponent dataSource={data} gridLines='Both'
taskFields={taskFields} height = '450px'>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
},
bottomTier: {
unit: 'Hour',
format: 'hh:mm a'
}
};
let dayWorkingTime = [{ from: 0, to: 24 }];
return <GanttComponent dataSource={timezoneData} taskFields={taskFields}
timelineSettings={timelineSettings} allowSelection={true}
timezone='UTC' height='450px' dateFormat='hh:mm a'
dayWorkingTime={dayWorkingTime} durationUnit='Hour'
includeWeekend={true}>
<Inject services={[Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject,Edit, Selection } from '@syncfusion/ej2-
react-gantt';
function App(){
const timezoneData: any = [
{ taskID: 1, taskName: 'Project Schedule', startDate: new
Date('02/04/2019 08:00'), endDate: new Date('03/10/2019')},
{ taskID: 2, taskName: 'Planning', startDate: new Date('02/04/2019
08:00'), endDate: new Date('02/10/2019'), parentID: 1},
{ taskID: 3, taskName: 'Plan timeline', startDate: new Date('02/04/2019
08:00'), endDate: new Date('02/10/2019'), duration: 6, progress: '60',
parentID: 2 },
{ taskID: 4, taskName: 'Plan budget', startDate: new Date('02/04/2019
08:00'), endDate: new Date('02/10/2019'), duration: 6, progress: '90',
parentID: 2 },
{ taskID: 5, taskName: 'Allocate resources', startDate: new
Date('02/04/2019 08:00'), endDate: new Date('02/10/2019'), duration: 6,
progress: '75', parentID: 2 },
{ taskID: 6, taskName: 'Planning complete', startDate: new
Date('02/06/2019 08:00'), endDate: new Date('02/10/2019'), duration: 0,
predecessor: '3FS,4FS,5FS', parentID: 2 },
{ taskID: 7, taskName: 'Design', startDate: new Date('02/13/2019
08:00'), endDate: new Date('02/17/2019 08:00'), parentID: 1, },
{ taskID: 8, taskName: 'Software Specification', startDate: new
Date('02/13/2019 08:00'), endDate: new Date('02/15/2019'), duration: 3,
progress: '60', predecessor: '6FS', parentID: 7, },
{ taskID: 9, taskName: 'Develop prototype', startDate: new
Date('02/13/2019 08:00'), endDate: new Date('02/15/2019'), duration: 3,
progress: '100', predecessor: '6FS', parentID: 7, },
{ taskID: 10, taskName: 'Get approval from customer', startDate: new
Date('02/16/2019 08:00'), endDate: new Date('02/17/2019 08:00'), duration:
2, progress: '100', predecessor: '9FS', parentID: 7 },
{ taskID: 11, taskName: 'Design complete', startDate: new
Date('02/17/2019 08:00'), endDate: new Date('02/17/2019 08:00'), duration:
0, predecessor: '10FS', parentID: 7 }
];
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
parentID: 2
},
{
taskID: 5,
taskName: 'Allocate resources',
startDate: new Date('02/04/2019 08:00'),
endDate: new Date('02/10/2019'),
duration: 6,
progress: '75',
parentID: 2
},
{
taskID: 6,
taskName: 'Planning complete',
startDate: new Date('02/06/2019 08:00'),
endDate: new Date('02/10/2019'),
duration: 0,
predecessor: '3FS,4FS,5FS',
parentID: 2
},
{
taskID: 7,
taskName: 'Design',
startDate: new Date('02/13/2019 08:00'),
endDate: new Date('02/17/2019 08:00'),
parentID: 1
},
{
taskID: 8,
taskName: 'Software Specification',
startDate: new Date('02/13/2019 08:00'),
endDate: new Date('02/15/2019'),
duration: 3,
progress: '60',
predecessor: '6FS',
parentID: 7
},
{
taskID: 9,
taskName: 'Develop prototype',
startDate: new Date('02/13/2019 08:00'),
endDate: new Date('02/15/2019'),
duration: 3,
progress: '100',
predecessor: '6FS',
parentID: 7
},
{
taskID: 10,
taskName: 'Get approval from customer',
startDate: new Date('02/16/2019 08:00'),
endDate: new Date('02/17/2019 08:00'),
duration: 2,
progress: '100',
predecessor: '9FS',
parentID: 7
},
{
taskID: 11,
taskName: 'Design complete',
startDate: new Date('02/17/2019 08:00'),
endDate: new Date('02/17/2019 08:00'),
duration: 0,
predecessor: '10FS',
parentID: 7
}];
const taskFields = {
id: 'taskID',
name: 'taskName',
startDate: 'startDate',
duration: 'duration',
progress: 'progress',
dependency: 'predecessor',
parentID: 'parentID'
};
const editSettings = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
allowTaskbarEditing: true,
showDeleteConfirmDialog: true
};
const timelineSettings= {
timelineUnitSize: 65,
topTier: {
unit: 'Day',
format: 'MMM dd, yyyy'
},
bottomTier: {
unit: 'Hour',
format: 'hh:mm a'
}
};
function actionComplete(args) {
if(args.action == "TaskbarEditing") {
console.log(args.data.ganttProperties.endDate);
}
}
let dayWorkingTime = [{ from: 0, to: 24 }];
return <GanttComponent dataSource={timezoneData}
taskFields={taskFields} editSettings={editSettings} allowSelection={true}
durationUnit='Hour' actionComplete={actionComplete} height = '450px'
includeWeekend={true} dayWorkingTime={dayWorkingTime}
timelineSettings={timelineSettings} >
<Inject services={[Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
};
const timelineSettings: any = {
timelineUnitSize: 65,
topTier: {
unit: 'Day',
format: 'MMM dd, yyyy'
},
bottomTier: {
unit: 'Hour',
format: 'hh:mm a'
}
};
function actionComplete(args: any) {
if(args.action == "TaskbarEditing") {
console.log(args.data.ganttProperties.endDate);
}
}
let dayWorkingTime: any = [{ from: 0, to: 24 }];
return <GanttComponent dataSource={timezoneData}
taskFields={taskFields} editSettings={editSettings} allowSelection={true}
durationUnit='Hour' actionComplete={actionComplete} height = '450px'
includeWeekend={true} dayWorkingTime={dayWorkingTime}
timelineSettings={timelineSettings} >
<Inject services={[Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
Timezone methods
offset
This method is used to calculate the difference between passed UTC date and timezone.
| Parameters | Type | Description |
|------------|------|-------------|
| Date | Date | UTC time as date object.|
| Timezone | String | Timezone.|
Returns number
`ts
// Assume your local timezone as IST/UTC+05:30
let timezone: Timezone = new Timezone();
let date: Date = new Date(2018,11,5,15,25,11);
let timeZoneOffset: number = timezone.offset(date,"Europe/Paris");
console.log(timeZoneOffset); //-60
`
convert
This method is used to convert the passed date from one timezone to another timezone.
| Parameters | Type | Description |
|------------|------|-------------|
| Date | Date | UTC time as date object.|
| fromOffset | number/string | Timezone from which date need to be converted.|
| toOffset | number/string | Timezone to which date need to be converted.|
Returns Date
`ts
// Assume your local timezone as IST/UTC+05:30
let timezone: Timezone = new Timezone();
let date: Date = new Date(2018,11,5,15,25,11);
editOptions = {
allowEditing: true,
allowAdding: true
};
editHandler() {
this.ganttInstance.editModule.dialogModule.openEditDialog();
}
addHandler() {
this.ganttInstance.editModule.dialogModule.openAddDialog();
}
render() {
return (<div>
<ButtonComponent onClick={this.addHandler.bind(this)}>Open Add
Dialog</ButtonComponent>
<ButtonComponent onClick={this.editHandler.bind(this)}>Open Edit
Dialog</ButtonComponent>
<GanttComponent dataSource={data} ref={gantt => this.ganttInstance =
gantt} taskFields={this.taskFields} allowSelection={true}
editSettings={this.editOptions} height='450px'>
<Inject services={[Edit, Selection]}/>
</GanttComponent></div>);
}
}
;
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent, Inject, Edit, EditSettingsModel, Selection } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
class App extends React.Component<{}, {}>{
public taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
public ganttInstance:any;
public editOptions: EditSettingsModel = {
allowEditing: true,
allowAdding:true
};
public editHandler(){
this.ganttInstance.editModule.dialogModule.openEditDialog();
}
public addHandler(){
this.ganttInstance.editModule.dialogModule.openAddDialog();
}
render() {
return (<div>
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
NOTE: We should select any one of the row in Gantt to open the edit dialog.
return (<div>
<ButtonComponent onClick= { clickHandler}>Update
ScheduleDates</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
height = '450px' ref={gantt => ganttInstance = gantt}>
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { GanttComponent } from '@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
function clickHandler(){
ganttInstance.updateProjectDates(new Date('01/10/2019'),new
Date('06/20/2019'),true);
}
return (<div>
<ButtonComponent onClick= { clickHandler}>Update
ScheduleDates</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
height = '450px' ref={gantt => ganttInstance = gantt}>
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
let copiedRecord;
let gantt;
function contextMenuClick(args) {
if (args.item.id === 'copy') {
copiedRecord = args.rowData;
copiedRecord.taskData.TaskID = gantt.currentViewData.length
+ 1;
}
if (args.item.id === 'paste') {
gantt.addRecord(copiedRecord.taskData,'Below',args.rowData.index);
if(copiedRecord.hasChildRecords) {
addChildRecords(copiedRecord, args.rowData.index + 1);
}
copiedRecord = undefined;
}
};
function contextMenuOpen(args ) {
if (args.type !== 'Header') {
if (copiedRecord) {
args.hideItems.push('Copy');
} else {
args.hideItems.push('Paste');
}
}
};
function addChildRecords(record, index) {
for(var i=0; i<record.childRecords.length; i++) {
var childRecord = record.childRecords[i];
childRecord.taskData.TaskID = gantt.currentViewData.length
+ 1;
gantt.addRecord(childRecord.taskData,'Below',index);
if(childRecord.hasChildRecords) {
addChildRecords(childRecord, index + (i+1));
}
}
};
return <GanttComponent dataSource={data} taskFields={taskFields}
editSettings={editSettings} enableContextMenu={true}
contextMenuItems={contextMenuItems} contextMenuClick={contextMenuClick}
contextMenuOpen={contextMenuOpen} ref={gantt => gantt = gantt}
height='450px'>
<Inject services={[Edit, ContextMenu, Selection]}/>
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Selection, ContextMenu } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App () {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
const editSettings = {
allowAdding: true,
allowEditing: true,
allowDeleting: true
};
const contextMenuItems = [{ text: 'Copy', target: '.e-content', id:
'copy' },
{ text: 'Paste', target: '.e-content', id: 'paste' }
];
function contextMenuClick(args:any) {
if (args.item.id === 'copy') {
copiedRecord = args.rowData;
copiedRecord.taskData.TaskID = gantt.currentViewData.length + 1;
}
if (args.item.id === 'paste') {
gantt.addRecord(copiedRecord.taskData,'Below',args.rowData.index);
if(copiedRecord.hasChildRecords) {
addChildRecords(copiedRecord, args.rowData.index + 1);
}
copiedRecord = undefined;
}
};
function contextMenuOpen(args:any ) {
if (args.type !== 'Header') {
if (copiedRecord) {
args.hideItems.push('Copy');
} else {
args.hideItems.push('Paste');
}
}
};
function addChildRecords(record: any, index: any) {
for(var i=0; i<record.childRecords.length; i++) {
var childRecord = record.childRecords[i];
childRecord.taskData.TaskID = gantt.currentViewData.length +
1;
gantt.addRecord(childRecord.taskData,'Below',index);
if(childRecord.hasChildRecords) {
addChildRecords(childRecord, index + (i+1));
}
}
};
return <GanttComponent dataSource={data} taskFields={taskFields}
editSettings={editSettings} enableContextMenu={true}
enableContextMenu={true} contextMenuItems={contextMenuItems}
contextMenuClick={contextMenuClick} contextMenuOpen={contextMenuOpen}
ref={gantt => gantt = gantt} height='450px'>
<Inject services={[Edit, ContextMenu, Selection]}/>
</GanttComponent>;
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
public dataSource: DataManager = new DataManager({
url: 'https://localhost:44379/Home/UrlDatasource',
adaptor: new UrlAdaptor,
crossDomain: true,
batchUrl: 'https://localhost:44379/Home/BatchUpdate'
});
}
rowDrop(args) {
let record = this.flatData[args.fromIndex][this.taskFields.id];
let record2 = this.flatData[args.dropIndex][this.taskFields.id];
let data: IGanttData = args.data[0];
let uri = 'https://localhost:44379/Home/RowDropMethod';
let dragdropdata = {
record: data[0].taskData,
position: args.dropIndex,
dragidMapping: record,
dropidMapping: record2
};
let ajax = new Ajax(
{
url: uri,
type: 'POST',
contentType: "application/json",
data: JSON.stringify(dragdropdata),
});
ajax.send();
};
render() {
break;
}
}
}
}
DataList.Remove(DataList.Where(ds => ds.taskID == value.dragidMapping).FirstOrDefault());
var j = 0;
for (; j < DataList.Count; j++)
{
if (DataList[j].taskID == value.dropidMapping)
{
value.record.parentID = DataList[j].parentID;
break;
}
}
data.Value = value.record;
if (value.position == "bottomSegment")
{
this.Insert(data, value.dropidMapping);
}
else if (value.position == "topSegment")
{
this.InsertAtTop(data, value.dropidMapping);
}
}
else if (value.position == "middleSegment")
{
DataList.Remove(DataList.Where(ds => ds.taskID == value.dragidMapping).FirstOrDefault());
value.record.parentID = value.dropidMapping;
FindDropdata(value.dropidMapping);
data.Value = value.record;
this.Insert(data, value.dropidMapping);
}
copyRecord = false;
return Json(new { updatedRecords = value.record });
}
`
Custom field in React Gantt component
Generally in Gantt, Custom fields are displayed in the Custom Tab of the Add/Edit dialogs. However,
they can be included in the General Tab of Add/Edit Dialog Box using actionBegin and actionComplete
events. These events are used to append the custom field to the dialog box. The following code snippets
demonstrate the solution.
INDEX.JSX
import { GanttComponent, Inject, Edit, Selection, ColumnsDirective,
ColumnDirective, AddDialogFieldsDirective, EditDialogFieldsDirective,
EditDialogFieldDirective, AddDialogFieldDirective, Toolbar } from
'@syncfusion/ej2-react-gantt';
import { CheckBox } from "@syncfusion/ej2-buttons";
import { TextBox, NumericTextBox, MaskedTextBox } from "@syncfusion/ej2-
inputs";
import { DatePicker, DateTimePicker } from "@syncfusion/ej2-calendars";
import { DropDownList } from "@syncfusion/ej2-dropdowns";
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App () {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
mode: "Dialog"
};
const toolbarOptions = ['Add', 'Edit', 'Delete', 'Cancel', 'Update',
'ExpandAll', 'CollapseAll', 'Search'];
let divElement;
let ganttInstance;
const inputs = {
booleanedit: CheckBox,
dropdownedit: DropDownList,
datepickeredit: DatePicker,
datetimepickeredit: DateTimePicker,
maskededit: MaskedTextBox,
numericedit: NumericTextBox,
stringedit: TextBox
};
function actionBegin(args) {
if (args.requestType === "beforeOpenEditDialog" || args.requestType
=== "beforeOpenAddDialog" ) {
var column = ganttInstance.columnByField["CustomField"];
divElement = ganttInstance.createElement("div", {
className: "e-edit-form-column"
});
var inputElement;
inputElement = ganttInstance.createElement("input", {
attrs: {
type: "text",
id: ganttInstance.controlId + "" + column.field,
name: column.field,
title: column.field
}
});
divElement.appendChild(inputElement);
var input = {
enabled: true,
floatLabelType: "Auto",
placeholder: "CustomField",
value: args.rowData.CustomField
};
var inputObj = new inputs[column.editType](input);
inputObj.appendTo(inputElement);
}
};
function actionComplete(args) {
if (args.requestType === "openEditDialog" || args.requestType ===
"openAddDialog") {
var generalTab = document.getElementById(
ganttInstance.controlId + "GeneralTabContainer"
);
generalTab.appendChild(divElement);
}
};
return <GanttComponent dataSource={data} taskFields={taskFields}
allowSelection={true} editSettings={editOptions}
toolbar={toolbarOptions} actionBegin={actionBegin}
actionComplete={actionComplete} ref={gantt => ganttInstance = gantt}
height='400px'>
<ColumnsDirective>
<ColumnDirective field='TaskID'
width='150'></ColumnDirective>
<ColumnDirective field='TaskName'
width='250'></ColumnDirective>
<ColumnDirective field='StartDate'
width='250'></ColumnDirective>
<ColumnDirective field='EndDate'
width='250'></ColumnDirective>
<ColumnDirective field='Duration'
width='250'></ColumnDirective>
<ColumnDirective field='Progress'
width='250'></ColumnDirective>
<ColumnDirective field='CustomField'
width='250'></ColumnDirective>
</ColumnsDirective>
<AddDialogFieldsDirective>
<AddDialogFieldDirective type='General'
headerText='General'></AddDialogFieldDirective>
<AddDialogFieldDirective
type='Dependency'></AddDialogFieldDirective>
<AddDialogFieldDirective
type='Resources'></AddDialogFieldDirective>
<AddDialogFieldDirective type='Notes'></AddDialogFieldDirective>
</AddDialogFieldsDirective>
<EditDialogFieldsDirective>
<EditDialogFieldDirective type='General'
headerText='General'></EditDialogFieldDirective>
<EditDialogFieldDirective
type='Dependency'></EditDialogFieldDirective>
<EditDialogFieldDirective
type='Resources'></EditDialogFieldDirective>
<EditDialogFieldDirective
type='Notes'></EditDialogFieldDirective>
</EditDialogFieldsDirective>
<Inject services={[Edit, Selection, Toolbar]}/>
</GanttComponent>;
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import { GanttComponent, Inject, Edit, Selection, ColumnsDirective,
ColumnDirective, AddDialogFieldsDirective, EditDialogFieldsDirective,
EditDialogFieldDirective, AddDialogFieldDirective, Toolbar } from
'@syncfusion/ej2-react-gantt';
import { CheckBox } from "@syncfusion/ej2-buttons";
import { TextBox, NumericTextBox, MaskedTextBox } from "@syncfusion/ej2-
inputs";
import { DatePicker, DateTimePicker } from "@syncfusion/ej2-calendars";
import { DropDownList } from "@syncfusion/ej2-dropdowns";
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { data } from './datasource';
function App () {
const taskFields = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
const editOptions = {
allowAdding: true,
allowEditing: true,
allowDeleting: true,
mode: "Dialog"
};
<ColumnDirective field='TaskID'
width='150'></ColumnDirective>
<ColumnDirective field='TaskName'
width='250'></ColumnDirective>
<ColumnDirective field='StartDate'
width='250'></ColumnDirective>
<ColumnDirective field='EndDate'
width='250'></ColumnDirective>
<ColumnDirective field='Duration'
width='250'></ColumnDirective>
<ColumnDirective field='Progress'
width='250'></ColumnDirective>
<ColumnDirective field='CustomField'
width='250'></ColumnDirective>
</ColumnsDirective>
<AddDialogFieldsDirective>
<AddDialogFieldDirective type='General'
headerText='General'></AddDialogFieldDirective>
<AddDialogFieldDirective
type='Dependency'></AddDialogFieldDirective>
<AddDialogFieldDirective
type='Resources'></AddDialogFieldDirective>
<AddDialogFieldDirective type='Notes'></AddDialogFieldDirective>
</AddDialogFieldsDirective>
<EditDialogFieldsDirective>
<EditDialogFieldDirective type='General'
headerText='General'></EditDialogFieldDirective>
<EditDialogFieldDirective
type='Dependency'></EditDialogFieldDirective>
<EditDialogFieldDirective
type='Resources'></EditDialogFieldDirective>
<EditDialogFieldDirective
type='Notes'></EditDialogFieldDirective>
</EditDialogFieldsDirective>
<Inject services={[Edit, Selection, Toolbar]}/>
</GanttComponent>;
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Toolbar, Edit, Selection, ToolbarItem }from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App (){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
const editSettings: any = {
allowEditing: true,
allowTaskbarEditing: true
};
const toolbarOptions: ToolbarItem[] = ['Edit','ZoomToFit'];
function actionComplete(args) {
if ((args.action === "CellEditing" || args.action === "DialogEditing")
&& args.requestType === "save") {
ganttInstance.dataSource = data;
ganttInstance.fitToProject();
}
};
function taskbarEdited(args) {
if (args) {
ganttInstance.dataSource = data;
ganttInstance.fitToProject();
}
};
return <GanttComponent dataSource={data} taskFields={taskFields}
toolbar={toolbarOptions} editSettings={editSettings}
actionComplete={actionComplete} taskbarEdited={taskbarEdited} height =
'450px' ref={gantt => ganttInstance = gantt}>
<Inject services={[Toolbar, Edit, Selection]} />
</GanttComponent>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Toolbar, ToolbarItem }from
'@syncfusion/ej2-react-gantt';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { data, changeData } from './datasource';
function App(){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
child: 'subtasks'
};
const toolbarOptions: ToolbarItem[] = ['ZoomToFit'];
function clickHandler() {
ganttInstance.dataSource = changeData;
};
function dataBound(args) {
ganttInstance.fitToProject();
};
return (<div>
<ButtonComponent onClick= { clickHandler}>Change
Data</ButtonComponent>
<GanttComponent dataSource={data} taskFields={taskFields}
dataBound={dataBound}
toolbar={toolbarOptions} height = '450px' ref={gantt =>
ganttInstance = gantt}>
<Inject services={[Toolbar]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, Selection, ToolbarItem }from
'@syncfusion/ej2-react-gantt';
import { DragAndDropEventArgs } from '@syncfusion/ej2-navigations';
import { TreeViewComponent } from '@syncfusion/ej2-react-navigations';
import { closest,addClass } from '@syncfusion/ej2-base';
import { editingData, editingResources } from './datasource';
function App (){
let ganttInstance: any;
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
dependency: 'Predecessor',
resourceInfo: 'resources',
child: 'subtasks'
};
const resourceFields = {
id: 'resourceId',
name: 'resourceName'
};
const editSettings = {
allowEditing: true
};
const labelSettings = {
rightLabel: 'resources'
};
const fields = { dataSource: editingResources, id: 'resourceId', text:
'resourceName' };
const allowDragAndDrop = true;
function nodeDragStop(args: DragAndDropEventArgs): void {
let chartEle: any = closest(args.target, '.e-chart-row');
let gridEle: any = closest(args.target, '.e-row');
if(gridEle){
var index = ganttInstance.treeGrid.getRows().indexOf(gridEle);
ganttInstance.selectRow(index);
}
if(chartEle){
var index = chartEle.ariaRowIndex;
ganttInstance.selectRow(Number(index));
}
let record: any = args.draggedNodeData;
let selectedData =
ganttInstance.flatData[ganttInstance.selectedRowIndex];
let selectedDataResource = selectedData.taskData.resources;
let resources = [];
if (selectedDataResource) {
for (var i = 0; i < selectedDataResource.length; i++) {
resources.push(selectedDataResource[i].resourceId);
}
}
resources.push(parseInt(record.id));
if (chartEle || gridEle) {
var data = {
TaskID: selectedData.taskData.TaskID,
resources: resources
};
ganttInstance.updateRecordByID(data);
var elements = document.querySelectorAll('.e-drag-item');
while (elements.length > 0 && elements[0].parentNode) {
elements[0].parentNode.removeChild(elements[0]);
}
}
};
return <div><GanttComponent dataSource={editingData}
taskFields={taskFields} resources={editingResources}
editSettings={editSettings}
height='450px' resourceFields={resourceFields}
labelSettings={labelSettings} ref={gantt => ganttInstance = gantt}>
<Inject services={[ Edit, Selection]} />
</GanttComponent>
<TreeViewComponent fields={fields}
allowDragAndDrop={allowDragAndDrop} nodeDragStop={nodeDragStop}/>
</div>
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components"
/>
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/material.css"
rel="stylesheet" type="text/css"/>
<link
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet" />
<script
src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></sc
ript>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='root'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>
The following screenshot shows dropping record from another component in to Gantt, and Rose Fuller
is added as resource for the task Develop floor plan estimation.
return (<div>
<GanttComponent dataSource={data} ref={gantt => ganttInstance =
gantt} taskFields={taskFields} collapsing={collapsing} allowSelection={true}
editSettings={editOptions} height = '450px'>
<Inject services={[Edit, Selection]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.TSX
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { GanttComponent, Inject, Edit, EditSettingsModel, Selection } from
'@syncfusion/ej2-react-gantt';
import { data } from './datasource';
function App(){
const taskFields: any = {
id: 'TaskID',
name: 'TaskName',
startDate: 'StartDate',
duration: 'Duration',
progress: 'Progress',
child: 'subtasks'
};
let ganttInstance:any;
const editOptions: EditSettingsModel = {
allowEditing: true,
allowAdding:true
};
let gantt;
function collapsing(args:any) {
if (gantt.ganttChartModule.isExpandCollapseFromChart) {
args.cancel = true;
}
};
return (<div>
<GanttComponent dataSource={data} ref={gantt => ganttInstance =
gantt} taskFields={taskFields} collapsing={collapsing} allowSelection={true}
editSettings={editOptions} height = '450px'>
<Inject services={[Edit, Selection]} />
</GanttComponent></div>)
};
ReactDOM.render(<App />, document.getElementById('root'));
INDEX.HTML
<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Gantt</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
`bash
yarn create react-app my-app
cd my-app
yarn start
`
To set-up a React application in TypeScript environment, run the following command.
`bash
npx create-react-app my-app --template typescript
cd my-app
npm start
`
Besides using the npx package runner tool, also create an application from the npm init. To begin with
the npm init, upgrade the npm version to npm 6+.
`bash
npm init react-app my-app
cd my-app
npm start
`
Adding Syncfusion Grid packages
All the available Essential JS 2 packages are published in npmjs.com public registry.
To install Grid component, use the following command
`
npm install @syncfusion/ej2-react-grids --save
`
The --save will instruct NPM to include the Grid package inside of the dependencies section of the
package.json.
Adding CSS reference
The following CSS files are available in ../node_modules/@syncfusion package folder. This can be added
as reference in src/App.css.
`css
@import '../node_modules/@syncfusion/ej2-base/styles/material.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-calendars/styles/material.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material.css';
@import '../node_modules/@syncfusion/ej2-navigations/styles/material.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material.css';
@import '../node_modules/@syncfusion/ej2-splitbuttons/styles/material.css';
@import '../node_modules/@syncfusion/ej2-notifications/styles/material.css';
@import "../node_modules/@syncfusion/ej2-react-grids/styles/material.css";
`
To refer App.css in the application then import it in the src/App.tsx file.
Adding Grid component
Now, you can start adding React Grid component in the application. For getting started, add the Grid
component in src/App.tsx file using following code.
Place the following grid code in the src/App.tsx.
`ts
import { ColumnDirective, ColumnsDirective, GridComponent } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100' textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2" textAlign="Right"/>
<ColumnDirective field='ShipCountry' width='100'/>
</ColumnsDirective>
</GridComponent>
};
export default App;
`
Module Injection
React Grid component features are segregated into individual feature-wise modules.
In order to use a particular feature, you need to inject its feature service in the App.
In the current application, we are going to use paging, sorting, filtering and grouping feature of Grid.
Please find relevant feature service name and description as follows.
These modules should be injected into the grid using the Inject directive.
Additional feature modules are available here.
Enable Paging
The paging feature enables users to view the Grid record in a paged view.
It can be enabled by setting allowPaging property to true.
Inject the Page module in Inject.services as follows.
If the Page service is not injected, the pager will not be rendered in the grid.
Pager can be customized using pageSettings property.
APP.JSX
import { ColumnDirective, ColumnsDirective, Filter, GridComponent, Group,
Inject, Page, Sort } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings = { pageSize: 6 };
return <GridComponent dataSource={data} allowPaging={true}
pageSettings={pageSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100'
textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right"/>
<ColumnDirective field='ShipCountry' width='100'/>
</ColumnsDirective>
<Inject services={[Page, Sort, Filter, Group]}/>
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, Filter, GridComponent, Group,
Inject, Page, PageSettingsModel, Sort } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings: PageSettingsModel = { pageSize: 6 }
return <GridComponent dataSource={data} allowPaging={true} pageSettings={
pageSettings }>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
Enable Sorting
The sorting feature enables you to order the records.
It can be enabled by setting the allowSorting property as true.
Inject the Sort module in the Inject.services as follows.
If the Sort module is not injected, you cannot sort when a header is clicked.
Sorting feature can be customized using sortSettings property.
APP.JSX
import { ColumnDirective, ColumnsDirective, Filter, GridComponent, Group }
from '@syncfusion/ej2-react-grids';
import { Inject, Page, Sort } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
APP.TSX
import { ColumnDirective, ColumnsDirective, Filter, GridComponent, Group }
from '@syncfusion/ej2-react-grids';
import { Inject, Page, PageSettingsModel, Sort, SortSettingsModel } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings: PageSettingsModel = { pageSize: 6 }
const sortSettings: SortSettingsModel = { columns: [
{field: 'EmployeeID', direction: 'Ascending' }
] };
return <GridComponent dataSource={data} allowPaging={true} pageSettings={
pageSettings }
allowSorting={true} sortSettings={ sortSettings }>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100'
textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right"/>
<ColumnDirective field='ShipCountry' width='100'/>
</ColumnsDirective>
<Inject services={[Page, Sort, Filter, Group]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
Enable Filtering
It can be enabled by setting the allowFiltering property as true.
Inject the Filter module in the Inject.services as follows.
If Filter` module is not injected, filter bar will not be rendered in Grid.
Filtering feature can be customized using filterSettings property.
APP.JSX
import { ColumnDirective, ColumnsDirective, Filter, GridComponent } from
'@syncfusion/ej2-react-grids';
import { Group, Inject, Page, Sort } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings = { pageSize: 6 };
const sortSettings = { columns: [
{ field: 'EmployeeID', direction: 'Ascending' }
] };
const filterSettings = { columns: [
{ field: 'EmployeeID', operator: 'greaterthan', value: 2 }
] };
return <GridComponent dataSource={data} allowPaging={true}
pageSettings={pageSettings} filterSettings={filterSettings}
allowSorting={true} sortSettings={sortSettings} allowFiltering={true}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100'
textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right"/>
<ColumnDirective field='ShipCountry' width='100'/>
</ColumnsDirective>
<Inject services={[Page, Sort, Filter, Group]}/>
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, Filter, FilterSettingsModel,
GridComponent } from '@syncfusion/ej2-react-grids';
import { Group, Inject, Page, PageSettingsModel, Sort, SortSettingsModel }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings: PageSettingsModel = { pageSize: 6 }
const sortSettings: SortSettingsModel = { columns: [
{field: 'EmployeeID', direction: 'Ascending' }
] };
const filterSettings: FilterSettingsModel = { columns: [
{field: 'EmployeeID', operator: 'greaterthan',
value: 2 }
] };
return <GridComponent dataSource={data} allowPaging={true} pageSettings={
pageSettings }
filterSettings = {filterSettings}
allowSorting={true} sortSettings={ sortSettings }
allowFiltering={true}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100'
textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right"/>
<ColumnDirective field='ShipCountry' width='100'/>
</ColumnsDirective>
<Inject services={[Page, Sort, Filter, Group]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
Enable Grouping
The grouping feature enables you to view the grid record in a grouped view.
It can be enabled by setting allowGrouping property to true.
The Group module has to be injected as follows.
If Group module is not injected, the group drop area will not be rendered in Grid.
Grouping feature can be customized using groupSettings property.
APP.JSX
import { ColumnDirective, ColumnsDirective, Filter, GridComponent, Group }
from '@syncfusion/ej2-react-grids';
import { Inject, Page, Sort } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings = { pageSize: 6 };
const sortSettings = { columns: [
{ field: 'EmployeeID', direction: 'Ascending' }
] };
const filterSettings = { columns: [
{ field: 'EmployeeID', operator: 'greaterthan', value: 2 }
] };
const groupSettings = { columns: ['EmployeeID'] };
return <GridComponent dataSource={data} allowPaging={true}
pageSettings={pageSettings} filterSettings={filterSettings}
allowGrouping={true} groupSettings={groupSettings} allowSorting={true}
sortSettings={sortSettings} allowFiltering={true} height={180}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100'
textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right"/>
<ColumnDirective field='ShipCountry' width='100'/>
</ColumnsDirective>
<Inject services={[Page, Sort, Filter, Group]}/>
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, Filter, FilterSettingsModel,
GridComponent, Group, GroupSettingsModel } from '@syncfusion/ej2-react-
grids';
import {Inject, Page, PageSettingsModel, Sort, SortSettingsModel } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings: PageSettingsModel = { pageSize: 6 }
const sortSettings: SortSettingsModel = { columns: [
{field: 'EmployeeID', direction: 'Ascending' }
] };
const filterSettings: FilterSettingsModel = { columns: [
{field: 'EmployeeID', operator: 'greaterthan',
value: 2 }
] };
const groupSettings: GroupSettingsModel = { columns: ['EmployeeID'] };
return <GridComponent dataSource={data} allowPaging={true} pageSettings={
pageSettings }
filterSettings = {filterSettings} allowGrouping={true}
groupSettings={ groupSettings }
allowSorting={true} sortSettings={ sortSettings }
allowFiltering={true} height={180}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100'
textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right"/>
<ColumnDirective field='ShipCountry' width='100'/>
</ColumnsDirective>
<Inject services={[Page, Sort, Filter, Group]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
DATASOURCE.TSX
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
APP.TSX
You can refer to our React Grid feature tour page for its groundbreaking feature representations. You
can also explore our React Grid Component example that shows how to render the Grid in React.
See also
Prerequisites
Before getting started with the Next.js application, ensure the following prerequisites are met:
YARN
yarn create next-app
Using one of the above commands will lead you to set up additional configurations for the project as
below:
1.Define the project name: Users can specify the name of the project directly. Let's specify the name of
the project as ej2-nextjs-grid.
CMD
√ What is your project named? » ej2-nextjs-grid
3.Once complete the above mentioned steps to create ej2-nextjs-grid, navigate to the directory using
the below command:
CMD
cd ej2-nextjs-grid
The application is ready to run with default settings. Now, let's add Syncfusion components to the
project.
Install Syncfusion React packages
Syncfusion React component packages are available at npmjs.com. To use Syncfusion React components
in the project, install the corresponding npm package.
Here, the React Grid component is used as an example. To install the React Grid component in the
project, use the following command:
NPM
npm install @syncfusion/ej2-react-grids --save
YARN
yarn add @syncfusion/ej2-react-grids
To know more about built-in themes and CSS reference for individual components, refer to the themes
section.
Add Syncfusion React component
Follow the below steps to add the React Grid component to the Next.js project:
1.Before adding the Grid component to your markup, create a datasource.tsx file within the src/app/
folder and add the Grid component data.
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims', ShipAddress: '59
rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France', Freight:
32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
2.Then, import and define the Grid component with the dataSource property and column definitions in
the src/app/page.tsx file, as shown below:
PAGE.TSX
'use client'
import {
ColumnDirective, ColumnsDirective, GridComponent,
Inject, Page, Sort, Filter, Group
} from '@syncfusion/ej2-react-grids';
import { data } from "./datasource";
export default function Home() {
const pageSettings: object = { pageSize: 6 };
const filterSettings: object = { type: 'Excel' };
return (
<>
<h2>Syncfusion React Grid Component</h2>
<GridComponent
dataSource={data}
allowGrouping={true}
allowSorting={true}
allowFiltering={true}
allowPaging={true}
pageSettings={pageSettings}
filterSettings={filterSettings}
height={180}
>
<ColumnsDirective>
<ColumnDirective field="OrderID" width="100" textAlign="Right" />
<ColumnDirective field="CustomerID" width="100" />
<ColumnDirective field="EmployeeID" width="100" textAlign="Right" />
<ColumnDirective
field="Freight"
width="100"
format="C2"
textAlign="Right"
/>
<ColumnDirective field="ShipCountry" width="100" />
</ColumnsDirective>
<Inject services={[Page, Sort, Filter, Group]} />
</GridComponent>
</>
)
}
YARN
yarn run dev
To learn more about the functionality of the Grid component, refer to the documentation.
View the NEXT.js Grid sample in the GitHub repository.
Getting Started with the React Grid Component in the Preact Framework
This article provides a step-by-step guide for setting up a Preact project and integrating the Syncfusion
React Grid component.
Preact is a fast and lightweight JavaScript library for building user interfaces. It's often used as an
alternative to larger frameworks like React. The key difference is that Preact is designed to be smaller in
size and faster in performance, making it a good choice for projects where file size and load times are
critical factors.
Prerequisites
System requirements for Syncfusion React UI components
Set up the Preact project
To create a new Preact project, use one of the commands that are specific to either NPM or Yarn.
`bash
npm init preact
`
or
`bash
yarn init preact
`
Using one of the above commands will lead you to set up additional configurations for the project, as
below:
1\. Define the project name: We can specify the name of the project directly. Let's specify the name of
the project as my-project for this article.
`bash
T Preact - Fast 3kB alternative to React with the same modern API
|
• Project directory:
| my-project
—
`
2\. Choose JavaScript as the framework variant to build this Preact project using JavaScript and React.
`bash
T Preact - Fast 3kB alternative to React with the same modern API
|
• Project language:
| > JavaScript
| TypeScript
—
`
3\. Then configure the project as below for this article.
`bash
T Preact - Fast 3kB alternative to React with the same modern API
|
• Use router?
| Yes / > No
—
|
| Yes / > No
—
|
• Use ESLint?
| Yes / > No
—
`
5\. Upon completing the aforementioned steps to create my-project, run the following command to
jump into the project directory:
`bash
cd my-project
`
Now that my-project is ready to run with default settings, let's add Syncfusion components to the
project.
Add the Syncfusion React packages
Syncfusion React component packages are available at npmjs.com. To use Syncfusion React components
in the project, install the corresponding npm package.
This article uses the React Grid component as an example. To use the React Grid component in the
project, the @syncfusion/ej2-react-grids package needs to be installed using the following command:
`bash
npm install @syncfusion/ej2-react-grids --save
`
or
`bash
yarn add @syncfusion/ej2-react-grids
`
Import Syncfusion CSS styles
You can import themes for the Syncfusion React component in various ways, such as using CSS or SASS
styles from npm packages, CDN, CRG and Theme Studio. Refer to themes topic to know more about
built-in themes and different ways to refer to theme's in a React project.
In this article, the Material 3 theme is applied using CSS styles, which are available in installed packages.
The necessary Material 3 CSS styles for the Grid component and its dependents were imported into the
src/style.css file.
~/SRC/STYLE.CSS
@import "../node_modules/@syncfusion/ej2-base/styles/material3.css";
@import "../node_modules/@syncfusion/ej2-buttons/styles/material3.css";
@import "../node_modules/@syncfusion/ej2-calendars/styles/material3.css";
@import "../node_modules/@syncfusion/ej2-dropdowns/styles/material3.css";
@import "../node_modules/@syncfusion/ej2-inputs/styles/material3.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material3.css";
@import "../node_modules/@syncfusion/ej2-popups/styles/material3.css";
@import "../node_modules/@syncfusion/ej2-splitbuttons/styles/material3.css";
@import "../node_modules/@syncfusion/ej2-react-grids/styles/material3.css";
The order of importing CSS styles should be in line with its dependency graph.
Add the Syncfusion React component
Follow the below steps to add the React Grid component to the Vite project:
1\. Before adding the Grid component to your markup, import the Grid component in the src/index.jsx
file.
~/SRC/INDEX.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
2\. Then, define the Grid component with the dataSource property and column definitions. Declare the
values for the dataSource property.
~/SRC/INDEX.JSX
import { render } from 'preact';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import './style.css';
export function App() {
const data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, ShipCountry: 'France',
Freight: 32.38
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, ShipCountry: 'Germany',
Freight: 11.61
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, ShipCountry: 'Brazil',
Freight: 65.83
}
];
return (
<GridComponent dataSource={data}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100' textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2" textAlign="Right"/>
<ColumnDirective field='ShipCountry' width='100'/>
</ColumnsDirective>
</GridComponent>
);
}
render(<App />, document.getElementById('app'));
See also
Getting Started with the Syncfusion React UI Component
The Syncfusion Grid utilizes the Link to the Video, which supports both local binding with JavaScript
object arrays and remote binding with RESTful JSON data services. The key property, dataSource, can be
assigned to a DataManager instance or a collection of JavaScript object arrays.
It supports two kinds of data binding methods:
• Local data
• Remote data
To learn about how to bind local or remote data to React Grid, you can check on this video:
Loading indicator
The Syncfusion React Grid offers a loading animation feature, which makes it easy to identify when data
is being loaded or refreshed. This feature provides a clear understanding of the grid's current state and
actions, such as sorting, filtering, grouping, and more.
To achieve this, you can utilize the loadingIndicator.indicatorType property of the grid, which supports
two types of indicators:
The following example demonstrates how to set the loadingIndicator.indicatorType property based
on changing the dropdown value using the change event of the DropDownList component. The
refreshColumns method is used to apply the changes and display the updated loading indicator type.
APP.JSX
import { DataManager, UrlAdaptor } from '@syncfusion/ej2-data';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page,
Sort, Filter, PageSettingsModel } from '@syncfusion/ej2-react-grids';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import * as React from 'react';
function App() {
let grid;
let dropDown;
const data = new DataManager({
url:
'https://ej2services.syncfusion.com/js/development/api/UrlDataSource',
adaptor: new UrlAdaptor
});
const pageOptions = { pageSize: 5, pageCount: 5 };
const loadingIndicator = { indicatorType: 'Spinner' };
const ddlData = [
{ id: 'Spinner', value: 'Spinner' },
{ id: 'Shimmer', value: 'Shimmer' }
]
const fields = { text: 'value', value: 'id' };
const valueChange = () => {
if (dropDown.value === 'Shimmer') {
grid.loadingIndicator.indicatorType = 'Shimmer';
grid.refreshColumns();
} else {
grid.loadingIndicator.indicatorType = 'Spinner';
grid.refreshColumns();
}
}
return (<div>
<label style={{ padding: "10px 10px 26px 0" }}> Change the loading
indicator type: </label>
<DropDownListComponent ref={d => dropDown = d} index={0} width={120}
dataSource={ddlData} fields={fields}
change={valueChange}></DropDownListComponent>
<GridComponent ref={g => grid = g} dataSource={data} allowPaging={true}
pageSettings={pageOptions} height={315} allowFiltering={true}
allowSorting={true} loadingIndicator={loadingIndicator}>
<ColumnsDirective>
<ColumnDirective field='EmployeeID' headerText='Employee ID'
width='120' textAlign="Right" />
<ColumnDirective field='Employees' headerText='Employees' width='150'
/>
<ColumnDirective field='Designation' headerText='Designation'
width='150' />
<ColumnDirective field='CurrentSalary' headerText='Current Salary'
width='150' />
</ColumnsDirective>
<Inject services={[Page, Sort, Filter]} />
</GridComponent></div>)
};
export default App;
APP.TSX
import { DataManager, UrlAdaptor } from '@syncfusion/ej2-data';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page,
Sort, Filter, PageSettingsModel } from '@syncfusion/ej2-react-grids';
import { DropDownListComponent, ChangeEventArgs } from '@syncfusion/ej2-
react-dropdowns';
import * as React from 'react';
function App() {
let grid: GridComponent | null;
let dropDown: DropDownListComponent | null;
const data:DataManager = new DataManager({
url:
'https://ej2services.syncfusion.com/js/development/api/UrlDataSource',
adaptor: new UrlAdaptor
});
const pageOptions: PageSettingsModel = { pageSize: 5, pageCount: 5 };
const loadingIndicator = { indicatorType: 'Spinner' };
const ddlData: Object[] = [
{ id: 'Spinner', value: 'Spinner' },
{ id: 'Shimmer', value: 'Shimmer' }
]
const fields: object = { text: 'value', value: 'id' };
const valueChange = (args: ChangeEventArgs) => {
if ((dropDown as DropDownListComponent).value === 'Shimmer') {
(grid as GridComponent).loadingIndicator.indicatorType = 'Shimmer';
(grid as GridComponent).refreshColumns();
} else {
(grid as GridComponent).loadingIndicator.indicatorType = 'Spinner';
(grid as GridComponent).refreshColumns();
}
}
return (<div>
<label style={{ padding: "10px 10px 26px 0" }}> Change the loading
indicator type: </label>
<DropDownListComponent ref={d => dropDown = d} index={0} width={120}
dataSource={ddlData} fields={fields}
change={valueChange}></DropDownListComponent>
<GridComponent ref={g => grid = g} dataSource={data} allowPaging={true}
pageSettings={pageOptions} height={315} allowFiltering={true}
allowSorting={true} loadingIndicator={loadingIndicator}>
<ColumnsDirective>
<ColumnDirective field='EmployeeID' headerText='Employee ID'
width='120' textAlign="Right" />
<ColumnDirective field='Employees' headerText='Employees' width='150'
/>
<ColumnDirective field='Designation' headerText='Designation'
width='150' />
<ColumnDirective field='CurrentSalary' headerText='Current Salary'
width='150' />
</ColumnsDirective>
<Inject services={[Page, Sort, Filter]} />
</GridComponent></div>)
};
export default App;
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, Grid, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
let newRecords = [];
// Generate a random OrderId
const generateOrderId = () => {
return Math.floor(10000 + Math.random() * 90000);
}
// Generate a random CustomerId
const generateCustomerId = () => {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let result = '';
for (let i = 0; i < 5; i++) {
result += characters.charAt(Math.floor(Math.random() *
characters.length));
}
return result;
}
// Generate a random ShipCity
const generateShipCity = () => {
const cities = ['London', 'Paris', 'New York', 'Tokyo', 'Berlin'];
return cities[Math.floor(Math.random() * cities.length)];
}
// Generate a random Freight value
const generateFreight = () => {
return Math.random() * 100;
}
// Generate a random ShipName
const generateShipName = () => {
const names = ['Que Delícia', 'Bueno Foods', 'Island Trading',
'Laughing Bacchus Winecellars'];
return names[Math.floor(Math.random() * names.length)];
}
const changeDatasource = () => {
for (let i = 0; i < 5; i++) {
newRecords = {
OrderID: generateOrderId(),
CustomerID: generateCustomerId(),
ShipCity: generateShipCity(),
Freight: generateFreight(),
ShipName: generateShipName()
};
(grid.dataSource).unshift(newRecords);
grid.setProperties({ dataSource: grid.dataSource });
}
}
return <div>
<ButtonComponent onClick={changeDatasource}>Change
Datasource</ButtonComponent>
<GridComponent dataSource={data} height={280} ref={g => grid = g}>
<ColumnsDirective>
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, Grid, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
let newRecords: Object = [];
// Generate a random OrderId
const generateOrderId = () => {
return Math.floor(10000 + Math.random() * 90000);
}
// Generate a random CustomerId
const generateCustomerId = () => {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let result = '';
for (let i = 0; i < 5; i++) {
result += characters.charAt(Math.floor(Math.random() *
characters.length));
}
return result;
}
// Generate a random ShipCity
const generateShipCity = () => {
const cities = ['London', 'Paris', 'New York', 'Tokyo', 'Berlin'];
return cities[Math.floor(Math.random() * cities.length)];
}
// Generate a random Freight value
const generateFreight = () => {
return Math.random() * 100;
}
// Generate a random ShipName
const generateShipName = () => {
const names = ['Que Delícia', 'Bueno Foods', 'Island Trading',
'Laughing Bacchus Winecellars'];
return names[Math.floor(Math.random() * names.length)];
}
const changeDatasource = () => {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
The following code demonstrates how to create the columns for the grid, which are based on the
provided grid data source.
`typescript
const newColumn: ColumnModel[] = [
{ field: 'OrderID', headerText: 'Order ID', textAlign: 'Right', width: 125 },
{ field: 'CustomerID', headerText: 'Customer ID', width: 125 },
];
`
The following code demonstrates updating the data source and columns defined above using the
changeDataSource method.
`typescript
gridInstance.changeDataSource(data, newColumn);
`
2. Modify only the existing columns:
To modify the existing columns in a grid, you can either add or remove columns or change the entire set
of columns using the changeDataSource method. To use this method, you should set the first parameter
to null and provide the new columns as the second parameter. However, please note that if a column
field is not specified in the data source, its corresponding column values will be empty. The following
example illustrates how to modify existing columns.
The following code demonstrates how to add new columns with existing grid columns ('newColumn') by
using changeDataSource method.
`typescript
const newColumn1: ColumnModel[] = [
{ field: 'Freight', headerText: 'Freight', textAlign: 'Right', width: 125 },
{ field: 'ShipCity', headerText: 'ShipCity', width: 125 },
];
let column: any = newColumn.push(...newColumn1);
gridInstance.changeDataSource(null, column);
`
3. Modify only the data source:
You can change the entire data source in the grid using the changeDataSource method. To use this
method, you should provide the data source as the first argument, and the second argument which is
optional can be used to specify new columns for the grid. If you are not specifying the columns, the grid
will generate the columns automatically based on the data source. The following example demonstrates
how to modify the data source.
You can assign a JavaScript object array to the dataSource property to bind local data to the grid. The
code below provides an example of how to create a new data source for the grid.
`typescript
export let employeeData: Object[] = [
{
FirstName: 'Nancy', City: 'Seattle', Region: 'WA',
Country: 'USA'
},
{
FirstName: 'Andrew', City: 'London', Region: null,
Country: 'UK',
},
{
FirstName: 'Janet', City: 'Kirkland', Region: 'WA',
Country: 'USA'
}];
`
The following code demonstrates, how to use the changeDataSource method to bind the new
employeeData to the grid.
`typescript
gridInstance.changeDataSource(employeeData);
`
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, PageSettingsModel
} from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
let count = 0;
const pageSettings = { pageSize: 5, pageCount: 3 };
const newColumn = [
{ field: 'OrderID', headerText: 'Order ID', textAlign: 'Right',
width: 125 },
{ field: 'CustomerID', headerText: 'Customer Name', width: 125 },
{ field: 'OrderDate', headerText: 'Order Date', width: 130, format:
'yMd', textAlign: 'Right' },
{ field: 'Freight', headerText: 'Freight', width: 120, textAlign:
'Right' },
];
const onClick = () => {
count = count + 100;
grid.changeDataSource(data.slice(0, count + 100), newColumn);
}
return <div>
<ButtonComponent onClick={onClick}>Click Button</ButtonComponent>
<GridComponent dataSource={data} height={315} ref={g => grid = g}
allowPaging={true} pageSettings={pageSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='120' textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='Freight' headerText='Freight'
width='150' format='C2' />
</ColumnsDirective>
</GridComponent>
</div>
};
export default App;
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, PageSettingsModel
} from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
let count: number = 0;
const pageSettings: PageSettingsModel = { pageSize: 5, pageCount: 3 };
const newColumn = [
{ field: 'OrderID', headerText: 'Order ID', textAlign: 'Right',
width: 125 },
{ field: 'CustomerID', headerText: 'Customer Name', width: 125 },
{ field: 'OrderDate', headerText: 'Order Date', width: 130, format:
'yMd' },
{ field: 'Freight', headerText: 'Freight', width: 120, format:'C2' },
];
const onClick = () => {
count = count + 100;
(grid as GridComponent).changeDataSource(data.slice(0, count + 100),
newColumn as Object[]);
}
return <div>
<ButtonComponent onClick={onClick}>Click Button</ButtonComponent>
<GridComponent dataSource={data} height={315} ref={g => grid = g}
allowPaging={true} pageSettings={pageSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='120' textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='Freight' headerText='Freight'
width='150' format='C2' />
</ColumnsDirective>
</GridComponent>
</div>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004', ShipCountry:
'France', Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', Mask: '5555', ShipPostalCode: 'B-6000',
ShipCountry: 'Belgium', Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 3,
OrderDate: new Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '6666', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 58.17, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004', ShipCountry:
'France', Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8368506e5),
* The Grid state persistence feature does not support the changeDataSource method.
* In this document, the above sample uses the local data for changeDataSource method. For those
using a remote data source, refer to the FlexibleData resource.
Adaptive in React Grid component
The Grid user interface (UI) was redesigned to provide an optimal viewing experience and improve
usability on small screens. This interface will render the filter, sort, column chooser, column
menu(supports only when the rowRenderingMode as Horizontal) and edit dialogs adaptively and have
an option to render the grid row elements in the vertical direction.
Render adaptive dialogs
The Syncfusion React Grid offers a valuable feature for rendering adaptive dialogs, specifically designed
to enhance the user experience on smaller screens. This feature proves especially useful for optimizing
the interface on devices with limited screen real estate. The functionality is achieved by enabling the
enableAdaptiveUI property, allowing the grid to render filter, sort, and edit dialogs in full-screen mode.
The following sample demonstrates how to enable and utilize adaptive dialogs in the Syncfusion React
Grid:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject } from
'@syncfusion/ej2-react-grids';
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject,
EditSettingsModel, ToolbarItems, FilterSettingsModel } from '@syncfusion/ej2-
react-grids';
import { Filter, Sort, Edit, Toolbar, Page } from '@syncfusion/ej2-react-
grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const editSettings: EditSettingsModel = { allowEditing: true, allowAdding:
true, allowDeleting: true, mode: 'Dialog' };
const toolbarOptions: ToolbarItems[] = ['Add', 'Edit', 'Delete', 'Update',
'Cancel', 'Search'];
const validationRule: Object = { required: true };
const orderidRules: Object = { required: true, number: true };
const filterOptions: FilterSettingsModel = { type: 'Excel' };
let grid: GridComponent;
const load = (): void => {
grid = (document.getElementById('adaptivebrowser') as
HTMLFormElement).ej2_instances[0];
grid.adaptiveDlgTarget = document.getElementsByClassName('e-mobile-
content')[0] as HTMLElement;
}
let menuFilter = { type: 'Menu' };
let checkboxFilter = { type: 'CheckBox' };
return (<div className="e-adaptive-demo e-bigger">
<div className="e-mobile-layout">
<div className="e-mobile-content">
<GridComponent id="adaptivebrowser" dataSource={data}
height='100%' ref={g => grid = g} enableAdaptiveUI={true}
allowFiltering={true} allowSorting={true} allowPaging={true}
filterSettings={filterOptions} toolbar={toolbarOptions}
editSettings={editSettings} load={load}>
<ColumnsDirective>
<ColumnDirective field='SNO' headerText='S NO'
width='150' isPrimaryKey={true}
validationRules={orderidRules}></ColumnDirective>
<ColumnDirective field='Model' headerText='Model
Name' width='200' editType='dropdownedit' validationRules={validationRule} />
<ColumnDirective field='Developer'
headerText='Developer' width='200' filter={menuFilter}
validationRules={validationRule}></ColumnDirective>
<ColumnDirective field='ReleaseDate'
headerText='Released Date' editType='datepickeredit' type='date'
format='yMMM' width='200'></ColumnDirective>
<ColumnDirective field='AndroidVersion'
headerText='Android Version' width='200' filter={checkboxFilter}
validationRules={validationRule}></ColumnDirective>
</ColumnsDirective>
<Inject services={[Filter, Sort, Edit, Toolbar, Page]}
/>
</GridComponent>
</div>
</div>
<br></br>
<div className="datalink">Source:
<a
href="https://en.wikipedia.org/wiki/List_of_Android_smartphones"
target="_blank">Wikipedia: List of Android
smartphones</a>
</div>
</div>
)
}
export default App;
DATASOURCE.JSX
export let data = [
{ "Model": "Samsung Galaxy", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2009-03-31T18:30:00.000Z"), "AndroidVersion":
"Android 1.5 \"Cupcake\"", "SNO": 1 },
{ "Model": "Samsung Galaxy A01", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2019-12-31T18:30:00.000Z"), "AndroidVersion":
"Android 10", "SNO": 2 },
{ "Model": "Samsung Galaxy A01 Core", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2020-07-31T18:30:00.000Z"), "AndroidVersion":
"Android 10", "SNO": 3 },
{ "Model": "Samsung Galaxy A02", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2020-12-31T18:30:00.000Z"), "AndroidVersion":
"Android 10", "SNO": 4 },
{ "Model": "Samsung Galaxy A2 Core", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2019-03-31T18:30:00.000Z"), "AndroidVersion":
"Android 8.0 \"Oreo\"", "SNO": 5 },
{ "Model": "Samsung Galaxy A02s/M02s", "Developer": "Samsung
Electronics", "ReleaseDate": new Date("2020-12-31T18:30:00.000Z"),
"AndroidVersion": "Android 10", "SNO": 6 },
{ "Model": "Samsung Galaxy A3 (2016)/A5 (2016)/A7 (2016)", "Developer":
"Samsung Electronics", "ReleaseDate": new Date("2015-11-30T18:30:00.000Z"),
"AndroidVersion": "Android 5.0 \"Lollipop\"", "SNO": 7 },
{ "Model": "Samsung Galaxy A3 (2017)/A5 (2017)/A7 (2017)", "Developer":
"Samsung Electronics", "ReleaseDate": new Date("2016-12-31T18:30:00.000Z"),
"AndroidVersion": "Android 6.0 \"Marshmallow\"", "SNO": 8 },
{ "Model": "Samsung Galaxy A3/Duos", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2014-11-30T18:30:00.000Z"), "AndroidVersion":
"Android 4.4 \"KitKat\"", "SNO": 9 },
{ "Model": "Samsung Galaxy A5", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2014-11-30T18:30:00.000Z"), "AndroidVersion":
"Android 4.4 \"KitKat\"", "SNO": 10 },
{ "Model": "Samsung Galaxy A5 Duos", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2014-10-31T18:30:00.000Z"), "AndroidVersion":
"Android 4.4 \"KitKat\"", "SNO": 11 },
{ "Model": "Samsung Galaxy A6/+", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2018-04-30T18:30:00.000Z"), "AndroidVersion":
"Android 8.0 \"Oreo\"", "SNO": 12 },
{ "Model": "Samsung Galaxy A6s", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2018-10-31T18:30:00.000Z"), "AndroidVersion":
"Android 8.0 \"Oreo\"", "SNO": 13 },
DATASOURCE.TSX
export let data: Object[] = [
{ "Model": "Samsung Galaxy", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2009-03-31T18:30:00.000Z"), "AndroidVersion":
"Android 1.5 \"Cupcake\"", "SNO": 1 },
{ "Model": "Samsung Galaxy A01", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2019-12-31T18:30:00.000Z"), "AndroidVersion":
"Android 10", "SNO": 2 },
];
let grid;
const created = () => {
grid.adaptiveDlgTarget = document.getElementsByClassName('e-mobile-
content')[0];
}
const changeAlignment = (args) => {
grid.rowRenderingMode = args.value
}
const footerSum = (props) => {
return (<span>Total Models: {props.Count}</span>);
};
let menuFilter = { type: 'Menu' };
let checkboxFilter = { type: 'CheckBox' };
return (<div>
<div>
<label style={{ padding: "30px 17px 0 0" }}> Select row rendering mode
:</label>
<DropDownListComponent index={0} width={150} dataSource={dropDownData}
change={changeAlignment}></DropDownListComponent>
</div>
<div className="e-adaptive-demo e-bigger">
<div className="e-mobile-layout">
<div className="e-mobile-content">
<GridComponent id="adaptivebrowser" dataSource={data} height='100%'
ref={g => grid = g} enableAdaptiveUI={true} rowRenderingMode={renderingMode}
allowFiltering={true} allowSorting={true} allowPaging={true}
filterSettings={filterOptions} toolbar={toolbarOptions}
editSettings={editSettings} created={created}>
<ColumnsDirective>
<ColumnDirective field='SNO' headerText='S NO' width='150'
isPrimaryKey={true} validationRules={orderidRules}></ColumnDirective>
<ColumnDirective field='Model' headerText='Model Name'
width='200' editType='dropdownedit' validationRules={validationRule} />
<ColumnDirective field='Developer' headerText='Developer'
width='200' filter={menuFilter}
validationRules={validationRule}></ColumnDirective>
<ColumnDirective field='ReleaseDate' headerText='Released Date'
editType='datepickeredit' type='date' format='yMMM'
width='200'></ColumnDirective>
<ColumnDirective field='AndroidVersion' headerText='Android
Version' width='200' filter={checkboxFilter}
validationRules={validationRule}></ColumnDirective>
</ColumnsDirective>
<Inject services={[Filter, Sort, Edit, Toolbar, Aggregate, Page]}
/>
<AggregatesDirective>
<AggregateDirective>
<AggregateColumnsDirective>
<AggregateColumnDirective field='Model' type='Count'
footerTemplate={footerSum}> </AggregateColumnDirective>
</AggregateColumnsDirective>
</AggregateDirective>
</AggregatesDirective>
</GridComponent>
</div>
</div>
<br></br>
<div className="datalink">Source:
<a href="https://en.wikipedia.org/wiki/List_of_Android_smartphones"
target="_blank">Wikipedia: List of Android smartphones</a>
</div>
</div></div>
)
}
export default App;
APP.TSX
import { DropDownListComponent, ChangeEventArgs } from '@syncfusion/ej2-
react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject,
FilterSettingsModel, EditSettingsModel, ToolbarItems, RowRenderingDirection }
from '@syncfusion/ej2-react-grids';
import { AggregateColumnsDirective, AggregateColumnDirective,
AggregateDirective, AggregatesDirective } from '@syncfusion/ej2-react-grids';
import { Filter, Sort, Edit, Toolbar, Aggregate, Page } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const editSettings: EditSettingsModel = { allowEditing: true, allowAdding:
true, allowDeleting: true, mode: 'Dialog' };
const toolbarOptions: ToolbarItems[] = ['Add', 'Edit', 'Delete', 'Update',
'Cancel', 'Search'];
const validationRule: Object = { required: true };
const orderidRules: Object = { required: true, number: true };
const filterOptions: FilterSettingsModel = { type: 'Excel' };
const renderingMode: string = 'Vertical';
const dropDownData: Object[] = [
{ text: 'Vertical', value: 'Vertical' },
{ text: 'Horizontal', value: 'Horizontal' },
];
let grid: GridComponent | null;
const created = (): void => {
(grid as GridComponent).adaptiveDlgTarget =
document.getElementsByClassName('e-mobile-content')[0] as HTMLElement;
}
const changeAlignment = (args: ChangeEventArgs) => {
(grid as GridComponent).rowRenderingMode = (args.value as
RowRenderingDirection)
}
const footerSum = (props) => {
return (<span>Total Models: {props.Count}</span>);
};
let menuFilter = { type: 'Menu' };
let checkboxFilter = { type: 'CheckBox' };
return (<div>
<div>
<label style={{ padding: "30px 17px 0 0" }}> Select row rendering mode
:</label>
<DropDownListComponent index={0} width={150} dataSource={dropDownData}
change={changeAlignment}></DropDownListComponent>
</div>
<div className="e-adaptive-demo e-bigger">
<div className="e-mobile-layout">
<div className="e-mobile-content">
<GridComponent id="adaptivebrowser" dataSource={data} height='100%'
ref={g => grid = g} enableAdaptiveUI={true} rowRenderingMode={renderingMode}
allowFiltering={true} allowSorting={true} allowPaging={true}
filterSettings={filterOptions} toolbar={toolbarOptions}
editSettings={editSettings} created={created}>
<ColumnsDirective>
<ColumnDirective field='SNO' headerText='S NO' width='150'
isPrimaryKey={true} validationRules={orderidRules}></ColumnDirective>
<ColumnDirective field='Model' headerText='Model Name'
width='200' editType='dropdownedit' validationRules={validationRule} />
<ColumnDirective field='Developer' headerText='Developer'
width='200' filter={menuFilter}
validationRules={validationRule}></ColumnDirective>
<ColumnDirective field='ReleaseDate' headerText='Released Date'
editType='datepickeredit' type='date' format='yMMM'
width='200'></ColumnDirective>
<ColumnDirective field='AndroidVersion' headerText='Android
Version' width='200' filter={checkboxFilter}
validationRules={validationRule}></ColumnDirective>
</ColumnsDirective>
<Inject services={[Filter, Sort, Edit, Toolbar, Aggregate, Page]}
/>
<AggregatesDirective>
<AggregateDirective>
<AggregateColumnsDirective>
<AggregateColumnDirective field='Model' type='Count'
footerTemplate={footerSum}> </AggregateColumnDirective>
</AggregateColumnsDirective>
</AggregateDirective>
</AggregatesDirective>
</GridComponent>
</div>
</div>
<br></br>
<div className="datalink">Source:
<a href="https://en.wikipedia.org/wiki/List_of_Android_smartphones"
target="_blank">Wikipedia: List of Android smartphones</a>
</div>
</div></div>
)
}
export default App;
DATASOURCE.JSX
export let data = [
{ "Model": "Samsung Galaxy", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2009-03-31T18:30:00.000Z"), "AndroidVersion":
"Android 1.5 \"Cupcake\"", "SNO": 1 },
{ "Model": "Samsung Galaxy A01", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2019-12-31T18:30:00.000Z"), "AndroidVersion":
"Android 10", "SNO": 2 },
DATASOURCE.TSX
export let data: Object[] = [
{ "Model": "Samsung Galaxy", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2009-03-31T18:30:00.000Z"), "AndroidVersion":
"Android 1.5 \"Cupcake\"", "SNO": 1 },
{ "Model": "Samsung Galaxy A01", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2019-12-31T18:30:00.000Z"), "AndroidVersion":
"Android 10", "SNO": 2 },
{ "Model": "Samsung Galaxy A01 Core", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2020-07-31T18:30:00.000Z"), "AndroidVersion":
"Android 10", "SNO": 3 },
{ "Model": "Samsung Galaxy A02", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2020-12-31T18:30:00.000Z"), "AndroidVersion":
"Android 10", "SNO": 4 },
{ "Model": "Samsung Galaxy A2 Core", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2019-03-31T18:30:00.000Z"), "AndroidVersion":
"Android 8.0 \"Oreo\"", "SNO": 5 },
{ "Model": "Samsung Galaxy A02s/M02s", "Developer": "Samsung
Electronics", "ReleaseDate": new Date("2020-12-31T18:30:00.000Z"),
"AndroidVersion": "Android 10", "SNO": 6 },
{ "Model": "Samsung Galaxy A3 (2016)/A5 (2016)/A7 (2016)", "Developer":
"Samsung Electronics", "ReleaseDate": new Date("2015-11-30T18:30:00.000Z"),
"AndroidVersion": "Android 5.0 \"Lollipop\"", "SNO": 7 },
{ "Model": "Samsung Galaxy A3 (2017)/A5 (2017)/A7 (2017)", "Developer":
"Samsung Electronics", "ReleaseDate": new Date("2016-12-31T18:30:00.000Z"),
"AndroidVersion": "Android 6.0 \"Marshmallow\"", "SNO": 8 },
{ "Model": "Samsung Galaxy A3/Duos", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2014-11-30T18:30:00.000Z"), "AndroidVersion":
"Android 4.4 \"KitKat\"", "SNO": 9 },
{ "Model": "Samsung Galaxy A5", "Developer": "Samsung Electronics",
"ReleaseDate": new Date("2014-11-30T18:30:00.000Z"), "AndroidVersion":
"Android 4.4 \"KitKat\"", "SNO": 10 },
A snapshot of the adaptive grid displaying enabled paging along with a pager dropdown.
The Column Menu feature, which includes grouping, sorting, autofit, filter, and column chooser, is
exclusively supported for the Grid in Horizontal rowRenderingMode.
Performance tips for React DataGrid Component
This article is a comprehensive guide on improving the loading performance of the React DataGrid,
especially when dealing with large datasets along with large number of columns. It provides valuable
insights into the steps that need to be followed to bind a large data source without experiencing any
performance degradations. By offering detailed explanations and actionable tips, this resource aims to
empower readers with the knowledge and best practices necessary to optimize the performance of the
React DataGrid during data binding, ensuring a smooth and efficient user experience.
How to improve loading performance by binding large dataset
As you all know, a grid is made up of rows and columns. For instance, when you bind 10 rows and 10
columns, it means 100 elements will be rendered in the DOM (Document Object Model). So, it is
recommended to render only a limited number of rows and columns to guarantee the best loading
performance for the component.
Optimizing performance with paging
To boost the performance efficiency of your application, especially when dealing with large datasets, it
is advised to implement paging. Paging allows you to display grid data in segmented pages, facilitating
easier navigation through substantial datasets. This feature proves particularly beneficial in enhancing
the overall performance of your application. For more information on implementing paging, you can
refer to the documentation section dedicated to this feature.
Optimizing performance with row virtualization or infinite scrolling
To enhance your application's efficiency, especially when dealing with substantial datasets, it is
recommended to either using virtualization or infinite scrolling. Implementing these techniques can
significantly reduce the load on your application and elevate its overall performance.
1. Virtualization: The Virtual scrolling feature in the React Data Grid enables the efficient handling
and display of large volumes of data without compromising performance. This approach
optimizes the rendering process by loading only the visible rows within the Grid viewport, rather
than rendering the entire dataset simultaneously. For more information on implementing row
virtualization , you can refer to the documentation section dedicated to this feature.
2. Infinite scrolling: The Infinite Scrolling feature in the React Data Grid is a powerful tool for
seamlessly handling extensive data sets without compromising grid performance. It operates on
a "load-on-demand" concept, ensuring that data is fetched only when needed. In the default
infinite scrolling mode, a new block of data is loaded each time the scrollbar reaches the end of
the vertical scroller. For more information on implementing infinite scrolling , you can refer to
the documentation section dedicated to this feature.
How to improve loading performance by binding large data by showing custom text or element
When integrating image or template elements into a column, it's recommended to utilize the Column
Template feature rather than customizing the data through rowDataBound or queryCellInfo events.
These events are triggered for each row and cell rendering, introducing delays in the component's
rendering process. Moreover, rendering custom elements using these events may result in the
persistence of rendered elements, potentially causing longer rendering times over time. By opting for
the column template feature, you can efficiently meet this requirement without experiencing rendering
delays and ensure a more streamlined rendering process.
How to improve loading performance by referring individual script and CSS
To improve the performance of Syncfusion Grid component during the initial render as well as certain
actions, suggested you to download the specific component scripts using CRG (Custom Resource
Generator) to speed up the project. By default, the ej2.min.js script file contains all the Syncfusion
component scripts. So, it will take some time to load the scripts to the project. Using CRG, you can select
the components which you want to use, and the modules for those components, then you can
download the scripts and CSS for the selected components and use them as per your need.
CRG website link
So to improve the performance of grid during the initial rendering, suggested you to refer individual
script and CSS.
How to update cell values without frequent server calls
Efficiently update cell values without the need for frequent server calls, especially beneficial for live
update scenarios. Even when the data is initially bound from the server, performing edit operations can
be done without triggering a database refresh. Utilize the setCellValue method to update the DataGrid
without affecting the database and only refresh the UI.
How to optimize server-side data operations with adaptors
The React DataGrid provides support for various adaptors (OData, ODataV4, WebAPI, URL, etc.) to
facilitate server-side data operations and CRUD functionalities. By leveraging these adaptors along with
the DataManager component, you can seamlessly bind remote data sources to the grid and execute
actions. During data operations like filtering, sorting, and paging, the corresponding action queries are
generated as per the adaptor's requirements. It is crucial to handle these actions on the application end
and return the processed data back to the grid. Refer to the documentation for comprehensive details.
It's worth noting that for efficient data processing, the suggested order for returning processed data to
the grid is as follows
• Filtering
• Sorting
• Aggregates
• Paging
• Grouping
Solution: 1
`csharp
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
`
Solution : 2
`csharp
var serializer = new JavaScriptSerializer { MaxJsonLength = Int32.MaxValue };
`
Microsoft excel limitation while exporting millions of records to excel file format
By default, Microsoft Excel supports only 1,048,576 records in an excel sheet. Hence it is not possible to
export millions of records to excel. You can refer the documentation link for more details on Microsoft
excel specifications and limits. So suggest to export the data in CSV (Comma-Separated Values) or other
formats that can handle large datasets more efficiently than Excel.
Columns in React Grid Component
In Syncfusion React Grid, Columns are fundamental elements that play a pivotal role in rendering
column values in the required format within your application. The field property of the ColumnDirective
is necessary to map the data source values in Grid columns. To rendering the columns, you need to
import the ColumnDirective, ColumnsDirective and GridComponent in the grid.
`ts
import { ColumnDirective, ColumnsDirective, GridComponent } from '@syncfusion/ej2-react-grids';
`
Column types
The Syncfusion Grid component allows you to specify the type of data that a column binds using the
type property. The type property is used to determine the appropriate format, such as number or date,
for displaying the column data.
Grid supports the following column types:
• string: Represents a column that binds to string data. This is the default type if the type property
is not defined.
• number: Represents a column that binds to numeric data. It supports formatting options for
displaying numbers.
• boolean: Represents a column that binds to boolean data. It displays checkboxes for boolean
values.
• date: Represents a column that binds to date data. It supports formatting options for displaying
dates.
• datetime: Represents a column that binds to date and time data. It supports formatting options
for displaying date and time values.
• checkbox: Represents a column that displays checkboxes.
Here is an example of how to specify column types in a grid using the types mentioned above.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data}>
<ColumnsDirective>
<ColumnDirective type='checkbox' width='90' />
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right" type='number' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' type='string' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format="C2" textAlign="Right" type='number' />
<ColumnDirective field='OrderDate' headerText='Order Date'
width='100' format="yMd" textAlign="Right" type='date' />
<ColumnDirective field='ShippedDate' headerText='Shipped Date'
width='100' format="dd/MM/yyyy hh:mm" textAlign="Right" type='dateTime' />
<ColumnDirective field='Verified' headerText='Verified'
width='100' type='boolean' displayAsCheckBox={true} />
</ColumnsDirective>
</GridComponent>
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data}>
<ColumnsDirective>
<ColumnDirective type='checkbox' width='90' />
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right" type='number' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' type='string' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format="C2" textAlign="Right" type='number' />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),ShippedDate: new Date(8367642e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),ShippedDate: new Date(8367642e5),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VINET', EmployeeID: 3, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),ShippedDate: new Date(8367642e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),ShippedDate: new Date(8367642e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),ShippedDate: new Date(8367642e5),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VINET', EmployeeID: 3, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
* If the type is not defined, then it will be determined from the first record of the dataSource.
* Incase if the first record of the dataSource is null/blank value for a column then it is necessary to
define the type for that column.
Difference between boolean type and checkbox type column
1. Use the boolean column type when you want to bind boolean values from your datasource
and/or edit boolean property values from your type.
2. Use the checkbox column type when you want to enable selection/deselection of the whole
row.
3. When the grid column type is a checkbox, the selection type of the grid selectionSettings will
be multiple. This is the default behavior.
4. If you have more than one column with the column type as a checkbox, the grid will
automatically enable the other column’s checkbox when selecting one column checkbox.
To learn more about how to render boolean values as checkboxes in a Syncfusion GridColumn, please
refer to the Render Boolean Values as Checkbox section.
Column width
To adjust the column width in a Grid, you can use the width property within the columns property of the
Grid configuration. This property enables you to define the column width in pixels or as a percentage.
You can set the width to a specific value, like 100 for 100 pixels, or as a percentage value, such as 25%
for 25% of the available width.
1. Grid column width is calculated based on the sum of column widths. For example, a grid
container with 4 columns and a width of 800 pixels will have columns with a default width of
200 pixels each.
2. If you specify widths for some columns but not others, the Grid will distribute the available
width equally among the columns without explicit widths. For example, if you have 3 columns
with widths of 100px, 200px, and no width specified for the third column, the third column will
occupy the remaining width after accounting for the first two columns.
3. Columns with percentage widths are responsive and adjust their width based on the size of the
grid container. For example, a column with a width of 50% will occupy 50% of the grid width and
will adjust proportionally when the grid container is resized to a smaller size.
4. When you manually resize columns in Syncfusion Grid, a minimum width is set to ensure that
the content within the cells remains readable. By default, the minimum width is set to 10 pixels
if not explicitly specified for a column.
5. If the total width of all columns exceeds the width of the grid container, a horizontal scrollbar
will automatically appear to allow horizontal scrolling within the grid.
6. When the columns is hide using the column chooser, the width of the hidden columns is
removed from the total grid width, and the remaining columns will be resized to fill the available
space.
7. If the parent element has a fixed width, the grid component will inherit that width and occupy
the available space. However, if the parent element does not have a fixed width, the grid
component will adjust its width dynamically based on the available space.
`ts
<ColumnDirective field="OrderID" headerText="Order ID" width="25%" textAlign="Right" />
`
3. Pixel
The column width is specified as an absolute pixel value. For example, a column width of 100px will have
a fixed width of 100 pixels regardless of the grid container size. You can set the width for
ColumnDirective as pixel in your Grid configuration as shown below:
`ts
<ColumnDirective field="OrderID" headerText="Order ID" width="100" textAlign="Right" />
`
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} width='auto'>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='auto' textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='120' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format="C2" textAlign="Right" />
<ColumnDirective field='OrderDate' headerText='Order Date'
width='40%' format="yMd" textAlign="Right" />
</ColumnsDirective>
</GridComponent>
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} width='auto'>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='auto' textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='120' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format="C2" textAlign="Right" />
<ColumnDirective field='OrderDate' headerText='Order Date'
width='40%' format="yMd" textAlign="Right" />
</ColumnsDirective>
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),ShippedDate: new Date(8367642e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),ShippedDate: new Date(8367642e5),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VINET', EmployeeID: 3, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),ShippedDate: new Date(8367642e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),ShippedDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),ShippedDate: new Date(8367642e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),ShippedDate: new Date(8367642e5),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VINET', EmployeeID: 3, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),ShippedDate: new Date(8367642e5),
Column formatting
Column formatting is a powerful feature in Syncfusion Grid that allows you to customize the display of
data in grid columns. You can apply different formatting options to columns based on your
requirements, such as displaying numbers with specific formats, formatting dates according to a specific
locale, and using templates to format column values.
You can use the format property to specify the format for column values.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right"/>
<ColumnDirective field='OrderDate' width='140' format="yMd"
textAlign="Right"/>
</ColumnsDirective>
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right" />
<ColumnDirective field='CustomerID' width='100' />
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right" />
<ColumnDirective field='OrderDate' width='140' format="yMd"
textAlign="Right" />
</ColumnsDirective>
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
* The grid uses the Internalization library to format values based on the specified format and culture.
* By default, the number and date values are formatted in en-US locale. You can localize the currency
and date in different locale as explained here.
* The available format codes may vary depending on the data type of the column.
* You can also customize the formatting further by providing a custom function to the format property,
instead of a format string.
* Make sure that the format string is valid and compatible with the data type of the column, to avoid
unexpected results.
Number formatting
Number formatting allows you to customize the display of numeric values in grid columns. You can use
standard numeric format strings or custom numeric format strings to specify the desired format. The
format property can be used to specify the number format for numeric columns. For example, you can
use the following format strings to format numbers:
Format |Description |Remarks
{ type:'date', format:'dd/MM/yyyy' } | 04/07/1996
{ type:'date', format:'dd.MM.yyyy' } | 04.07.1996
{ type:'date', skeleton:'short' } | 7/4/96
{ type: 'dateTime', format: 'dd/MM/yyyy hh:mm a' } | 04/07/1996 12:00 AM
{ type: 'dateTime', format: 'MM/dd/yyyy hh:mm:ss a' } | 07/04/1996 12:00:00 AM
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const formatOption = { type: 'date', format: 'dd/MM/yyyy' };
const shipFormat = { type: 'dateTime', format: 'dd/MM/yyyy hh:mm a' };
return <GridComponent dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right"/>
<ColumnDirective field='OrderDate' width='140' textAlign="Right"
format={formatOption}/>
<ColumnDirective field='OrderDate' headerText='Ship Date' width='180'
textAlign="Right" format={shipFormat}/>
</ColumnsDirective>
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const formatOption: object = { type: 'date', format: 'dd/MM/yyyy' };
const shipFormat: object = { type: 'dateTime', format: 'dd/MM/yyyy hh:mm a'
};
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', EmployeeID: 8, OrderDate: new
Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { loadCldr, setCulture, setCurrencyCode } from '@syncfusion/ej2-base';
import { data } from './datasource';
import * as cagregorian from './ca-gregorian.json';
import * as currencies from './currencies.json';
import * as numbers from './numbers.json';
import * as timeZoneNames from './timeZoneNames.json';
function App() {
const formatOption: object = { type: 'date', format: 'yyyy-MMM-dd' };
const locale: any = 'es-AR';
setCulture('es-AR');
setCurrencyCode('ARS');
loadCldr(
cagregorian,
currencies,
numbers,
timeZoneNames
);
return <GridComponent dataSource={data} height={315} locale={locale}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right" />
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right" />
<ColumnDirective field='OrderDate' width='140' textAlign="Right"
format={formatOption} />
</ColumnsDirective>
</GridComponent>
}
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),ShippedDate: new Date(8367642e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),ShippedDate: new Date(8367642e5),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VINET', EmployeeID: 3, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),ShippedDate: new Date(8367642e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),ShippedDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),ShippedDate: new Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),ShippedDate: new Date(8367642e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),ShippedDate: new Date(8367642e5),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VINET', EmployeeID: 3, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),ShippedDate: new Date(8367642e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),ShippedDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),ShippedDate: new Date(8367642e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'VINET', EmployeeID: 9, OrderDate: new
Date(8371098e5),ShippedDate: new Date(8367642e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(837369e6),ShippedDate: new Date(8367642e5),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'VINET', EmployeeID: 4, OrderDate: new
Date(8374554e5),ShippedDate: new Date(8367642e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'VINET', EmployeeID: 1, OrderDate: new
Date(8375418e5),ShippedDate: new Date(8367642e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),ShippedDate: new Date(8367642e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8377146e5),ShippedDate: new Date(8367642e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8377146e5),ShippedDate: new Date(8367642e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'VINET', EmployeeID: 8, OrderDate: new
Date(8379738e5),ShippedDate: new Date(8367642e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}];
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const dateTemplate = ((props: any) => {
const date: Date = new Date(props.OrderDate);
const day = date.getDate();
const month = date.toLocaleDateString('default', { month: 'short' });
const year = date.getFullYear();
return `${day}/${month}/${year}`;
})
return (
<div>
<GridComponent dataSource={data} height={315} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' />
<ColumnDirective field='Freight' headerText='Freight'
format='C2' />
<ColumnDirective field='OrderDate' headerText='Order
Date' template={dateTemplate} />
<ColumnDirective field='ShipCountry' headerText='Ship
Country' />
</ColumnsDirective>
</GridComponent>
</div>
)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),ShippedDate: new Date(8367642e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),ShippedDate: new Date(8367642e5),
DATASOURCE.TSX
{
OrderID: 10255, CustomerID: 'VINET', EmployeeID: 9, OrderDate: new
Date(8371098e5),ShippedDate: new Date(8367642e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(837369e6),ShippedDate: new Date(8367642e5),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'VINET', EmployeeID: 4, OrderDate: new
Date(8374554e5),ShippedDate: new Date(8367642e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'VINET', EmployeeID: 1, OrderDate: new
Date(8375418e5),ShippedDate: new Date(8367642e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),ShippedDate: new Date(8367642e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8377146e5),ShippedDate: new Date(8367642e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8377146e5),ShippedDate: new Date(8367642e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
You can use other React pipes, such as currency, decimal, percent, etc., to format other types of values
in the column template based on your requirements.
Custom formatting
Syncfusion Grid allows you to customize the formatting of data in the grid columns. You can apply
custom formats to numeric or date columns to display data in a specific way according to the
requirements. To apply custom formatting to grid columns in Syncfusion Grid, you can use the format
property. Here’s an example of how you can use custom formatting for numeric and date columns:
In the below example, the numberFormatOptions object is used as the format property for the
‘Freight’ column to apply a custom numeric format with four decimal places. Similarly, the
dateFormatOptions object is used as the format property for the ‘OrderDate’ column to apply a custom
date format displaying the date in the format of day-of-the-week, month abbreviation, day, and 2-digit
year (e.g. Sun, May 8, ‘23).
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
var numberFormatOptions = {
// Custom format for numeric columns
format: '##.0000'
}
var dateFormatOptions = {
// Custom format for date columns
type: 'Date',
format: "EEE, MMM d, ''yy",
}
return <GridComponent dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' textAlign="Right" />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format={numberFormatOptions} textAlign="Right" />
<ColumnDirective field='OrderDate' headerText='Order Date'
width='140' textAlign="Right" format={dateFormatOptions} />
</ColumnsDirective>
</GridComponent>
}
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const numberFormatOptions: Object = {
// Custom format for numeric columns
format: '##.0000'
}
const dateFormatOptions: Object = {
// Custom format for date columns
type: 'Date',
format: "EEE, MMM d, ''yy",
}
return <GridComponent dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' textAlign="Right" />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format={numberFormatOptions} textAlign="Right" />
<ColumnDirective field='OrderDate' headerText='Order Date'
width='140' textAlign="Right" format={dateFormatOptions} />
</ColumnsDirective>
</GridComponent>
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),ShippedDate: new Date(8367642e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),ShippedDate: new Date(8367642e5),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),ShippedDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),ShippedDate: new Date(8367642e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
To learn more about custom formatting, you can refer to Custom Date formatting and Custom Number
formatting.
Align the text of content
You can align the text in the content of a Grid column using the textAlign property. This property allows
you to specify the alignment of the text within the cells of a particular column in the Grid. By default, the
text is aligned to the left, but you can change the alignment by setting the value of the textAlign
property to one of the following options:
Here is an example of using the textAlign property to align the text of a Grid column:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const alignmentData = [
{ text: 'Left', value: 'Left' },
{ text: 'Right', value: 'Right' },
{ text: 'Center', value: 'Center' },
{ text: 'Justify', value: 'Justify' }
];
const changeAlignment = ((args) => {
grid.columns.forEach((col) => {
col.textAlign = args.value;
});
grid.refreshColumns();
})
return (
<div>
<label style={{ padding: '30px 17px 0 0' }}>Align the text for columns
:</label>
<DropDownListComponent dataSource={alignmentData} index={0} width="100"
change={changeAlignment}></DropDownListComponent>
<div style={{ padding: '40px 0 0 0' }}>
<GridComponent dataSource={data} height={315} ref={g => grid = g}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
/>
<ColumnDirective field='OrderDate' headerText='Order Date'
width='140' />
</ColumnsDirective>
</GridComponent></div></div>)
}
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, Grid, GridComponent } from
'@syncfusion/ej2-react-grids';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: Grid | null;
const alignmentData: any = [
{ text: 'Left', value: 'Left' },
{ text: 'Right', value: 'Right' },
{ text: 'Center', value: 'Center' },
{ text: 'Justify', value: 'Justify' },
];
const changeAlignment = ((args: any) => {
(grid as any).columns.forEach((col: any) => {
col.textAlign = (args as any).value;
});
(grid as any).refreshColumns();
})
return (
<div>
<label style={{ padding: '30px 17px 0 0' }}>Align the text for columns
:</label>
<DropDownListComponent dataSource={alignmentData} index={0} width="100"
change={changeAlignment}></DropDownListComponent>
<div style={{ padding: '40px 0 0 0' }}>
<GridComponent dataSource={data} height={315} ref={g => grid = g}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
/>
<ColumnDirective field='OrderDate' headerText='Order Date'
width='140' />
</ColumnsDirective>
</GridComponent></div></div>)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
The textAlign property only changes the alignment content not the column header. If you want to align
both the column header and content, you can use the headerTextAlign property.
Render boolean value as checkbox
The Grid component allows you to render boolean values as checkboxes in columns. This can be
achieved by using the displayAsCheckBox property, which is available in the ColumnDirective. This
property is useful when you have a boolean column in your Grid and you want to display the values as
checkboxes instead of the default text representation of true or false.
To enable the rendering of boolean values as checkboxes, you need to set the displayAsCheckBox
property of the ColumnDirective to true.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right"/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='120'/>
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C2" textAlign="Right"/>
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150'/>
<ColumnDirective field='Verified' headerText='Verified'
displayAsCheckBox={true} width='150'/>
</ColumnsDirective>
</GridComponent>;
}
;
export default App;
APP.TSX
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', EmployeeID: 8, OrderDate: new
Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
row data. If all the values in the row are empty or null, you can set the inner HTML of the corresponding
cell to an empty string to hide the checkbox.
Here is an example of how you can prevent a checkbox from being displayed in a blank row in a Grid:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const rowDataBound = (args) => {
let count = 0;
let keys = Object.keys(args.data);
for (let i = 0; i < keys.length; i++) {
if (
args.data[keys[i]] == null ||
args.data[keys[i]] == '' ||
args.data[keys[i]] == undefined
) {
count++;
}
}
if (count == keys.length) {
for (let i = 0; i < gridInstance.columns.length; i++) {
if (gridInstance.columns[i].displayAsCheckBox) {
args.row.children[i].innerHTML = '';
}
}
}
};
return <GridComponent ref={(grid) => (gridInstance = grid)}
dataSource={data} height={315} rowDataBound={rowDataBound}>
<ColumnsDirective>
<ColumnDirective field='OrderID' type="number" textAlign="Right"
headerTextAlign="Right" width='120' />
<ColumnDirective field='CustomerID' type="string" textAlign="Left"
headerTextAlign="Left" width='90' />
<ColumnDirective field="Freight" headerText="Freight" width="80"
textAlign="Right" />
<ColumnDirective field="Verified" headerText="Verified" width="100"
displayAsCheckBox="true" />
</ColumnsDirective>
</GridComponent>;
}
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let gridInstance: GridComponent;
const rowDataBound = (args) => {
let count = 0;
let keys = Object.keys(args.data);
for (let i = 0; i < keys.length; i++) {
if (
args.data[keys[i]] == null ||
args.data[keys[i]] == '' ||
args.data[keys[i]] == undefined
) {
count++;
}
}
if (count == keys.length) {
for (let i = 0; i < gridInstance.columns.length; i++) {
if (gridInstance.columns[i].displayAsCheckBox) {
args.row.children[i].innerHTML = '';
}
}
}
};
return <GridComponent id='grid' ref={g => gridInstance = g}
dataSource={data} height={315} rowDataBound={rowDataBound}>
<ColumnsDirective>
<ColumnDirective field='OrderID' type="number" textAlign="Right"
headerTextAlign="Right" width='120' />
<ColumnDirective field='CustomerID' type="string" textAlign="Left"
headerTextAlign="Left" width='90' />
<ColumnDirective field="Freight" headerText="Freight" width="80"
textAlign="Right" />
<ColumnDirective field="Verified" headerText="Verified" width="100"
displayAsCheckBox="true" />
</ColumnsDirective>
</GridComponent>
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 2, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: null, CustomerID: null, EmployeeID: null, OrderDate: null,
ShipName: null, ShipCity: null, ShipAddress: null,
ShipRegion: null, ShipPostalCode: null, ShipCountry: null, Freight:
null, Verified: null
},
{
OrderID: null, CustomerID: null, EmployeeID: null, OrderDate: null,
AutoFit columns
The Grid has a feature that allows to automatically adjust column widths based on the maximum
content width of each column when you double-click on the resizer symbol located in a specific column
header. This feature ensures that all data in the grid rows is displayed without wrapping. To use this
feature, you need to inject the Resize module and enable the resizer symbol in the column header by
setting the allowResizing property to true in the grid.
Resizing a column to fit its content using autoFit method
The autoFitColumns method resizes the column to fit the widest cell’s content without wrapping. You
can autofit specific columns at initial rendering by invoking the autoFitColumns method in dataBound
event.
To use autoFitColumns method, you need to inject Resize module in the grid.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Resize }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const dataBound = () => {
if (grid) {
grid.autoFitColumns(['ShipName', 'ShipAddress']);
}
};
return <GridComponent dataSource={data} height={315}
dataBound={dataBound} ref={g => grid = g}>
<Inject services={[Resize]}/>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='150'/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150'/>
<ColumnDirective field='ShipName' headerText='Ship Name'
width='150'/>
<ColumnDirective field='ShipAddress' headerText='Ship Address'
width='150' format="yMd"/>
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150'/>
</ColumnsDirective>
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, Grid, GridComponent, Inject,
Resize } from '@syncfusion/ej2-react-grids';
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
You can autofit all the columns by invoking the autoFitColumns method without specifying column
names.
AutoFit columns with empty space
The Autofit feature is utilized to display columns in a grid based on the defined width specified in the
columns declaration. If the total width of the columns is less than the width of the grid, this means that
white space will be displayed in the grid instead of the columns auto-adjusting to fill the entire grid
width.
You can enable this feature by setting the autoFit property set to true. This feature ensures that the
column width is rendered only as defined in the Grid column definition.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Resize }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} height={400} width={850}
allowResizing={true} autoFit={true}>
<Inject services={[Resize]}/>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
minWidth='100' width='150' maxWidth='200'
textAlign='Right'></ColumnDirective>
<ColumnDirective field='CustomerID' headerText='Customer ID'
minWidth='8' width='150'></ColumnDirective>
<ColumnDirective field='Freight' headerText='Freight'
minWidth='8' width='120' format='C2' textAlign='Right'/>
<ColumnDirective field='ShipCity' headerText='Ship City'
allowResizing={false} width='150' textAlign='Right'/>
<ColumnDirective field='ShipCountry' headerText='Ship Country'
minWidth='8' width='150'></ColumnDirective>
</ColumnsDirective>
</GridComponent>;
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Resize }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} height={400}
width={850} allowResizing={true} autoFit={true} >
<Inject services={[Resize]} />
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
minWidth='100' width='150' maxWidth='200'
textAlign='Right'></ColumnDirective>
<ColumnDirective field='CustomerID' headerText='Customer ID'
minWidth='8' width='150'></ColumnDirective>
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
If any one of the ColumnDirective width is undefined, then the particular column will automatically
adjust to fill the entire width of the grid table, even if you have enabled the autoFit property of grid.
AutoFit columns when changing column visibility using column chooser
In Syncfusion Grid, you can auto-fit columns when the column visibility is changed using the column
chooser. This can be achieved by calling the autoFitColumns method in the actionComplete event. By
using the requestType property in the event arguments, you can differentiate between different actions,
and then call the autoFitColumns method when the request type is columnState.
Here’s an example code snippet in React that demonstrates how to auto fit columns when changing
column visibility using column chooser:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Toolbar, Inject,
ColumnChooser, Resize } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const toolbarOptions = ['ColumnChooser'];
const actionComplete = ((args) => {
if (args.requestType === 'columnstate') {
grid.autoFitColumns();
}
})
return (
<div>
<GridComponent dataSource={data} height={315} ref={g => grid = g}
allowResizing={true} toolbar={toolbarOptions} showColumnChooser={true}
actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' />
<ColumnDirective field='CustomerID' headerText='Customer
ID' />
<ColumnDirective field='Freight' headerText='Freight' />
<ColumnDirective field='OrderDate' headerText='Order
Date' format='yMd' />
</ColumnsDirective>
<Inject services={[Toolbar, ColumnChooser, Resize]} />
</GridComponent></div>
)
}
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, Grid, GridComponent,
ActionEventArgs, Toolbar, Inject, ColumnChooser, Resize } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: Grid | null;
const toolbarOptions: any = ['ColumnChooser'];
const actionComplete = ((args: ActionEventArgs) => {
if ((args as any).requestType === 'columnstate') {
(grid as any).autoFitColumns();
}
})
return (
<div>
<GridComponent dataSource={data} height={315} ref={g => grid = g}
allowResizing={true} toolbar={toolbarOptions} showColumnChooser={true}
actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' />
<ColumnDirective field='CustomerID' headerText='Customer
ID' />
<ColumnDirective field='Freight' headerText='Freight' />
<ColumnDirective field='OrderDate' headerText='Order
Date' format='yMd' />
</ColumnsDirective>
<Inject services={[Toolbar, ColumnChooser, Resize]} />
</GridComponent></div>
)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Resize }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { inventoryData } from './datasource';
function App() {
let grid: GridComponent | null;
const dataBound = (() => {
grid.autoFitColumns(['Inventor', 'Number of INPADOC patents',
'Mainfieldsofinvention'], 1, 3);
})
return (
<div>
<GridComponent dataSource={inventoryData} height={315} ref={g =>
grid = g} allowResizing={true} dataBound={dataBound}>
<ColumnsDirective>
<ColumnDirective field='Inventor' headerText='Inventor'
width='120' clipMode= 'EllipsisWithTooltip' textAlign='Right' />
<ColumnDirective field='NumberofPatentFamilies'
headerText='Number of Patent Families' width='150' />
<ColumnDirective field='Country' headerText='Country'
width='130' />
<ColumnDirective field='Number of INPADOC patents'
headerText='Number of INPADOC patents'width='150'/>
<ColumnDirective field='Active' headerText='Active'
width='250' />
<ColumnDirective field='Mainfieldsofinvention'
headerText='Main fields of invention' width='120'/>
</ColumnsDirective>
<Inject services={[Resize]} />
</GridComponent></div>
)
}
export default App;
DATASOURCE.JSX
export const inventoryData = [
{
'Inventor': 'Kia Silverbrook',
'NumberofPatentFamilies': 4737,
'Country': 'Australia',
'Number of INPADOC patents': 9839,
'Active': '1994-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics,Lab-on-a-chip, MEMS, Mechanical, VLSI',
},
{
'Inventor': 'Shunpei Yamazaki',
'NumberofPatentFamilies': 4677,
'Country': 'Japan',
'Number of INPADOC patents': '10000+',
'Active': '1976-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, Solar cells, Flash memory, OLED',
},
{
'Inventor': 'Lowell L. Wood, Jr.',
'NumberofPatentFamilies': 1419,
'Country': 'USA',
'Number of INPADOC patents': 1332,
'Active': '1977-2016',
'Mainfieldsofinvention': 'Mosquito laser, Nuclear weapons',
},
{
'Inventor': 'Paul Lapstun',
'NumberofPatentFamilies': 1281,
'Country': 'Australia',
'Number of INPADOC patents': 3099,
'Active': '2000-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics, CGI, VLSI',
},
{
'Inventor': 'Gurtej Sandhu',
'NumberofPatentFamilies': 1255,
'Country': 'India',
'Number of INPADOC patents': 2038,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film processes and materials, VLSI,
Semiconductor device fabrication',
},
{
'Inventor': 'Jun Koyama',
'NumberofPatentFamilies': 1240,
'Country': 'Japan',
'Number of INPADOC patents': 4126,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, OLED',
},
{
'Inventor': 'Roderick A. Hyde',
'NumberofPatentFamilies': 1240,
'Country': 'USA',
'Number of INPADOC patents': 3360,
'Active': '2001-2016',
'Mainfieldsofinvention': 'Various',
},
{
'Inventor': 'Leonard Forbes',
'NumberofPatentFamilies': 1093,
'Country': 'Canada',
'Number of INPADOC patents': 1398,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Semiconductor Memories, CCDs, Thin film
processes and materials, VLSI',
},
{
'Inventor': 'Thomas Edison',
'NumberofPatentFamilies': 1084,
'Country': 'USA',
'Number of INPADOC patents': 2332,
'Active': '1847(b)-1931(d)',
'Mainfieldsofinvention': 'Electric power, Lighting, Batteries,
Phonograph, Cement, Telegraphy, Mining',
},
{
'Inventor': 'Donald E. Weder',
'NumberofPatentFamilies': 999,
'Country': 'USA',
'Number of INPADOC patents': 1993,
'Active': '1976-2015',
'Mainfieldsofinvention': 'Florist supplies',
},
{
'Inventor': 'George Albert Lyon',
'NumberofPatentFamilies': 993,
'Country': 'Canada',
'Number of INPADOC patents': 'NA',
'Active': '1882(b)-1961(d)',
'Mainfieldsofinvention': 'Automotive, Stainless steel products',
},
{
'Inventor': 'John F. O\'Connor',
'NumberofPatentFamilies': 949,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1864(b)-1938(d)',
DATASOURCE.TSX
export const inventoryData: Object[] = [
{
'Inventor': 'Kia Silverbrook',
'NumberofPatentFamilies': 4737,
'Country': 'Australia',
'Number of INPADOC patents': 9839,
'Active': '1994-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics,Lab-on-a-chip, MEMS, Mechanical, VLSI',
},
{
'Inventor': 'Shunpei Yamazaki',
'NumberofPatentFamilies': 4677,
'Country': 'Japan',
'Number of INPADOC patents': '10000+',
'Active': '1976-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, Solar cells, Flash memory, OLED',
},
{
'Inventor': 'Lowell L. Wood, Jr.',
'NumberofPatentFamilies': 1419,
'Country': 'USA',
'Number of INPADOC patents': 1332,
'Active': '1977-2016',
'Mainfieldsofinvention': 'Mosquito laser, Nuclear weapons',
},
{
'Inventor': 'Paul Lapstun',
'NumberofPatentFamilies': 1281,
'Country': 'Australia',
'Number of INPADOC patents': 3099,
'Active': '2000-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics, CGI, VLSI',
},
{
'Inventor': 'Gurtej Sandhu',
'NumberofPatentFamilies': 1255,
'Country': 'India',
'Number of INPADOC patents': 2038,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film processes and materials, VLSI,
Semiconductor device fabrication',
},
{
'Inventor': 'Jun Koyama',
'NumberofPatentFamilies': 1240,
'Country': 'Japan',
'Number of INPADOC patents': 4126,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, OLED',
},
{
'Inventor': 'Roderick A. Hyde',
'NumberofPatentFamilies': 1240,
'Country': 'USA',
'Number of INPADOC patents': 3360,
'Active': '2001-2016',
'Mainfieldsofinvention': 'Various',
},
{
'Inventor': 'Leonard Forbes',
'NumberofPatentFamilies': 1093,
'Country': 'Canada',
'Country': 'USA',
'Number of INPADOC patents': 2254,
'Active': '1996-2016',
'Mainfieldsofinvention': 'Various',
},
{
'Inventor': 'Francis H. Richards',
'NumberofPatentFamilies': 894,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1850(b)-19??(d)',
'Mainfieldsofinvention': 'Mechanical, automation',
},
{
'Inventor': 'Kangguo Cheng',
'NumberofPatentFamilies': 884,
'Country': 'USA',
'Number of INPADOC patents': 1314,
'Active': '2004-2016',
'Mainfieldsofinvention': 'Semiconductor device fabrication,
Semiconductor memory, Semiconductor device',
}
];
Lock columns
The Syncfusion Grid allows you to lock columns, which prevents them from being reordered and moves
them to the first position. This functionality can be achieved by setting the lockColumn property to true,
which locks the column and moves it to the first position in the grid.
Here’s an example of how you can use the lockColumn property to lock a ColumnDirective in the
Syncfusion Grid:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Reorder }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const customAttributes = { class: 'customcss' };
return <GridComponent dataSource={data} allowReordering={true}
allowSelection={false} height={315}>
<Inject services={[Reorder]}/>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='ShipCity' width='100' lockColumn={true}
customAttributes={{ class: 'customcss' }}/>
<ColumnDirective field='ShipName' width='100'/>
<ColumnDirective field='ShipPostalCode' width='120'/>
<ColumnDirective field='ShipRegion' width='140'/>
</ColumnsDirective>
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Reorder }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const customAttributes: any = { class: 'customcss' };
return <GridComponent dataSource={data} allowReordering={true}
allowSelection={false} height={315}>
<Inject services={[Reorder]} />
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right" />
<ColumnDirective field='CustomerID' width='100' />
<ColumnDirective field='ShipCity' width='100' lockColumn={true}
customAttributes={{ class: 'customcss' }} />
<ColumnDirective field='ShipName' width='100' />
<ColumnDirective field='ShipPostalCode' width='120' />
<ColumnDirective field='ShipRegion' width='140' />
</ColumnsDirective>
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return (
<div>
<GridComponent dataSource={data} height={315} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' />
<ColumnDirective field='CustomerID' headerText='Customer
ID' width='100' />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
* Hiding a column using the visible property only affects the UI representation of the grid. The data for
the hidden column will still be available in the underlying data source, and can be accessed or modified
programmatically.
* When a column is hidden, its width is not included in the calculation of the total grid width.
* To hide a column permanently, you can set its visible property to false in the column definition, or
remove the column definition altogether.
Using method
You can also show or hide columns in the React Grid using the showColumns and hideColumns methods
of the grid component. These methods allow you to show or hide columns based on either the
headerText or the field of the column.
Based on header text
You can dynamically show or hide columns in the Grid based on the header text by invoking the
showColumns or hideColumns methods. These methods take an array of ColumnDirective header
texts as the first parameter, and the value headerText as the second parameter to specify that you are
showing or hiding columns based on the header text.
Here’s an example of how to show or hide a ColumnDirective based on the headerText in the React
Grid:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import {ButtonComponent} from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const show = () => {
if (grid) {
grid.showColumns('Customer ID', 'headerText'); //show by HeaderText
}
}
const hide = () => {
if (grid) {
grid.hideColumns('Customer ID', 'headerText'); //hide by HeaderText
}
}
return (<div>
<ButtonComponent cssClass='e-info' onClick={show}>Show</ButtonComponent>
<ButtonComponent style={{marginLeft:'20px'}} cssClass='e-info'
onClick={hide}>Hide</ButtonComponent>
<GridComponent dataSource={data} height={295} ref={g => grid = g}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='EmployeeID' headerText='Employee ID'
width='100' textAlign="Right" />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format="C2" textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' />
</ColumnsDirective>
</GridComponent>
</div>)
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, Grid, GridComponent } from
'@syncfusion/ej2-react-grids';
import {ButtonComponent} from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: Grid | null;
const show = () => {
if (grid) {
grid.showColumns('Customer ID', 'headerText'); //show by HeaderText
}
}
const hide = () => {
if (grid) {
grid.hideColumns('Customer ID', 'headerText'); //hide by HeaderText
}
}
return (<div>
<ButtonComponent cssClass='e-info' onClick={show}>Show</ButtonComponent>
<ButtonComponent style={{marginLeft:'20px'}} cssClass='e-info'
onClick={hide}>Hide</ButtonComponent>
<GridComponent dataSource={data} height={295} ref={g => grid = g}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='EmployeeID' headerText='Employee ID'
width='100' textAlign="Right" />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format="C2" textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' />
</ColumnsDirective>
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
Based on field
You can dynamically show or hide columns in the Grid using external buttons based on the field by
invoking the showColumns or hideColumns methods. These methods take an array of
ColumnDirective fields as the first parameter, and the value field as the second parameter to specify
that you are showing or hiding columns based on the field.
Here’s an example of how to show or hide a ColumnDirective based on the field in the React Grid:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import {ButtonComponent} from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const show = () => {
if (grid) {
grid.showColumns('CustomerID', 'field'); //show by field
}
}
const hide = () => {
if (grid) {
grid.hideColumns('CustomerID', 'field'); //hide by field
}
}
return (<div>
<ButtonComponent cssClass='e-info' onClick={show}>Show</ButtonComponent>
<ButtonComponent style={{marginLeft:'20px'}} cssClass='e-info'
onClick={hide}>Hide</ButtonComponent>
<GridComponent dataSource={data} height={295} ref={g => grid = g}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='EmployeeID' headerText='Employee ID'
width='100' textAlign="Right" />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format="C2" textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' />
</ColumnsDirective>
</GridComponent>
</div>)
};
export default App;
APP.TSX
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
Here is an example code that demonstrates how to control grid actions for specific columns:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Sort, Filter,
Group, Reorder, Inject, Toolbar, Page, Resize } from '@syncfusion/ej2-react-
grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const toolbarOptions = ['Search'];
return <GridComponent dataSource={data} allowSorting={true}
allowPaging={true} allowResizing={true} toolbar={toolbarOptions}
allowFiltering={true} allowReordering={true} allowGrouping={true}
height={230}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" isPrimaryKey={true} allowGrouping={false}
allowResizing={false}/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' allowSorting={false}/>
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
allowReordering={false}/>
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' allowSearching={false}/>
<ColumnDirective field='Freight' headerText='Freight' width='100'
format="C2" textAlign="Right" allowFiltering={false}/>
</ColumnsDirective>
<Inject services={[Sort, Filter, Group, Reorder, Toolbar, Page, Resize]}
/>
</GridComponent>
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Sort, Filter,
Group, Reorder, Inject, Toolbar, Page, Resize } from '@syncfusion/ej2-react-
grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const toolbarOptions: any = ['Search'];
return <GridComponent dataSource={data} allowSorting={true}
allowPaging={true} allowResizing={true} toolbar={toolbarOptions}
allowFiltering={true} allowReordering={true} allowGrouping={true}
height={230}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" isPrimaryKey={true} allowGrouping={false}
allowResizing={false}/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' allowSorting={false}/>
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
allowReordering={false}/>
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' allowSearching={false}/>
<ColumnDirective field='Freight' headerText='Freight' width='100'
format="C2" textAlign="Right" allowFiltering={false}/>
</ColumnsDirective>
<Inject services={[Sort, Filter, Group, Reorder, Toolbar, Page, Resize]}
/>
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
• getColumns:
• getColumnByField:
This method returns the column object that matches the specified field name.
`
let column = grid.getColumnByField('ProductName');
`
• getColumnByUid:
This method returns the column object that matches the specified UID.
`
let column = grid.getColumnByUid();
`
• getVisibleColumns:
• getForeignKeyColumns:
• getColumnFieldNames:
This method returns an array of field names of all the columns in the Grid.
`
let fieldNames = grid.getColumnFieldNames()
`
For a complete list of column methods and properties, refer to this section.
Updating column definitions
You can update the column definitions in the Grid using the columns property. You can modify the
properties of the column objects in the columns array to update the columns dynamically. For example,
you can change the headerText, width, visible, and other properties of a column to update its
appearance and behavior in the grid and then call the refreshColumns method to apply the changes to
the grid.
APP.JSX
import { ColumnDirective, ColumnsDirective, Grid, GridComponent, Sort,
Filter, Group, Reorder, Inject, Toolbar, Page } from '@syncfusion/ej2-react-
grids';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const updateColumn = (() => {
// Modifying column properties
grid.columns[0].textAlign = 'Center';
grid.columns[0].width = '100';
grid.columns[2].visible = false;
grid.columns[1].customAttributes = { class: 'customcss' };
// Applying changes to the grid
grid.refreshColumns();
})
return (<div>
<ButtonComponent id='btnId' cssClass='e-info'
onClick={updateColumn}>Update Columns</ButtonComponent>
<GridComponent dataSource={data} ref={g => grid = g} height={230}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right" isPrimaryKey={true} allowGrouping={false}
allowResizing={false} />
APP.TSX
import { ColumnDirective, ColumnsDirective, Grid, GridComponent, Sort,
Filter, Group, Reorder, Inject } from '@syncfusion/ej2-react-grids';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: Grid | null;
const updateColumn = (() => {
// Modifying column properties
(grid as any).columns[0].textAlign = 'Center';
(grid as any).columns[0].width = '100';
(grid as any).columns[2].visible = false;
(grid as any).columns[1].customAttributes = { class: 'customcss' };
// Applying changes to the grid
(grid as any).refreshColumns();
})
return (<div>
<ButtonComponent id='btnId' cssClass='e-info'
onClick={updateColumn}>Update Columns</ButtonComponent>
<GridComponent dataSource={data} ref={g => grid = g} height={230}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right" isPrimaryKey={true} allowGrouping={false}
allowResizing={false} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' allowSorting={false} />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='100' allowReordering={false} />
<ColumnDirective field='ShipCountry' headerText='Ship
Country' width='100' allowSearching={false} />
<ColumnDirective field='Freight' headerText='Freight'
width='100' format="C2" textAlign="Right" allowFiltering={false} />
</ColumnsDirective>
<Inject services={[Sort, Filter, Group, Reorder]} />
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
Adding/Removing Columns
The Grid component allows you to dynamically add or remove columns to and from the grid using the
[columns]https://helpej2.syncfusion.com/react/documentation/api/grid/column/#columns) property,
which can be accessed through the instance of the Grid.
To add a new column to the Grid, you can directly push the new column object to the columns
property.To remove a column from the Grid, you can use the pop method, which removes the last
element from the columns array of the Grid. Alternatively, you can use the splice method to remove a
specific column from the columns array.
Here's an example of how you can add and remove a column from the grid:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Sort, Filter,
Group, Reorder, Inject, Toolbar, Page, ColumnModel } from '@syncfusion/ej2-
react-grids';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const addColumn = (() => {
const newColumns = [
{ field: 'EmployeeID', headerText: 'EmployeeID', width: 120 },
{ field: 'OrderDate', headerText: 'Order Date', width: 120, format:
'yMd' },
];
APP.TSX
import { ColumnDirective, ColumnsDirective, Grid, GridComponent, Sort,
Filter, Group, Reorder, Inject, Toolbar, Page, ColumnModel } from
'@syncfusion/ej2-react-grids';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: Grid | null;
const addColumn = (() => {
const newColumns: ColumnModel[] = [
{ field: 'EmployeeID', headerText: 'EmployeeID', width: 120 },
{ field: 'OrderDate', headerText: 'Order Date', width: 120, format:
'yMd' },
];
for (const col of newColumns) {
(grid as any).columns.push(col);
}
(grid as any).refreshColumns();
});
const deleteColumn = (() => {
(grid as any).columns.pop();
(grid as any).refreshColumns();
});
return (<div>
<ButtonComponent id='btnAdd' cssClass='e-info' onClick={addColumn}>Add
Column</ButtonComponent>
<ButtonComponent id='btnDel' cssClass='e-info'
onClick={deleteColumn}>Delete Column</ButtonComponent>
<GridComponent dataSource={data} ref={g => grid = g} height={230}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" isPrimaryKey={true} allowGrouping={false}
allowResizing={false} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' allowSorting={false} />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
allowReordering={false} />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' allowSearching={false} />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format="C2" textAlign="Right" allowFiltering={false} />
</ColumnsDirective>
<Inject services={[Sort, Filter, Group, Reorder, Toolbar, Page]} />
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} height={315}>
<ColumnsDirective>
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
See also
</div>);
}
;
export default App;
APP.TSX
import { getValue } from '@syncfusion/ej2-base';
import { ColumnDirective, ColumnsDirective, GridComponent,
RowDataBoundEventArgs } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const rowDataBound = (args: RowDataBoundEventArgs) => {
if (args.row) {
if (getValue('Freight', args.data) < 30) {
args.row.classList.add('below-30');
} else if (getValue('Freight', args.data) < 80) {
args.row.classList.add('below-80');
} else {
args.row.classList.add('above-80');
}
}
}
return (<div>
<GridComponent dataSource={data} height={315} enableHover={false}
allowSelection={false}
rowDataBound={rowDataBound}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='EmployeeID' headerText='Employee ID'
width='100' textAlign="Right" />
<ColumnDirective field='Freight' headerText='Freight' width='80'
textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' />
</ColumnsDirective>
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
The queryCellInfo event can also be used to customize cells and is triggered for every cell in the grid. It
can be useful when you need to customize cells based on certain conditions or criteria.
Using CSS
You can apply styles to the rows using CSS selectors. The Grid provides a class name for each row
element, which you can use to apply styles to that specific row.
Customize alternate rows
You can customize the appearance of the alternate rows using CSS. This can be useful for improving the
readability of the data and making it easier to distinguish between rows. By default, Syncfusion Grid
provides the CSS class .e-altrow to style the alternate rows. You can customize this default style by
overriding the .e-altrow class with your custom CSS styles.
To change the background color of the alternate rows, you can add the following CSS code to your
application's stylesheet:
`css
.e-grid .e-altrow {
background-color: #fafafa;
}
`
Here's an example of how to use the .e-altrow class to style alternate rows:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings = { pageSize: 7 };
return <GridComponent dataSource={data} allowPaging={true}
pageSettings={pageSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100' textAlign="Right"/>
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page,
PageSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings: PageSettingsModel = { pageSize: 7 };
return <GridComponent dataSource={data} allowPaging={true}
pageSettings={pageSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right" />
<ColumnDirective field='CustomerID' width='100' />
<ColumnDirective field='EmployeeID' width='100' textAlign="Right" />
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right" />
<ColumnDirective field='ShipCountry' width='100' />
</ColumnsDirective>
<Inject services={[Page]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page,
PageSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings: PageSettingsModel = { pageSize: 7 };
return <GridComponent dataSource={data} allowPaging={true}
pageSettings={pageSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100'
textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right"/>
<ColumnDirective field='ShipCountry' width='100'/>
</ColumnsDirective>
<Inject services={[Page]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
Using method
The Grid provides below methods to customize the appearance of the grid rows :
1. getRowByIndex: This method returns the HTML element of a row at the specified index. You can
use this method to apply custom styles to a specific row.
2. getRowIndexByPrimaryKey: This method returns the index of the row with the specified primary
key. You can use this method to get the index of a specific row and then apply custom styles to
it.
3. getRows: This method returns an array of all the row elements in the Grid. You can use this
method to apply custom styles to all rows or to a specific set of rows based on some condition.
4. getRowInfo: This method returns the data object and index of the row corresponding to the
specified row element. You can use this method to apply custom styles based on the data in a
row.
5. getSelectedRowIndexes: This method returns an array of the indexes of the selected rows in the
Grid. You can use this method to apply custom styles to the selected rows.
6. getSelectedRows:This method returns an array of the HTML elements representing the selected
rows in the grid. You can use this method to directly loop through the selected rows and
customize their styles.
The following example demonstrates how to use getRowByIndex methods to customize the appearance
of the row inside the dataBound event of the grid.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const customizeRow = (() => {
(grid.getRowByIndex(2)).style.background = 'rgb(193, 228, 234)';
})
return <GridComponent ref={g => grid = g} dataSource={data}
dataBound={customizeRow}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right" />
<ColumnDirective field='CustomerID' width='100' />
<ColumnDirective field='EmployeeID' width='100' textAlign="Right" />
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right" />
<ColumnDirective field='ShipCountry' width='100' />
</ColumnsDirective>
</GridComponent>
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const customizeRow = (() => {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
Row height
The Syncfusion Grid allows you to customize the height of rows based on your needs. This feature can
be useful when you need to display more content in a row or when you want to reduce the height of
rows to fit its content. You can achieve this by using the rowHeight property of the Grid component. This
property allows you to change the height of the entire grid row to your desired value.
In the below example, we will demonstrate how to dynamically change the height of the rows using the
rowHeight property.
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
let heightRow = { small: 20, medium: 40, big: 60 };
const changeHeight = ((args) => {
grid.rowHeight = heightRow[args.target.id];
});
return (
<div>
<ButtonComponent id="small" cssClass="e-small"
onClick={changeHeight}>Change height 20px</ButtonComponent>
<ButtonComponent id="medium" cssClass="e-small"
onClick={changeHeight}>Change height 40px</ButtonComponent>
<ButtonComponent id="big" cssClass="e-small"
onClick={changeHeight}>Change height 60px</ButtonComponent>
<GridComponent dataSource={data} height={315} ref={g => grid = g}
rowHeight={42}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
/>
<ColumnDirective field='OrderDate' headerText='Order Date'
width='140' format='yMd' />
</ColumnsDirective>
</GridComponent></div>)
}
export default App;
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
let heightRow: Object = { small: 20, medium: 40, big: 60 };
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
* The rowHeight property can only be used to set the height of the entire grid row. It cannot be
used to set the height of individual cells within a row.
* The rowHeight property applies the height to all rows in the grid, including the header and footer
rows.
* You can also set the height for a specific row using the rowHeight property of the
corresponding row object in the rowDataBound event.
Customize row height for particular row
Customizing the row height for a particular row can be useful when you want to display more content in
a particular row, reduce the height of a row to fit its content, or make a specific row stand out from the
other rows in the grid. This can be achieved by using the rowHeightproperty of the Grid component
along with the rowDataBound event.
The rowHeight property of the Grid component allows you to set the height of all rows in the grid to a
specific value. However, if you want to customize the row height for a specific row based on the row
data, you can use the rowDataBound event. This event is triggered every time a request is made to
access row information, element, or data, and before the row element is appended to the Grid element.
In the below example, the row height for the row with OrderID as '10249' is set as '90px' using the
rowDataBound event.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { DataManager, Query } from '@syncfusion/ej2-data';
import { data } from './datasource';
function App() {
const rowDataBound = (args) => {
if (args.data.OrderID === 10249) {
args.rowHeight = 90;
}
};
const gridData = new DataManager(data).executeLocal(new Query().take(8));
return (<div>
<GridComponent dataSource={gridData} height={315}
rowDataBound={rowDataBound}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign='Right'/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='140'/>
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C"/>
<ColumnDirective field='OrderDate' headerText='OrderDate' width='140'
format='yMd'/>
</ColumnsDirective>
</GridComponent>
</div>);
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent,
RowDataBoundEventArgs } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { DataManager, Query } from '@syncfusion/ej2-data';
import { data } from './datasource';
interface OrderDetails {
OrderID?: number;
}
function App() {
const rowDataBound = (args: RowDataBoundEventArgs) => {
if ((args.data as OrderDetails).OrderID === 10249) {
args.rowHeight = 90;
}
}
const gridData: Object = new DataManager(data).executeLocal(new
Query().take(8));
return (<div>
<GridComponent dataSource={gridData} height={315}
rowDataBound={rowDataBound}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='140' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C" />
<ColumnDirective field='OrderDate' headerText='OrderDate' width='140'
format='yMd' />
</ColumnsDirective>
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
}
export default App;
APP.TSX
import { SwitchComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import React, { useState } from 'react';
import { data } from './datasource';
function App() {
const [enableRowHover, setEnableRowHover] = useState(true);
const changeValue = (() => {
setEnableRowHover(!enableRowHover);
});
return (
<div>
<label style={{ padding: "10px 10px" }}>
Enable/Disable Row Hover
</label>
<SwitchComponent id="switch" checked={enableRowHover}
change={changeValue}></SwitchComponent>
<GridComponent dataSource={data} enableHover={enableRowHover}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
/>
<ColumnDirective field='OrderDate' headerText='Order Date'
width='140' format='yMd' />
</ColumnsDirective>
</GridComponent></div>)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
The enableHover property applies to the entire grid, not individual rows or columns.
How to get the row information when hovering over the cell
You can retrieve row information when hovering over a specific cell. This can be useful if you want to
display additional details or perform some action based on the data in the row. This can be achieved by
using the rowDataBound event and the getRowInfo method of the Grid.
• The rowDataBound event is triggered every time a request is made to access row information,
element, or data, before the row element is appended to the Grid element.
• The getRowInfo method is used to retrieve the row information when hovering over a specific
cell. This method takes a single parameter, which is the target element that is being hovered
over.
Here's an example that demonstrates how to use the rowDataBound event and getRowInfo method
to retrieve the row information when hovering over a cell in the Syncfusion Grid.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const rowDataBound = ((args) => {
args.row.addEventListener('mouseover', (e) => {
const rowInformation = grid.getRowInfo(e.target);
console.log(rowInformation);
document.getElementById('show').innerHTML = `
<table style="border-collapse: collapse; width: 600px;">
<tr style="border: 2px solid;">
<td style="padding: 2px;"><b>Row Information:</b></td>
</tr>
<tr style="border: 2px solid; padding: 8px;">
<th style="border: 2px solid; padding: 8px; width:
120px;"><b>Class Name</b>
</th>
<td style="border: 2px solid; padding:
8px;">${rowInformation.row.className}
</td>
</tr>
<tr style="border: 2px solid;">
<th style="border: 2px solid; padding: 8px;"><b>Row
Index</b>
</th>
<td style="border: 2px solid; padding:
8px;">${rowInformation.rowIndex}
</td>
</tr>
</table>`;
});
});
return (
<div>
<div id='show' style={{ padding: "0px 0px 20px 0px" }} ></div>
<GridComponent dataSource={data} ref={g => grid = g}
rowDataBound={rowDataBound}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
/>
<ColumnDirective field='OrderDate' headerText='Order Date'
width='140' format='yMd' />
</ColumnsDirective>
</GridComponent></div>)
}
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent,
RowDataBoundEventArgs } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const rowDataBound = ((args:RowDataBoundEventArgs) => {
args.row.addEventListener('mouseover', (e: MouseEvent) => {
const rowInformation = (grid as GridComponent).getRowInfo(e.target as
HTMLElement);
console.log(rowInformation);
(document.getElementById('show') as HTMLElement).innerHTML = `
<table style="border-collapse: collapse; width: 600px;">
<tr style="border: 2px solid;">
<td style="padding: 2px;"><b>Row Information:</b></td>
</tr>
<tr style="border: 2px solid; padding: 8px;">
<th style="border: 2px solid; padding: 8px; width:
120px;"><b>Class Name</b>
</th>
<td style="border: 2px solid; padding:
8px;">${rowInformation.row.className}
</td>
</tr>
<tr style="border: 2px solid;">
<th style="border: 2px solid; padding: 8px;"><b>Row
Index</b>
</th>
<td style="border: 2px solid; padding:
8px;">${rowInformation.rowIndex}
</td>
</tr>
</table>`;
});
});
return (
<div>
<div id='show' style={{ padding: "0px 0px 20px 0px" }} ></div>
<GridComponent dataSource={data} ref={g => grid = g}
rowDataBound={rowDataBound}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
/>
<ColumnDirective field='OrderDate' headerText='Order Date'
width='140' format='yMd' />
</ColumnsDirective>
</GridComponent></div>)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
The getRowInfo method can only be used in the rowDataBound event. Attempting to use it elsewhere
will result in an error.
Row pinning (Frozen) in React Grid component
The Syncfusion React Grid allows you to freeze rows to keep them visible while scrolling vertically
through large datasets. This feature enhances the experience by maintaining important information
within view at all times.
In the following example, the frozenRows property is set to 3. This configuration freezes the top three
rows of the grid, and they will remain fixed in their positions while the rest of the grid can be scrolled
vertically.
APP.JSX
import { ColumnDirective, ColumnsDirective, Freeze, GridComponent, Inject }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { NumericTextBoxComponent } from '@syncfusion/ej2-react-inputs';
function App() {
let grid;
let textBox;
const frozenRows = () => {
grid.frozenRows = textBox.value;
}
return (
<div>
<label style={{ padding: "10px 10px 26px 0" }}> Change the frozen rows:
</label>
<NumericTextBoxComponent ref={t => textBox = t} id='frozenrows' min={0}
max={5} validateDecimalOnType={true} decimals={0} value={2} format='n'
width='150'></NumericTextBoxComponent>
<ButtonComponent style={{ marginLeft: "5px" }}
onClick={frozenRows}>UPDATE</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data} height={315}
frozenRows={2}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='150'
/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='180' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
/>
<ColumnDirective field='ShipCity' headerText='Ship City'
width='200' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name'
width='180' />
<ColumnDirective field='ShipRegion' headerText='Ship Region'
width='220' />
<ColumnDirective field='ShipAddress' headerText='Ship Address'
width='200' />
<ColumnDirective field='OrderDate' headerText='Order Date'
width='140' format='yMd' />
</ColumnsDirective>
<Inject services={[Freeze]} />
</GridComponent></div>)
}
export default App;
APP.TSX
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
* Frozen rows should not be set outside the grid view port.
* Frozen Grid will support row virtualization feature, which helps to improve the Grid performance while
loading a large dataset.
* The frozen feature is supported only for the rows that are visible in the current view.
* You can use both frozenColumns property and frozenRows property in the same application.
Change default frozen rows line color
You can easily customize the frozen line background color of frozen rows in the Syncfusion Grid
component by applying custom CSS styles to the specific frozen row. This allows you to change the
background color of frozen rows to match your application's design and theme.
To change the default frozen rows line color, you can use the following CSS class:
`css
.e-grid .e-frozenrow-border {
background-color: rgb(5, 114, 47);
}
`
By applying this CSS class, you can set the background color of frozen rows to the specified RGB color.
The following example demonstrates how to change the default frozen rows line color using CSS.
APP.JSX
import { ColumnDirective, ColumnsDirective, Freeze, GridComponent, Inject }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return (
<div>
APP.TSX
import { ColumnDirective, ColumnsDirective, Freeze, GridComponent, Inject }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return (
<div>
<GridComponent dataSource={data} height={315} frozenRows={3}
allowSelection={false} enableHover={false}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='150'
/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='180' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
/>
<ColumnDirective field='ShipCity' headerText='Ship City'
width='200' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name'
width='180' />
<ColumnDirective field='ShipRegion' headerText='Ship Region'
width='220' />
<ColumnDirective field='ShipAddress' headerText='Ship Address'
width='200' />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
Deprecated methods
Previous | Current | Explanation
getMovableRows() gridInstance.getMovableRows()[0].querySelectorAll('.e-unfreeze') | getRows()
gridInstance.getRows()[0].querySelectorAll('.e-unfreeze') | The previous architecture used separate
tables for left, right, and movable contents, returning only movable rows when calling the method,
whereas the current architecture combines them into one table, returning all rows and introduces the
e-unfreeze class for selecting movable rows
getFrozenRightRows() gridInstance.getFrozenRightRows()[0].querySelectorAll('.e-rightfreeze') |
getRows() gridInstance.getRows()[0].querySelectorAll('.e-rightfreeze') | In the previous architecture, it
returned only the table rows from the right freeze table, but in the current architecture, all rows of the
entire table are returned, introducing the e-rightfreeze class for selecting right freeze rows.
getMovableRowByIndex() <br> getFrozenRowByIndex() <br> getFrozenRightRowByIndex() |
getRowByIndex() gridInstance.getRowByIndex(1).querySelectorAll('.e-unfreeze') | In the previous
architecture, separate methods were used to select rows from different table sections, while in the
current architecture, the getMovableRowByIndex(), getFrozenRightRowByIndex(), and
getFrozenRowByIndex() methods now return the same table row based on the given index.
Additionally, class names for table cells (td's) have been separated into e-leftfreeze, e-unfreeze, and e-
rightfreeze, making it easier to customize cells within a row.
Here's an example of how to add a new row using the addRecord method:
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
</GridComponent></div>)
}
export default App;
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, Edit, EditSettingsModel,
GridComponent, Inject } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const editOptions: EditSettingsModel = { allowEditing: true, allowAdding:
true, allowDeleting: true };
const generateOrderId = () => {
return Math.floor(10000 + Math.random() * 90000);
};
const generateCustomerId = () => {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let result = '';
for (let i = 0; i < 5; i++) {
result += characters.charAt(Math.floor(Math.random() *
characters.length));
}
return result;
};
const generateShipCity = () => {
const cities = ['London', 'Paris', 'New York', 'Tokyo', 'Berlin'];
return cities[Math.floor(Math.random() * cities.length)];
};
const generateFreight = () => {
return Math.random() * 100;
};
const generateShipName = () => {
const names = ['Que Delícia', 'Bueno Foods', 'Island Trading',
'Laughing Bacchus Winecellars'];
return names[Math.floor(Math.random() * names.length)];
};
const addRow = () => {
const newRecord: Object = {
OrderID: generateOrderId(),
CustomerID: generateCustomerId(),
ShipCity: generateShipCity(),
Freight: generateFreight(),
ShipName: generateShipName()
};
(grid as GridComponent).addRecord(newRecord, 0);
}
return (<div><ButtonComponent id='add' onClick={addRow}>Add New
Row</ButtonComponent>
<GridComponent dataSource={data} ref={g => grid = g}
editSettings={editOptions}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100'
textAlign="Right" isPrimaryKey={true} />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
* When working with remote data, it is impossible to add a new row between the existing rows.
* If you want to add a new record to the beginning of the data source, you can pass 0 as the second
parameter to the addRecord method.
* If you do not specify an index, the new row will be added at the end of the grid.
Show or hide a row using an external actions
In a Syncfusion grid, you can show or hide a particular row based on some external action, such as a
checkbox click. This can be useful in scenarios where you want to hide certain rows from the grid
temporarily, without removing them from the underlying data source. This can be achieved by using the
getRowByIndex and getRowsObject methods of the grid along with the change event of the checkbox.
The getRowsObject method returns an array of row objects that represents all the rows in the grid. You
can use this method to iterate through all the rows and access their data and index.
The getRowByIndex method returns the HTML element of a row at the specified index. You can use this
method to get a specific row and apply changes to it.
In the following example, the onCheckBoxChange method is used to check whether the checkbox is
checked or not. If it is checked, the method iterates through all the rows in the grid using the
getRowsObject method. For each row, it checks whether the value in the CustomerID column is equal
to "VINET". If it is, the index of that row is obtained using the getRowByIndex method and hidden by
setting its display style to "none". The index of the hidden row is also added to an array called
hiddenRows.
If the checkbox is unchecked, the method iterates through the hiddenRows array and shows each row
by setting its display style to an empty string. The hiddenRows array is also cleared.
APP.JSX
import { CheckBoxComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, Edit, GridComponent, Inject }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { useState } from 'react';
import { data } from './datasource';
let rowIndex;
let hiddenRows = [];
function App() {
let grid;
const [message, setMessage] = useState('');
const onCheckBoxChange = (args) => {
if (args.checked) {
for (let i = 0; i < grid.getRowsObject().length; i++) {
if (grid.getRowsObject()[i].data.CustomerID === 'VINET') {
// check the row value
rowIndex = grid.getRowsObject()[i].index; //get
particular row index
grid.getRowByIndex(rowIndex).style.display = 'none';
//hide row
hiddenRows.push(rowIndex); // add row index to hiddenRows
array
}
}
if (hiddenRows.length > 0) {
setMessage('Rows with a customer name column value of VINET
have been hidden');
}
}
else {
// Show hidden rows
hiddenRows.forEach((rowIndex) => {
grid.getRowByIndex(rowIndex).style.display = '';
});
hiddenRows = [];
setMessage('Show all hidden rows');
}
}
return (<div><CheckBoxComponent label='Show / Hide Row'
change={onCheckBoxChange}></CheckBoxComponent>
<p id='message'>{message}</p>
APP.TSX
import { CheckBoxComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, Edit, GridComponent, Inject }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { useState } from 'react';
import { data } from './datasource';
let rowIndex: number;
let hiddenRows: number[] = [];
function App() {
let grid: GridComponent | null;
const [message, setMessage] = useState('');
const onCheckBoxChange = (args) => {
if (args.checked) {
for (let i = 0; i < (grid as
GridComponent).getRowsObject().length; i++) {
if ((grid as
GridComponent).getRowsObject()[i].data.CustomerID === 'VINET') {
// check the row value
rowIndex = (grid as
GridComponent).getRowsObject()[i].index; //get particular row index
(grid as
GridComponent).getRowByIndex(rowIndex).style.display = 'none'; //hide row
hiddenRows.push(rowIndex); // add row index to hiddenRows
array
}
}
if (hiddenRows.length > 0) {
setMessage('Rows with a customer name column value of VINET
have been hidden');
}
}
else {
// Show hidden rows
hiddenRows.forEach((rowIndex: number) => {
(grid as GridComponent).getRowByIndex(rowIndex).style.display
= '';
});
hiddenRows = [];
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', EmployeeID: 8, OrderDate: new
Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
1. getRowByIndex: This method returns the HTML element of a row at the specified index. It can
be used to retrieve the element of a specific row in the grid.
`ts
2. getRowByPrimaryKey:The method allows you to retrieve the row index based on a specific
primary key value or row data.
`ts
const rowIndex = grid.getRowByPrimaryKey(primaryKey);
`
3. getRowInfo:This method allows you to retrieve row information based on a cell target element.
`ts
const rowInformation = grid.getRowInfo(targetElement);
`
4. getRows: This method returns an array of all the row elements in the Grid. If you need to
retrieve row data and elements, you can combine the getRows method with the getRowInfo
method.
`ts
const rowElements = grid.getRows();
`
`ts
const selectedIndexes = grid.getSelectedRowIndexes();
`
`ts
const selectedRowElements = grid.getSelectedRows();
`
APP.TSX
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: '<b>VINET</b>', EmployeeID: 5, OrderDate:
new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: '<b>TOMSP</b>', EmployeeID: 6, OrderDate:
new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: '<b>VINET</b>', EmployeeID: 5, OrderDate:
new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: '<b>TOMSP</b>', EmployeeID: 6, OrderDate:
new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: '<b>HANAR</b>', EmployeeID: 4, OrderDate:
new Date(8367642e5),
ShipName: '<b>HANAR</b>i Carnes', ShipCity: 'Rio de Janeiro',
ShipAddress: 'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: '<b>VICTE</b>', EmployeeID: 3, OrderDate:
new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: '<b>SUPRD</b>', EmployeeID: 4, OrderDate:
new Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: '<b>HANAR</b>', EmployeeID: 3, OrderDate:
new Date(836937e6),
ShipName: '<b>HANAR</b>i Carnes', ShipCity: 'Rio de Janeiro',
ShipAddress: 'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: '<b>CHOPS</b>', EmployeeID: 5, OrderDate:
new Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: '<b>RICSU</b>', EmployeeID: 9, OrderDate:
new Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: '<b>WELLI</b>', EmployeeID: 3, OrderDate:
new Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: '<b>HILAA</b>', EmployeeID: 4, OrderDate:
new Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: '<b>ERNSH</b>', EmployeeID: 1, OrderDate:
new Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
]
* The disableHtmlEncode property disables HTML encoding for the corresponding column in the grid.
* If the property is set to true, any HTML tags in the column's data will be displayed.
* If the property is set to false, the HTML tags will be removed and displayed as plain text.
* Disabling HTML encoding can potentially introduce security vulnerabilities, so use caution when
enabling this feature.
* If enableHtmlSanitizer property of grid is set to true, then the content is sanitized to prevent any
potential security vulnerabilities.
* You can also disable the disableHtmlEncode property of the column using getColumns method on
change event of Switch component.This is demonstrated in the below code snippet,
`typescript
const change = ((args:ChangeEventArgs) {
if (args.checked) {
grid.getColumns()[1].disableHtmlEncode = false;
} else {
grid.getColumns()[1].disableHtmlEncode = true;
}
grid.refresh();
});
`
Autowrap the grid content
The auto wrap feature allows the cell content in the grid to wrap to the next line when it exceeds the
boundary of the specified cell width. The cell content wrapping works based on the position of white
space between words. To support the Autowrap functionality in Syncfusion Grid, you should set the
appropriate width for the columns. The column width defines the maximum width of a column and
helps to wrap the content automatically.
To enable auto wrap, set the allowTextWrap property to true. You can also configure the wrap mode by
setting the textWrapSettings.wrapMode property.
Grid provides the below three options for configuring:
• Both - This is the default value for wrapMode. With this option, both the grid Header and
Content text is wrapped.
• Header - With this option, only the grid header text is wrapped.
• Content - With this option, only the grid content is wrapped.
* If a column width is not specified, then the Autowrap of columns will be adjusted with respect to the
grid's width.
* If a column's header text contains no white space, the text may not be wrapped.
* If the content of a cell contains HTML tags, the Autowrap functionality may not work as expected. In
such cases, you can use the headerTemplate and template properties of the column to customize the
appearance of the header and cell content.
The following example demonstrates how to set the allowTextWrap property to true and specify the
wrap mode as Content by setting the textWrapSettings.wrapMode property. Also change the
textWrapSettings.wrapMode property to Content and Both on changing the dropdown value using
the change event of the DropDownList component.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import React, { useState } from 'react';
import { inventoryData } from './datasource';
function App() {
const [wrapSettings, setWrapSettings] = useState({ wrapMode: 'Content' });
const dropDownData = [
{ text: 'Content', value: 'Content' },
{ text: 'Both', value: 'Both' },
];
const valueChange = ((args) => {
const newWrapValue = { wrapMode: args.value };
setWrapSettings(newWrapValue);
})
return (
<div>
<label style={{ padding: '30px 17px 0 0' }}>Change the wrapmode of auto
wrap feature:</label>
<DropDownListComponent dataSource={dropDownData} index={0} width="100"
change={valueChange}></DropDownListComponent>
<GridComponent dataSource={inventoryData} height={315}
allowPaging={true} allowTextWrap={true} textWrapSettings={wrapSettings}>
<ColumnsDirective>
<ColumnDirective field='Inventor' headerText='Inventor' width='100'
/>
<ColumnDirective field='NumberofPatentFamilies' headerText='Number
of Patent Families' width='100' />
<ColumnDirective field='Country' headerText='Country' width='100'
/>
<ColumnDirective field='Mainfieldsofinvention' headerText='Main
fields of invention' width='140' />
</ColumnsDirective>
</GridComponent></div>)
}
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent,
TextWrapSettingsModel } from '@syncfusion/ej2-react-grids';
import { ChangeEventArgs, DropDownListComponent } from '@syncfusion/ej2-
react-dropdowns';
import React, { useState } from 'react';
import { inventoryData } from './datasource';
function App() {
const [wrapSettings, setWrapSettings] = useState<TextWrapSettingsModel>({
wrapMode: 'Content' });
const dropDownData: { [key: string]: Object; }[] = [
{ text: 'Content', value: 'Content' },
{ text: 'Both', value: 'Both' },
];
const valueChange = ((args: ChangeEventArgs) => {
const newWrapValue: TextWrapSettingsModel = { wrapMode: args.value };
setWrapSettings(newWrapValue);
})
return (
<div>
<label style={{ padding: '30px 17px 0 0' }}>Change the wrapmode of auto
wrap feature:</label>
<DropDownListComponent dataSource={dropDownData} index={0} width="100"
change={valueChange}></DropDownListComponent>
<GridComponent dataSource={inventoryData} height={315}
allowPaging={true} allowTextWrap={true} textWrapSettings={wrapSettings}>
<ColumnsDirective>
<ColumnDirective field='Inventor' headerText='Inventor' width='100'
/>
<ColumnDirective field='NumberofPatentFamilies' headerText='Number
of Patent Families' width='100' />
<ColumnDirective field='Country' headerText='Country' width='100'
/>
<ColumnDirective field='Mainfieldsofinvention' headerText='Main
fields of invention' width='140' />
</ColumnsDirective>
</GridComponent></div>)
}
export default App;
DATASOURCE.JSX
export const inventoryData = [
{
'Inventor': 'Kia Silverbrook',
'NumberofPatentFamilies': 4737,
'Country': 'Australia',
'Number of INPADOC patents': 9839,
'Active': '1994-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics,Lab-on-a-chip, MEMS, Mechanical, VLSI',
},
{
'Inventor': 'Shunpei Yamazaki',
'NumberofPatentFamilies': 4677,
'Country': 'Japan',
'Number of INPADOC patents': '10000+',
'Active': '1976-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, Solar cells, Flash memory, OLED',
},
{
'Inventor': 'Lowell L. Wood, Jr.',
'NumberofPatentFamilies': 1419,
'Country': 'USA',
'Number of INPADOC patents': 1332,
'Active': '1977-2016',
'Mainfieldsofinvention': 'Mosquito laser, Nuclear weapons',
},
{
'Inventor': 'Paul Lapstun',
'NumberofPatentFamilies': 1281,
'Country': 'Australia',
'Number of INPADOC patents': 3099,
'Active': '2000-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics, CGI, VLSI',
},
{
'Inventor': 'Gurtej Sandhu',
'NumberofPatentFamilies': 1255,
'Country': 'India',
'Number of INPADOC patents': 2038,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film processes and materials, VLSI,
Semiconductor device fabrication',
},
{
'Inventor': 'Jun Koyama',
'NumberofPatentFamilies': 1240,
'Country': 'Japan',
'Number of INPADOC patents': 4126,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, OLED',
},
{
'Inventor': 'Roderick A. Hyde',
'NumberofPatentFamilies': 1240,
'Country': 'USA',
'Number of INPADOC patents': 3360,
'Active': '2001-2016',
'Mainfieldsofinvention': 'Various',
},
{
'Inventor': 'Leonard Forbes',
'NumberofPatentFamilies': 1093,
'Country': 'Canada',
'Number of INPADOC patents': 1398,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Semiconductor Memories, CCDs, Thin film
processes and materials, VLSI',
},
{
'Inventor': 'Thomas Edison',
'NumberofPatentFamilies': 1084,
'Country': 'USA',
'Number of INPADOC patents': 2332,
'Active': '1847(b)-1931(d)',
DATASOURCE.TSX
export const inventoryData: Object[] = [
{
'Inventor': 'Kia Silverbrook',
'NumberofPatentFamilies': 4737,
'Country': 'Australia',
'Number of INPADOC patents': 9839,
'Active': '1994-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics,Lab-on-a-chip, MEMS, Mechanical, VLSI',
},
{
'Inventor': 'Shunpei Yamazaki',
'NumberofPatentFamilies': 4677,
'Country': 'Japan',
'Number of INPADOC patents': '10000+',
'Active': '1976-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, Solar cells, Flash memory, OLED',
},
{
'Inventor': 'Lowell L. Wood, Jr.',
'NumberofPatentFamilies': 1419,
'Country': 'USA',
'Number of INPADOC patents': 1332,
'Active': '1977-2016',
'Mainfieldsofinvention': 'Mosquito laser, Nuclear weapons',
},
{
'Inventor': 'Paul Lapstun',
'NumberofPatentFamilies': 1281,
'Country': 'Australia',
'Number of INPADOC patents': 3099,
'Active': '2000-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics, CGI, VLSI',
},
{
'Inventor': 'Gurtej Sandhu',
'NumberofPatentFamilies': 1255,
'Country': 'India',
'Number of INPADOC patents': 2038,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film processes and materials, VLSI,
Semiconductor device fabrication',
},
{
'Inventor': 'Jun Koyama',
'NumberofPatentFamilies': 1240,
'Country': 'Japan',
'Number of INPADOC patents': 4126,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, OLED',
},
{
'Inventor': 'Roderick A. Hyde',
'NumberofPatentFamilies': 1240,
'Country': 'USA',
'Number of INPADOC patents': 3360,
'Active': '2001-2016',
'Mainfieldsofinvention': 'Various',
},
{
'Inventor': 'Leonard Forbes',
'NumberofPatentFamilies': 1093,
'Country': 'Canada',
'Number of INPADOC patents': 1398,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Semiconductor Memories, CCDs, Thin film
processes and materials, VLSI',
},
{
'Inventor': 'Thomas Edison',
'NumberofPatentFamilies': 1084,
'Country': 'USA',
'Number of INPADOC patents': 2332,
'Active': '1847(b)-1931(d)',
'Mainfieldsofinvention': 'Electric power, Lighting, Batteries,
Phonograph, Cement, Telegraphy, Mining',
},
{
'Inventor': 'Donald E. Weder',
'NumberofPatentFamilies': 999,
'Country': 'USA',
'Number of INPADOC patents': 1993,
'Active': '1976-2015',
'Mainfieldsofinvention': 'Florist supplies',
},
{
'Inventor': 'George Albert Lyon',
'NumberofPatentFamilies': 993,
'Country': 'Canada',
'Number of INPADOC patents': 'NA',
'Active': '1882(b)-1961(d)',
'Mainfieldsofinvention': 'Automotive, Stainless steel products',
},
{
'Inventor': 'John F. O\'Connor',
'NumberofPatentFamilies': 949,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1864(b)-1938(d)',
'Mainfieldsofinvention': 'Railway draft gearing',
},
{
'Inventor': 'Melvin De Groote',
'NumberofPatentFamilies': 925,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1895(b)-1963(d)',
'Mainfieldsofinvention': 'Chemical de-emulsifiers',
},
{
'Inventor': 'Jay S. Walker',
'NumberofPatentFamilies': 918,
'Country': 'USA',
'Number of INPADOC patents': 2206,
'Active': '1998-2016',
'Mainfieldsofinvention': 'Gaming machines',
},
{
'Inventor': 'Edward K. Y. Jung',
'NumberofPatentFamilies': 911,
'Country': 'USA',
'Number of INPADOC patents': 2254,
'Active': '1996-2016',
'Mainfieldsofinvention': 'Various',
},
{
'Inventor': 'Francis H. Richards',
'NumberofPatentFamilies': 894,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1850(b)-19??(d)',
'Mainfieldsofinvention': 'Mechanical, automation',
},
{
'Inventor': 'Kangguo Cheng',
'NumberofPatentFamilies': 884,
'Country': 'USA',
'Number of INPADOC patents': 1314,
'Active': '2004-2016',
'Mainfieldsofinvention': 'Semiconductor device fabrication,
Semiconductor memory, Semiconductor device',
}
];
Using event
To customize the appearance of the grid cell, you can use the queryCellInfo event of the grid. This event
is triggered when each header cell is rendered in the grid, and provides an object that contains
information about the header cell. You can use this object to modify the styles of the header cell.
The following example demonstrates how to add a queryCellInfo event handler to the grid. In the event
handler, checked whether the current column is Freight field and then applied the appropriate CSS class
to the cell based on its value.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const customizeCell = (args) => {
if (args.column.field === "Freight") {
if (args.data[args.column.field] <= 30) {
args.cell.classList.add('below-30');
} else if (args.data[args.column.field] > 30 &&
args.data[args.column.field] < 80) {
args.cell.classList.add('below-80');
} else {
args.cell.classList.add('above-80');
}
}
};
return (<div>
<GridComponent dataSource={data} height={315} enableHover={false}
allowSelection={false} queryCellInfo={customizeCell}>
<ColumnsDirective>
<ColumnDirective field="OrderID" headerText="Order ID" width="100"
textAlign="Right" />
<ColumnDirective field="CustomerID" headerText="Customer ID"
width="100" />
<ColumnDirective field="EmployeeID" headerText="Employee ID"
width="100" textAlign="Right" />
<ColumnDirective field="Freight" headerText="Freight" width="80"
textAlign="Right" format="C2" />
<ColumnDirective field="ShipCountry" headerText="Ship Country"
width="100" />
</ColumnsDirective>
</GridComponent>
</div>);
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent,
QueryCellInfoEventArgs } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
* The queryCellInfo event is triggered for every cell of the grid, so it may impact the performance of the
grid whether used to modify a large number of cells.
Using CSS
You can apply styles to the cells using CSS selectors. The Grid provides a class name for each cell
element, which you can use to apply styles to that specific cell or cells in a particular column. The e-
rowcell class is used to style the row cells, and the e-selectionbackground class is used to change the
background color of the selected row.
`CSS
.e-grid td.e-cellselectionbackground {
background: #9ac5ee;
font-style: italic;
}
`
The following example demonstrates how to customize the appearance of a specific row in the grid on
selection using className.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const selectOptions = {
type: 'Multiple',
mode: 'Cell'
}
return (
<div>
<div style={{ padding: '40px 0 0 0' }}>
<GridComponent dataSource={data} height={315}
selectionSettings={selectOptions}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='OrderID' width='100'
/>
<ColumnDirective field='CustomerID' headerText='CustomerID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
/>
<ColumnDirective field='ShipCountry' headerText='ShipCountry'
width='140' />
</ColumnsDirective>
</GridComponent></div></div>)
}
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent,
SelectionSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const selectOptions: SelectionSettingsModel = {
type: 'Multiple',
mode: 'Cell'
}
return (
<div>
<div style={{ padding: '40px 0 0 0' }}>
<GridComponent dataSource={data} height={315}
selectionSettings={selectOptions}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='OrderID' width='100'
/>
<ColumnDirective field='CustomerID' headerText='CustomerID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
/>
<ColumnDirective field='ShipCountry' headerText='ShipCountry'
width='140' />
</ColumnsDirective>
</GridComponent></div></div>)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
Using property
To customize the style of grid cells, define customAttributes property to the column definition object.
The customAttributes property takes an object with the name-value pair to customize the CSS
properties for grid cells. You can also set multiple CSS properties to the custom class using the
customAttributes property.
`CSS
.custom-css {
background: #d7f0f4;
font-style: italic;
color:navy
}
`
Here, setting the customAttributes property of the ShipCity column to an object that contains the CSS
class 'custom-css'. This CSS class will be applied to all the cells in the ShipCity column of the grid.
`typescript
<ColumnDirective field="OrderID" headerText="Order ID" customAttributes={class: 'custom-css'}
width="100" textAlign="Right" />
`
The following example demonstrates how to customize the appearance of the OrderID and ShipCity
columns using custom attributes.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return (<div>
<GridComponent dataSource={data} height={315} enableHover={false}
allowSelection={false}>
<ColumnsDirective>
<ColumnDirective field="OrderID" headerText="Order ID"
customAttributes={{class: 'custom-css'}} width="100" textAlign="Right" />
<ColumnDirective field="CustomerID" headerText="Customer ID"
width="100" />
<ColumnDirective field="EmployeeID" headerText="Employee ID"
customAttributes={{class: 'custom-css'}} width="100" textAlign="Right" />
<ColumnDirective field="Freight" headerText="Freight" width="80"
textAlign="Right" format="C2" />
<ColumnDirective field="ShipCountry" headerText="Ship Country"
width="100" />
</ColumnsDirective>
</GridComponent>
</div>)
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return (<div>
<GridComponent dataSource={data} height={315} enableHover={false}
allowSelection={false}>
<ColumnsDirective>
<ColumnDirective field="OrderID" headerText="Order ID"
customAttributes={{class: 'custom-css'}} width="100" textAlign="Right" />
<ColumnDirective field="CustomerID" headerText="Customer ID"
width="100" />
<ColumnDirective field="EmployeeID" headerText="Employee ID"
customAttributes={{class: 'custom-css'}} width="100" textAlign="Right" />
<ColumnDirective field="Freight" headerText="Freight" width="80"
textAlign="Right" format="C2" />
<ColumnDirective field="ShipCountry" headerText="Ship Country"
width="100" />
</ColumnsDirective>
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
Custom attributes can be used to customize any cell in the grid, including header and footer cells.
Using methods
The Grid provides below methods to customize the appearance of the grid columns header and cell:
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
Make sure to pass the correct row and column indices to getCellFromIndex method, or else the
appearance of the wrong cell might get customized.
Clip mode
The clip mode feature is useful when you have a long text or content in a grid cell, which overflows the
cell's width or height. It provides options to display the overflow content by either truncating it,
displaying an ellipsis or displaying an ellipsis with a tooltip. You can enable this feature by setting
clipMode property to one of the below available options.
There are three types of clipMode available:
The following example demonstrates, how to set the clipMode property to Clip for the Name of the
Inventor column, Ellipsis for the Number of Patent Families column, and EllipsisWithTooltip for the
Main Fields of Invention column, on changing the dropdown value using the change event of the
DropDownList component.
APP.JSX
import { ClipMode, ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { DropDownListComponent, ChangeEventArgs } from '@syncfusion/ej2-
react-dropdowns';
import * as React from 'react';
import { inventoryData } from './datasource';
function App() {
let grid;
const dropDownData = [
{ text: 'Ellipsis', value: 'Ellipsis' },
{ text: 'Clip', value: 'Clip' },
{ text: 'EllipsisWithTooltip', value: 'EllipsisWithTooltip' }
];
const valueChange = ((args) => {
grid.getColumnByField('Mainfieldsofinvention').clipMode = args.value ;
grid.refreshColumns();
})
return (
<div>
<label style={{ padding: '30px 17px 0 0' }}> Change the clip mode:
</label>
<DropDownListComponent dataSource={dropDownData} index={0} width="100"
change={valueChange}></DropDownListComponent>
<GridComponent dataSource={inventoryData} height={315} ref={g => grid =
g} allowPaging={true}>
<ColumnsDirective>
<ColumnDirective field='Inventor' headerText='Inventor' width='100'
/>
<ColumnDirective field='NumberofPatentFamilies' headerText='Number
of Patent Families' width='100' />
APP.TSX
import { ClipMode, ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { DropDownListComponent, ChangeEventArgs } from '@syncfusion/ej2-
react-dropdowns';
import * as React from 'react';
import { inventoryData } from './datasource';
function App() {
let grid: GridComponent | null;
const dropDownData: { [key: string]: Object; }[] = [
{ text: 'Ellipsis', value: 'Ellipsis' },
{ text: 'Clip', value: 'Clip' },
{ text: 'EllipsisWithTooltip', value: 'EllipsisWithTooltip' }
];
const valueChange = ((args: ChangeEventArgs) => {
(grid as
GridComponent).getColumnByField('Mainfieldsofinvention').clipMode =
args.value as ClipMode;
(grid as GridComponent).refreshColumns();
})
return (
<div>
<label style={{ padding: '30px 17px 0 0' }}> Change the clip mode:
</label>
<DropDownListComponent dataSource={dropDownData} index={0} width="100"
change={valueChange}></DropDownListComponent>
<GridComponent dataSource={inventoryData} height={315} ref={g => grid =
g} allowPaging={true}>
<ColumnsDirective>
<ColumnDirective field='Inventor' headerText='Inventor' width='100'
/>
<ColumnDirective field='NumberofPatentFamilies' headerText='Number
of Patent Families' width='100' />
<ColumnDirective field='Country' headerText='Country' width='100'
/>
<ColumnDirective field='Mainfieldsofinvention' headerText='Main
fields of invention' width='140' />
</ColumnsDirective>
</GridComponent></div>)
}
export default App;
DATASOURCE.JSX
export const inventoryData = [
{
'Active': '2001-2016',
'Mainfieldsofinvention': 'Various',
},
{
'Inventor': 'Leonard Forbes',
'NumberofPatentFamilies': 1093,
'Country': 'Canada',
'Number of INPADOC patents': 1398,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Semiconductor Memories, CCDs, Thin film
processes and materials, VLSI',
},
{
'Inventor': 'Thomas Edison',
'NumberofPatentFamilies': 1084,
'Country': 'USA',
'Number of INPADOC patents': 2332,
'Active': '1847(b)-1931(d)',
'Mainfieldsofinvention': 'Electric power, Lighting, Batteries,
Phonograph, Cement, Telegraphy, Mining',
},
{
'Inventor': 'Donald E. Weder',
'NumberofPatentFamilies': 999,
'Country': 'USA',
'Number of INPADOC patents': 1993,
'Active': '1976-2015',
'Mainfieldsofinvention': 'Florist supplies',
},
{
'Inventor': 'George Albert Lyon',
'NumberofPatentFamilies': 993,
'Country': 'Canada',
'Number of INPADOC patents': 'NA',
'Active': '1882(b)-1961(d)',
'Mainfieldsofinvention': 'Automotive, Stainless steel products',
},
{
'Inventor': 'John F. O\'Connor',
'NumberofPatentFamilies': 949,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1864(b)-1938(d)',
'Mainfieldsofinvention': 'Railway draft gearing',
},
{
'Inventor': 'Melvin De Groote',
'NumberofPatentFamilies': 925,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1895(b)-1963(d)',
'Mainfieldsofinvention': 'Chemical de-emulsifiers',
},
{
'Inventor': 'Jay S. Walker',
'NumberofPatentFamilies': 918,
'Country': 'USA',
DATASOURCE.TSX
export const inventoryData: Object[] = [
{
'Inventor': 'Kia Silverbrook',
'NumberofPatentFamilies': 4737,
'Country': 'Australia',
'Number of INPADOC patents': 9839,
'Active': '1994-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics,Lab-on-a-chip, MEMS, Mechanical, VLSI',
},
{
'Inventor': 'Shunpei Yamazaki',
'NumberofPatentFamilies': 4677,
'Country': 'Japan',
'Number of INPADOC patents': '10000+',
'Active': '1976-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, Solar cells, Flash memory, OLED',
},
{
'Inventor': 'Lowell L. Wood, Jr.',
'NumberofPatentFamilies': 1419,
'Country': 'USA',
{
'Inventor': 'Donald E. Weder',
'NumberofPatentFamilies': 999,
'Country': 'USA',
'Number of INPADOC patents': 1993,
'Active': '1976-2015',
'Mainfieldsofinvention': 'Florist supplies',
},
{
'Inventor': 'George Albert Lyon',
'NumberofPatentFamilies': 993,
'Country': 'Canada',
'Number of INPADOC patents': 'NA',
'Active': '1882(b)-1961(d)',
'Mainfieldsofinvention': 'Automotive, Stainless steel products',
},
{
'Inventor': 'John F. O\'Connor',
'NumberofPatentFamilies': 949,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1864(b)-1938(d)',
'Mainfieldsofinvention': 'Railway draft gearing',
},
{
'Inventor': 'Melvin De Groote',
'NumberofPatentFamilies': 925,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1895(b)-1963(d)',
'Mainfieldsofinvention': 'Chemical de-emulsifiers',
},
{
'Inventor': 'Jay S. Walker',
'NumberofPatentFamilies': 918,
'Country': 'USA',
'Number of INPADOC patents': 2206,
'Active': '1998-2016',
'Mainfieldsofinvention': 'Gaming machines',
},
{
'Inventor': 'Edward K. Y. Jung',
'NumberofPatentFamilies': 911,
'Country': 'USA',
'Number of INPADOC patents': 2254,
'Active': '1996-2016',
'Mainfieldsofinvention': 'Various',
},
{
'Inventor': 'Francis H. Richards',
'NumberofPatentFamilies': 894,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1850(b)-19??(d)',
'Mainfieldsofinvention': 'Mechanical, automation',
},
{
<div>
<i className="fas fa-pencil-alt"></i>
{props.CustomerID}
</div>
</OverlayTrigger></div>
</div>
);
};
function App() {
return (
<div>
<GridComponent dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='OrderID' width='100' />
<ColumnDirective field='CustomerID' headerText='CustomerID' width='100'
template={customerIDTemplate} />
<ColumnDirective field='Freight' headerText='Freight' width='100' format='C' />
<ColumnDirective field='ShipCountry' headerText='ShipCountry' width='140' />
</ColumnsDirective>
</GridComponent>
</div>
);
}
export default App;
`
The following screenshot represents the Bootstrap tooltip for the CustomerID field,
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
import { TooltipComponent, TooltipEventArgs } from '@syncfusion/ej2-react-
popups';
function App() {
let toolTip: TooltipComponent | null;
const beforeRender = ((args: TooltipEventArgs) => {
if (args.target.classList.contains('e-rowcell')) {
(toolTip as TooltipComponent).content = 'This is value "' +
args.target.innerText + '" ';
}
});
return (
<div>
<TooltipComponent ref={t => toolTip = t} beforeRender={beforeRender}
target=".e-rowcell">
<GridComponent dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='OrderID' width='100'
/>
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
Grid lines
The gridLines in a grid are used to separate the cells with horizontal and vertical lines for better
readability. You can enable the grid lines by setting the gridLines property to one of the following values:
| Modes | Actions |
|-------|---------|
| Both | Displays both the horizontal and vertical grid lines.|
| None | No grid lines are displayed.|
| Horizontal | Displays the horizontal grid lines only.|
| Vertical | Displays the vertical grid lines only.|
| Default | Displays grid lines based on the theme.|
The following example demonstrates how to set the gridLines property based on changing the
dropdown value using the change event of the DropDownList component.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import * as React from 'react';
import { inventoryData } from './datasource';
function App() {
const [gridLine, setGridLine] = useState('Default');
const dropDownData = [
{ text: 'Default', value: 'Default' },
{ text: 'Both', value: 'Both' },
{ text: 'Horizontal', value: 'Horizontal' },
{ text: 'Vertical', value: 'Vertical' },
{ text: 'None', value: 'None' }
];
const valueChange = ((args) => {
setGridLine(args.value);
})
return (
<div>
<label style={{ padding: '30px 17px 0 0' }}>Change the grid
lines:</label>
<DropDownListComponent dataSource={dropDownData} index={0} width="100"
change={valueChange}></DropDownListComponent>
<GridComponent dataSource={inventoryData} height={315}
gridLines={gridLine}>
<ColumnsDirective>
<ColumnDirective field='Inventor' headerText='Inventor' width='100'
/>
<ColumnDirective field='NumberofPatentFamilies' headerText='Number
of Patent Families' width='100' />
<ColumnDirective field='Country' headerText='Country' width='100'
/>
<ColumnDirective field='Mainfieldsofinvention' headerText='Main
fields of invention' width='140' />
</ColumnsDirective>
</GridComponent></div>)
}
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, GridLine } from
'@syncfusion/ej2-react-grids';
import { DropDownListComponent, ChangeEventArgs } from '@syncfusion/ej2-
react-dropdowns';
import React, { useState } from 'react';
import { inventoryData } from './datasource';
function App() {
const [gridLine, setGridLine] = useState<GridLine>('Default');
const dropDownData: any = [
{ text: 'Default', value: 'Default' },
DATASOURCE.JSX
export const inventoryData = [
{
'Inventor': 'Kia Silverbrook',
'NumberofPatentFamilies': 4737,
'Country': 'Australia',
'Number of INPADOC patents': 9839,
'Active': '1994-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics,Lab-on-a-chip, MEMS, Mechanical, VLSI',
},
{
'Inventor': 'Shunpei Yamazaki',
'NumberofPatentFamilies': 4677,
'Country': 'Japan',
'Number of INPADOC patents': '10000+',
'Active': '1976-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, Solar cells, Flash memory, OLED',
},
{
'Inventor': 'Lowell L. Wood, Jr.',
'NumberofPatentFamilies': 1419,
'Country': 'USA',
'Number of INPADOC patents': 1332,
'Active': '1977-2016',
'Mainfieldsofinvention': 'Mosquito laser, Nuclear weapons',
},
{
'Inventor': 'Paul Lapstun',
'NumberofPatentFamilies': 1281,
'Country': 'Australia',
'Number of INPADOC patents': 3099,
'Active': '2000-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics, CGI, VLSI',
},
{
'Inventor': 'Gurtej Sandhu',
'NumberofPatentFamilies': 1255,
'Country': 'India',
'Number of INPADOC patents': 2038,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film processes and materials, VLSI,
Semiconductor device fabrication',
},
{
'Inventor': 'Jun Koyama',
'NumberofPatentFamilies': 1240,
'Country': 'Japan',
'Number of INPADOC patents': 4126,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, OLED',
},
{
'Inventor': 'Roderick A. Hyde',
'NumberofPatentFamilies': 1240,
'Country': 'USA',
'Number of INPADOC patents': 3360,
'Active': '2001-2016',
'Mainfieldsofinvention': 'Various',
},
{
'Inventor': 'Leonard Forbes',
'NumberofPatentFamilies': 1093,
'Country': 'Canada',
'Number of INPADOC patents': 1398,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Semiconductor Memories, CCDs, Thin film
processes and materials, VLSI',
},
{
'Inventor': 'Thomas Edison',
'NumberofPatentFamilies': 1084,
'Country': 'USA',
'Number of INPADOC patents': 2332,
'Active': '1847(b)-1931(d)',
'Mainfieldsofinvention': 'Electric power, Lighting, Batteries,
Phonograph, Cement, Telegraphy, Mining',
},
{
'NumberofPatentFamilies': 884,
'Country': 'USA',
'Number of INPADOC patents': 1314,
'Active': '2004-2016',
'Mainfieldsofinvention': 'Semiconductor device fabrication,
Semiconductor memory, Semiconductor device',
}
];
DATASOURCE.TSX
export const inventoryData: Object[] = [
{
'Inventor': 'Kia Silverbrook',
'NumberofPatentFamilies': 4737,
'Country': 'Australia',
'Number of INPADOC patents': 9839,
'Active': '1994-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics,Lab-on-a-chip, MEMS, Mechanical, VLSI',
},
{
'Inventor': 'Shunpei Yamazaki',
'NumberofPatentFamilies': 4677,
'Country': 'Japan',
'Number of INPADOC patents': '10000+',
'Active': '1976-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, Solar cells, Flash memory, OLED',
},
{
'Inventor': 'Lowell L. Wood, Jr.',
'NumberofPatentFamilies': 1419,
'Country': 'USA',
'Number of INPADOC patents': 1332,
'Active': '1977-2016',
'Mainfieldsofinvention': 'Mosquito laser, Nuclear weapons',
},
{
'Inventor': 'Paul Lapstun',
'NumberofPatentFamilies': 1281,
'Country': 'Australia',
'Number of INPADOC patents': 3099,
'Active': '2000-2016',
'Mainfieldsofinvention': 'Printing, Digital paper, Internet,
Electronics, CGI, VLSI',
},
{
'Inventor': 'Gurtej Sandhu',
'NumberofPatentFamilies': 1255,
'Country': 'India',
'Number of INPADOC patents': 2038,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film processes and materials, VLSI,
Semiconductor device fabrication',
},
{
'Inventor': 'Jun Koyama',
'NumberofPatentFamilies': 1240,
'Country': 'Japan',
'Number of INPADOC patents': 4126,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Thin film transistors, Liquid crystal
displays, OLED',
},
{
'Inventor': 'Roderick A. Hyde',
'NumberofPatentFamilies': 1240,
'Country': 'USA',
'Number of INPADOC patents': 3360,
'Active': '2001-2016',
'Mainfieldsofinvention': 'Various',
},
{
'Inventor': 'Leonard Forbes',
'NumberofPatentFamilies': 1093,
'Country': 'Canada',
'Number of INPADOC patents': 1398,
'Active': '1991-2016',
'Mainfieldsofinvention': 'Semiconductor Memories, CCDs, Thin film
processes and materials, VLSI',
},
{
'Inventor': 'Thomas Edison',
'NumberofPatentFamilies': 1084,
'Country': 'USA',
'Number of INPADOC patents': 2332,
'Active': '1847(b)-1931(d)',
'Mainfieldsofinvention': 'Electric power, Lighting, Batteries,
Phonograph, Cement, Telegraphy, Mining',
},
{
'Inventor': 'Donald E. Weder',
'NumberofPatentFamilies': 999,
'Country': 'USA',
'Number of INPADOC patents': 1993,
'Active': '1976-2015',
'Mainfieldsofinvention': 'Florist supplies',
},
{
'Inventor': 'George Albert Lyon',
'NumberofPatentFamilies': 993,
'Country': 'Canada',
'Number of INPADOC patents': 'NA',
'Active': '1882(b)-1961(d)',
'Mainfieldsofinvention': 'Automotive, Stainless steel products',
},
{
'Inventor': 'John F. O\'Connor',
'NumberofPatentFamilies': 949,
'Country': 'USA',
'Number of INPADOC patents': 'NA',
'Active': '1864(b)-1938(d)',
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
* If isIdentity is enabled, then it will be considered as a read-only column when editing and adding a
record.
* You can disable editing for a particular column, by specifying allowEditing to false.
* You can use the Insert key to add a new row to the grid and use the Delete key to delete the selected
row from the grid.
Toolbar with edit option
The toolbar with edit option feature in the Grid component provides a built-in toolbar that includes
various items for executing editing actions. This feature allows you to easily perform edit operations on
the grid data, such as modifying cell values, updating changes, and canceling edits.
To enable this feature, you need to configure the toolbar property of the Grid component. This property
allows you to define the items that will be displayed in the grid toolbar. By including the relevant items
like Edit, Add, Delete, Update, and Cancel within the toolbar property, you can enable the edit options
in the toolbar.
Here's an example of how to enable the toolbar with edit option in the Grid:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { Edit, Inject, Toolbar } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const editOptions = { allowEditing: true, allowAdding: true, allowDeleting:
true };
const toolbarOptions = ['Add', 'Edit', 'Delete', 'Update', 'Cancel'];
const orderIDRules = { required: true, number: true };
const customerIDRules = { required: true };
const freightRules = { required: true, number: true };
const shipCountryrules = { required: true };
return <GridComponent dataSource={data} editSettings={editOptions}
toolbar={toolbarOptions} height={265}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" isPrimaryKey={true} validationRules={orderIDRules} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='120' validationRules={customerIDRules} />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C2" textAlign="Right" validationRules={freightRules} />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' validationRules={shipCountryrules} />
</ColumnsDirective>
<Inject services={[Edit, Toolbar]} />
</GridComponent>;
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004', ShipCountry:
'France', Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', Mask: '5555', ShipPostalCode: 'B-6000',
ShipCountry: 'Belgium', Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 3,
OrderDate: new Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '6666', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', Role: 'Employee', EmployeeID: 5,
OrderDate: new Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', Mask: '7777', ShipPostalCode: '3012', ShipCountry:
'Switzerland', Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', Role: 'Admin', EmployeeID: 9,
OrderDate: new Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', Mask: '8888', ShipPostalCode: '1204', ShipCountry:
'Switzerland', Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', Role: 'Employee', EmployeeID: 3,
OrderDate: new Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', Mask: '9999', ShipPostalCode: '08737-363',
ShipCountry: 'Brazil', Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', Mask: '1234', ShipPostalCode: '5022',
ShipCountry: 'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', Role: 'Manager', EmployeeID: 1,
OrderDate: new Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', Mask: '2345', ShipPostalCode: '8010', ShipCountry:
'Austria', Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', Mask: '3456', ShipPostalCode: '05022', ShipCountry:
'Mexico', Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', Mask: '4567', ShipPostalCode: '50739', ShipCountry:
'Germany', Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', Mask: '5678', ShipPostalCode: '02389-673',
ShipCountry: 'Brazil', Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', Role: 'Employee', EmployeeID: 8,
OrderDate: new Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', Mask: '6789', ShipPostalCode: '87110', ShipCountry:
'USA', Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
APP.TSX
import { ChangeEventArgs, DropDownListComponent } from '@syncfusion/ej2-
react-dropdowns'
import { Column, ColumnDirective, ColumnsDirective, GridComponent,
PageSettingsModel, Toolbar, ToolbarItems, Page } from '@syncfusion/ej2-react-
grids';
import { Edit, EditSettingsModel, Inject } from '@syncfusion/ej2-react-
grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
let currentColumn: Column;
const pageSettings: PageSettingsModel = { pageSize: 6 };
const editOptions: EditSettingsModel = { allowEditing: true, allowAdding:
true, allowDeleting: true };
const toolbar: ToolbarItems[] = ['Add', 'Edit', 'Delete', 'Update',
'Cancel'];
const orderIDRules: Object = { required: true, number: true };
const customerIDRules: Object = { required: true };
const freightRules: Object = { required: true, min: 1, max: 1000 };
const editparams = { params: { popupHeight: '300px' } };
const alignmentData: { [key: string]: Object; }[] = [
{ text: 'Order ID', value: 'OrderID' },
{ text: 'Customer ID', value: 'CustomerID' },
{ text: 'Freight', value: 'Freight' },
{ text: 'Order Date', value: 'OrderDate' },
{ text: 'Ship Country', value: 'ShipCountry' },
];
const dropdownFields: Object = { text: 'text', value: 'value' };
const changeAlignment = (args: ChangeEventArgs) => {
// Reset the allowEditing property of the previously selected column
if (currentColumn) {
currentColumn.allowEditing = true;
}
// Update the 'allowEditing' property for the selected column
currentColumn = (grid as GridComponent).getColumnByField(args.value) as
Column;
currentColumn.allowEditing = false;
}
return (<div>
<label style={{ padding: "30px 17px 0 0" }}> Select column to disable
editing:</label>
<DropDownListComponent index={0} width={150} dataSource={alignmentData}
fields={dropdownFields} change={changeAlignment}></DropDownListComponent>
<GridComponent ref={g => grid = g} dataSource={data}
editSettings={editOptions} toolbar={toolbar} height={315} allowPaging={true}
pageSettings={pageSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" isPrimaryKey={true} validationRules={orderIDRules} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='120' validationRules={customerIDRules} />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C2" textAlign="Right" validationRules={freightRules}
editType='numericedit' />
<ColumnDirective field='OrderDate' headerText='OrderDate' width='150'
format='yMd' editType='datepickeredit' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' editType='dropdownedit' edit={editparams} />
</ColumnsDirective>
<Inject services={[Edit, Page, Toolbar]} />
</GridComponent></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
* If you have set the isPrimaryKey property to true for a column, editing will be automatically disabled
for that column.
* You can disble the particular row using actionBegin event.please refer this link.
* You can disble the particular cell using cellEdit event.please refer this link.
Editing template column
The editing template column feature in the Grid allows you to create custom editing templates for
specific columns in the grid. This feature is particularly useful when you need to customize the editing
experience for certain columns, such as using custom input controls or displaying additional information
during editing.
To enable the editing template column feature, you need to define the field property for the specific
column in the grid's configuration. The field property maps the column to the corresponding field name
in the data source, allowing you to edit the value of that field.
In the below demo, the ShipCountry column is rendered with the template.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Toolbar,
ToolbarItems } from '@syncfusion/ej2-react-grids';
import { Edit, EditSettingsModel, Inject } from '@syncfusion/ej2-react-
grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const editOptions = { allowEditing: true, allowAdding: true, allowDeleting:
true };
const toolbar = ['Add', 'Edit', 'Delete', 'Update', 'Cancel'];
const orderIDRules = { required: true, number: true };
const customerIDRules = { required: true };
const freightRules = { required: true, min: 1, max: 1000 };
const template = (props) => {
return (
<a href='#'>{props.ShipCountry}</a>
)
}
return (<div>
<GridComponent dataSource={data} editSettings={editOptions}
toolbar={toolbar} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" isPrimaryKey={true} validationRules={orderIDRules} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='120' validationRules={customerIDRules} />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C2" textAlign="Right" validationRules={freightRules}
editType='numericedit' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' editType='dropdownedit' template={template} />
</ColumnsDirective>
<Inject services={[Edit, Toolbar]} />
</GridComponent></div>)
};
export default App;
APP.TSX
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004', ShipCountry:
'France', Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', Mask: '5555', ShipPostalCode: 'B-6000',
ShipCountry: 'Belgium', Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 3,
OrderDate: new Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '6666', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', Role: 'Employee', EmployeeID: 5,
OrderDate: new Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', Mask: '7777', ShipPostalCode: '3012', ShipCountry:
'Switzerland', Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', Role: 'Admin', EmployeeID: 9,
OrderDate: new Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', Mask: '8888', ShipPostalCode: '1204', ShipCountry:
'Switzerland', Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', Role: 'Employee', EmployeeID: 3,
OrderDate: new Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', Mask: '9999', ShipPostalCode: '08737-363',
ShipCountry: 'Brazil', Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', Mask: '1234', ShipPostalCode: '5022',
ShipCountry: 'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', Role: 'Manager', EmployeeID: 1,
OrderDate: new Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', Mask: '2345', ShipPostalCode: '8010', ShipCountry:
'Austria', Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', Mask: '3456', ShipPostalCode: '05022', ShipCountry:
'Mexico', Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', Mask: '4567', ShipPostalCode: '50739', ShipCountry:
'Germany', Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', Mask: '5678', ShipPostalCode: '02389-673',
ShipCountry: 'Brazil', Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', Role: 'Employee', EmployeeID: 8,
OrderDate: new Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', Mask: '6789', ShipPostalCode: '87110', ShipCountry:
'USA', Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
APP.TSX
import { L10n } from '@syncfusion/ej2-base';
import { ClickEventArgs } from '@syncfusion/ej2-react-navigations'
import { ColumnDirective, ColumnsDirective, GridComponent, Toolbar,
ToolbarItems } from '@syncfusion/ej2-react-grids';
import { Edit, EditSettingsModel, Inject } from '@syncfusion/ej2-react-
grids';
import * as React from 'react';
import { data } from './datasource';
L10n.load({
'en-US': {
grid: {
'OKButton': 'YES',
'CancelButton': 'Discard',
'ConfirmDelete': 'Are you sure you want to delete the selected Record?'
}
}
});
function App() {
let grid: GridComponent | null;
const editOptions: EditSettingsModel = { allowEditing: true, allowAdding:
true, allowDeleting: true, showDeleteConfirmDialog: true };
const toolbar: ToolbarItems[] = ['Add', 'Edit', 'Delete', 'Update',
'Cancel'];
const toolbarClick = (args: ClickEventArgs) => {
if (args.item.properties.text === 'Delete') {
const dialogObj = (grid as GridComponent).editModule.dialogObj;
dialogObj.header = 'Delete Confirmation Dialog';
dialogObj.showCloseIcon = true;
}
}
return (<div>
<GridComponent ref={g => grid = g} dataSource={data}
editSettings={editOptions} toolbar={toolbar} height={315}
toolbarClick={toolbarClick}>
<ColumnsDirective>
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004', ShipCountry:
'France', Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', Mask: '5555', ShipPostalCode: 'B-6000',
ShipCountry: 'Belgium', Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 3,
OrderDate: new Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '6666', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', Role: 'Employee', EmployeeID: 5,
OrderDate: new Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', Mask: '7777', ShipPostalCode: '3012', ShipCountry:
'Switzerland', Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', Role: 'Admin', EmployeeID: 9,
OrderDate: new Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', Mask: '8888', ShipPostalCode: '1204', ShipCountry:
'Switzerland', Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', Role: 'Employee', EmployeeID: 3,
OrderDate: new Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', Mask: '9999', ShipPostalCode: '08737-363',
ShipCountry: 'Brazil', Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', Mask: '1234', ShipPostalCode: '5022',
ShipCountry: 'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', Role: 'Manager', EmployeeID: 1,
OrderDate: new Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', Mask: '2345', ShipPostalCode: '8010', ShipCountry:
'Austria', Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', Mask: '3456', ShipPostalCode: '05022', ShipCountry:
'Mexico', Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', Mask: '4567', ShipPostalCode: '50739', ShipCountry:
'Germany', Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', Mask: '5678', ShipPostalCode: '02389-673',
ShipCountry: 'Brazil', Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', Role: 'Employee', EmployeeID: 8,
OrderDate: new Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', Mask: '6789', ShipPostalCode: '87110', ShipCountry:
'USA', Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
APP.TSX
import { CheckBoxComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { Edit, EditSettingsModel, Inject, Toolbar, ToolbarItems } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const editOptions: EditSettingsModel = { allowEditing: true, allowAdding:
true, allowDeleting: true };
const toolbarOptions: ToolbarItems[] = ['Add', 'Edit', 'Delete', 'Update',
'Cancel'];
const orderIDRules: object = { required: true, number: true };
const customerIDRules: object = { required: true };
const freightRules: object = { required: true, min: 1, max: 1000 };
const verifiedRules: object = { required: true };
const dateRules: object = { required: true };
const template = (props) => {
return (<div>
<CheckBoxComponent checked={props.Verified}></CheckBoxComponent>
</div>)
}
return (<div>
<GridComponent id='Grid' dataSource={data} editSettings={editOptions}
toolbar={toolbarOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
validationRules={orderIDRules} width='100' textAlign="Right"
isPrimaryKey={true} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='120' validationRules={customerIDRules} />
<ColumnDirective field='OrderDate' headerText='OrderDate' width='150'
format='yMd' editType='datepickeredit' validationRules={dateRules} />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C2" editType='numericedit' textAlign="Right"
validationRules={freightRules} />
<ColumnDirective field='Verified' headerText='Verified' width='150'
validationRules={verifiedRules} template={template} />
</ColumnsDirective>
<Inject services={[Edit, Toolbar]} />
</GridComponent></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
In the following example, the DropDownList component is rendered within the editTemplate for the
Employee Feedback column using template. The enumerated list data can be bound to the Employee
Feedback column using the two-way binding (@bind-Value).
APP.JSX
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent, SaveEventArgs }
from '@syncfusion/ej2-react-grids';
import { Edit, EditSettingsModel, Inject, Toolbar, ToolbarItems } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let details = data;
let orderData;
const editOptions = { allowEditing: true, allowAdding: true, allowDeleting:
true };
const toolbarOptions = ['Add', 'Edit', 'Delete', 'Update', 'Cancel'];
const orderIDRules = { required: true, number: true };
const dropdownFields = { text: 'FeedbackDetails', value: 'FeedbackDetails'
};
const dropDownEnumValue = Object.keys(Feedback).filter((key) =>
!isNaN(Number((Feedback)[key])));
const actionBegin = (args) => {
if (args.requestType === 'beginEdit' || args.requestType === 'add') {
orderData = Object.assign({}, args.rowData);
}
if (args.requestType === 'save') {
orderData['FeedbackDetails'] = args.data['FeedbackDetails'];
}
}
const editTemplate = () => {
return (
<div>
<DropDownListComponent id='FeedbackDetails'
dataSource={dropDownEnumValue} fields={dropdownFields}
value={orderData.FeedbackDetails} popupHeight={150}></DropDownListComponent>
</div>
)
}
return (<div>
<GridComponent id='Grid' dataSource={details} editSettings={editOptions}
toolbar={toolbarOptions} height={315} actionBegin={actionBegin}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
validationRules={orderIDRules} width='100' textAlign="Right"
isPrimaryKey={true} />
<ColumnDirective field='CustomerID' headerText='Employee Name'
width='120' />
<ColumnDirective field='FeedbackDetails' headerText='Employee
Feedback' width='150' editTemplate={editTemplate} />
</ColumnsDirective>
<Inject services={[Edit, Toolbar]} />
</GridComponent></div>)
};
export default App;
APP.TSX
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent, SaveEventArgs }
from '@syncfusion/ej2-react-grids';
import { Edit, EditSettingsModel, Inject, Toolbar, ToolbarItems } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
export interface EmployeeDetails {
OrderID: number;
CustomerID: string;
FeedbackDetails: Feedback;
}
export enum Feedback {
Positive = 0,
Negative = 1,
}
function App() {
let details: EmployeeDetails[] = data as EmployeeDetails[];
let orderData: EmployeeDetails;
const editOptions: EditSettingsModel = { allowEditing: true, allowAdding:
true, allowDeleting: true };
const toolbarOptions: ToolbarItems[] = ['Add', 'Edit', 'Delete', 'Update',
'Cancel'];
const orderIDRules: object = { required: true, number: true };
const dropdownFields: Object = { text: 'FeedbackDetails', value:
'FeedbackDetails' };
const dropDownEnumValue: string[] = Object.keys(Feedback).filter((key:
string) => !isNaN(Number((Feedback)[key])));
const actionBegin = (args: SaveEventArgs) => {
if (args.requestType === 'beginEdit' || args.requestType === 'add') {
orderData = Object.assign({}, args.rowData);
}
if (args.requestType === 'save') {
orderData['FeedbackDetails'] = (args.data as
EmployeeDetails)['FeedbackDetails'];
}
}
const editTemplate = () => {
return (
<div>
<DropDownListComponent id='FeedbackDetails'
dataSource={dropDownEnumValue} fields={dropdownFields}
value={orderData.FeedbackDetails} popupHeight={150}></DropDownListComponent>
</div>
)
}
return (<div>
<GridComponent id='Grid' dataSource={details} editSettings={editOptions}
toolbar={toolbarOptions} height={315} actionBegin={actionBegin}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
validationRules={orderIDRules} width='100' textAlign="Right"
isPrimaryKey={true} />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, FeedbackDetails: "Negative"
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, FeedbackDetails: "Positive"
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, FeedbackDetails: "Negative"
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, FeedbackDetails: "Negative"
},
{
OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, FeedbackDetails: "Negative"
},
{
OrderID: 10253, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 3,
OrderDate: new Date(836937e6),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, FeedbackDetails: "Negative"
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, FeedbackDetails: "Positive"
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, FeedbackDetails: "Negative"
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, FeedbackDetails: "Negative"
},
{
OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, FeedbackDetails: "Negative"
},
{
OrderID: 10253, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 3,
OrderDate: new Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, FeedbackDetails: "Negative"
},
{
OrderID: 10254, CustomerID: 'CHOPS', Role: 'Employee', EmployeeID: 5,
OrderDate: new Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, FeedbackDetails: "Positive"
},
{
OrderID: 10255, CustomerID: 'RICSU ', Role: 'Admin', EmployeeID: 9,
OrderDate: new Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, FeedbackDetails: "Negative"
},
{
OrderID: 10256, CustomerID: 'WELLI', Role: 'Employee', EmployeeID: 3,
OrderDate: new Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, FeedbackDetails: "Positive"
},
{
OrderID: 10257, CustomerID: 'HILAA', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, FeedbackDetails: "Negative"
},
{
OrderID: 10258, CustomerID: 'ERNSH', Role: 'Manager', EmployeeID: 1,
OrderDate: new Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, FeedbackDetails: "Negative"
},
{
OrderID: 10259, CustomerID: 'CENTC', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, FeedbackDetails: "Positive"
},
{
OrderID: 10260, CustomerID: 'OTTIK', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, FeedbackDetails: "Negative"
},
{
OrderID: 10261, CustomerID: 'QUEDE', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, FeedbackDetails: "Positive"
},
{
OrderID: 10262, CustomerID: 'RATTC', Role: 'Employee', EmployeeID: 8,
OrderDate: new Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, FeedbackDetails: "Negative"
}];
function App() {
const editOptions = { allowEditing: true, allowAdding: true, allowDeleting:
true };
const toolbarOptions = ['Add', 'Edit', 'Delete', 'Update', 'Cancel'];
const firstNameTemplate = (props) => {
return (
<div>
<input className='e-input' name='Name___FirstName' type='text'
id='Name___FirstName' defaultValue={props.Name.FirstName} />
</div>
)
}
const lastNameTemplate = (props) => {
return (
<div>
<input className='e-input' name='Name___LastName' type='text'
id='Name___LastName' defaultValue={props.Name.LastName} />
</div>
)
}
return (<div>
<GridComponent id='Grid' dataSource={complexData}
editSettings={editOptions}
toolbar={toolbarOptions} height={315} >
<ColumnsDirective>
<ColumnDirective field='EmployeeID' headerText='Employee ID'
width='100' textAlign="Right" isPrimaryKey={true} />
<ColumnDirective field='Name.FirstName' headerText='First Name'
width='120' editTemplate={firstNameTemplate} />
<ColumnDirective field='Name.LastName' headerText='Last Name'
width='150' editTemplate={lastNameTemplate} />
<ColumnDirective field='Title' headerText='Title' width='120' />
</ColumnsDirective>
<Inject services={[Edit, Toolbar]} />
</GridComponent></div>)
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { Edit, EditSettingsModel, Inject, Toolbar, ToolbarItems } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { complexData } from './datasource';
function App() {
const editOptions: EditSettingsModel = { allowEditing: true, allowAdding:
true, allowDeleting: true};
const toolbarOptions: ToolbarItems[] = ['Add', 'Edit', 'Delete', 'Update',
'Cancel'];
const firstNameTemplate =(props) =>{
return(
<div>
<input className='e-input' name='Name___FirstName' type='text'
id='Name___FirstName' defaultValue={props.Name.FirstName} />
</div>
)
}
const lastNameTemplate = (props) =>{
return(
<div>
<input className='e-input' name='Name___LastName' type='text'
id='Name___LastName' defaultValue={props.Name.LastName} />
</div>
)
}
return (<div>
<GridComponent id='Grid' dataSource={complexData}
editSettings={editOptions}
toolbar={toolbarOptions} height={315} >
<ColumnsDirective>
<ColumnDirective field='EmployeeID' headerText='Employee ID'
width='100' textAlign="Right" isPrimaryKey={true} />
<ColumnDirective field='Name.FirstName' headerText='First Name'
width='120' editTemplate={firstNameTemplate} />
<ColumnDirective field='Name.LastName' headerText='Last Name'
width='150' editTemplate={lastNameTemplate}/>
<ColumnDirective field='Title' headerText='Title' width='120' />
</ColumnsDirective>
<Inject services={[Edit, Toolbar]} />
</GridComponent></div>)
};
export default App;
DATASOURCE.JSX
export let complexData = [{
'EmployeeID': 1,
'Name': {
'LastName': 'Davolio',
'FirstName': 'Nancy'
},
'Names': [{
'LastName': 'Davolio',
'FirstName': 'Nancy'
}],
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-664743600000),
'HireDate': new Date(704692800000),
'Address': '507 - 20th Ave. E.\r\nApt. 2A',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98122',
'Country': 'USA',
'HomePhone': '(206) 555-9857',
'Extension': '5467',
'Photo': { 'Length': 21626 },
'Notes': 'Education includes a BA in psychology from Colorado State
University in 1970. She also completed\
'Region': null,
'PostalCode': 'SW1 8JR',
'Country': 'UK',
'HomePhone': '(71) 555-4848',
'Extension': '3453',
'Photo': { 'Length': 21626 },
'Notes': 'Steven Buchanan graduated from St. Andrews University,
Scotland, with a BSC degree in 1976. Upon joining the company as \
a sales representative in 1992, he spent 6 months in an orientation
program at the Seattle office and then returned to his permanent \
post in London. He was promoted to sales manager in March 1993. Mr.
Buchanan has completed the courses \'Successful \
Telemarketing\' and \'International Sales Management.\' He is fluent in
French.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/buchanan.bmp'
},
{
'EmployeeID': 6,
'Name': {
'LastName': 'Suyama',
'FirstName': 'Michael'
},
'Names': [{
'LastName': 'Leverling',
'FirstName': 'Janet'
}],
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-205185600000),
'HireDate': new Date(750830400000),
'Address': 'Coventry House\r\nMiner Rd.',
'City': 'London',
'Region': null,
'PostalCode': 'EC2 7JR',
'Country': 'UK',
'HomePhone': '(71) 555-7773',
'Extension': '428',
'Photo': { 'Length': 21626 },
'Notes': 'Michael is a graduate of Sussex University (MA, economics,
1983) and the University of California at Los Angeles \
(MBA, marketing, 1986). He has also taken the courses \'Multi-Cultural
Selling\' and \'Time Management for the Sales Professional.\' \
He is fluent in Japanese and can read and write French, Portuguese, and
Spanish.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 7,
'Name': {
'LastName': 'King',
'FirstName': 'Robert'
},
'Names': [{
'LastName': 'Peacock',
'FirstName': 'Margaret'
}],
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-302731200000),
'HireDate': new Date(757486800000),
'Address': 'Edgeham Hollow\r\nWinchester Way',
'City': 'London',
'Region': null,
'PostalCode': 'RG1 9SP',
'Country': 'UK',
'HomePhone': '(71) 555-5598',
'Extension': '465',
'Photo': { 'Length': 21626 },
'Notes': 'Robert King served in the Peace Corps and traveled extensively
before completing his degree in English at the \
University of Michigan in 1992, the year he joined the company. After
completing a course entitled \'Selling in Europe,\' \
he was transferred to the London office in March 1993.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 8,
'Name': {
'LastName': 'Callahan',
'FirstName': 'Laura'
},
'Names': [{
'LastName': 'Fuller',
'FirstName': 'Andrew'
}],
'Title': 'Inside Sales Coordinator',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-377982000000),
'HireDate': new Date(762843600000),
'Address': '4726 - 11th Ave. N.E.',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98105',
'Country': 'USA',
'HomePhone': '(206) 555-1189',
'Extension': '2344',
'Photo': { 'Length': 21626 },
'Notes': 'Laura received a BA in psychology from the University of
Washington. She has also completed a course in business \
French. She reads and writes French.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 9,
'Name': {
'LastName': 'Dodsworth',
'FirstName': 'Anne'
},
'Names': [{
'LastName': 'Fuller',
'FirstName': 'Andrew'
}],
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-123966000000),
'HireDate': new Date(784875600000),
'Address': '7 Houndstooth Rd.',
'City': 'London',
'Region': null,
'PostalCode': 'WG2 7LT',
'Country': 'UK',
'HomePhone': '(71) 555-4444',
'Extension': '452',
'Photo': { 'Length': 21626 },
'Notes': 'Anne has a BA degree in English from St. Lawrence College. She
is fluent in French and German.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
}];
DATASOURCE.TSX
export let complexData: Object[] = [{
'EmployeeID': 1,
'Name': {
'LastName': 'Davolio',
'FirstName': 'Nancy'
},
'Names': [{
'LastName': 'Davolio',
'FirstName': 'Nancy'
}],
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-664743600000),
'HireDate': new Date(704692800000),
'Address': '507 - 20th Ave. E.\r\nApt. 2A',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98122',
'Country': 'USA',
'HomePhone': '(206) 555-9857',
'Extension': '5467',
'Photo': { 'Length': 21626 },
'Notes': 'Education includes a BA in psychology from Colorado State
University in 1970. She also completed\
\'The Art of the Cold Call.\' Nancy is a member of Toastmasters
International.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 2,
'Name': {
'LastName': 'Fuller',
'FirstName': 'Andrew'
},
'Names': [{
'LastName': 'Fuller',
'FirstName': 'Andrew'
}],
'Title': 'Vice President, Sales',
'TitleOfCourtesy': 'Dr.',
'BirthDate': new Date(-563828400000),
'HireDate': new Date(713764800000),
'Address': '908 W. Capital Way',
'City': 'Tacoma',
'Region': 'WA',
'PostalCode': '98401',
'Country': 'USA',
'HomePhone': '(206) 555-9482',
'Extension': '3457',
'Photo': { 'Length': 21626 },
'Notes': 'Andrew received his BTS commercial in 1974 and a Ph.D. in
international marketing from the University of \
Dallas in 1981. He is fluent in French and Italian and reads German. He
joined the company as a sales representative, \
was promoted to sales manager in January 1992 and to vice president of
sales in March 1993. Andrew is a member of the \
Sales Management Roundtable, the Seattle Chamber of Commerce, and the
Pacific Rim Importers Association.',
'ReportsTo': 0,
'PhotoPath': 'http://accweb/emmployees/fuller.bmp'
},
{
'EmployeeID': 3,
'Name': {
'LastName': 'Leverling',
'FirstName': 'Janet'
},
'Names': [{
'LastName': 'Leverling',
'FirstName': 'Janet'
}],
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-200088000000),
'HireDate': new Date(702104400000),
'Address': '722 Moss Bay Blvd.',
'City': 'Kirkland',
'Region': 'WA',
'PostalCode': '98033',
'Country': 'USA',
'HomePhone': '(206) 555-3412',
'Extension': '3355',
'Photo': { 'Length': 21722 },
'Notes': 'Janet has a BS degree in chemistry from Boston College (1984).
\
She has also completed a certificate program in food retailing
management.\
Janet was hired as a sales associate in 1991 and promoted to sales
representative in February 1992.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/leverling.bmp'
},
{
'EmployeeID': 4,
'Name': {
'LastName': 'Peacock',
'FirstName': 'Margaret'
},
'Names': [{
'LastName': 'Peacock',
'FirstName': 'Margaret'
}],
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mrs.',
'BirthDate': new Date(-1018814400000),
'HireDate': new Date(736401600000),
'Address': '4110 Old Redmond Rd.',
'City': 'Redmond',
'Region': 'WA',
'PostalCode': '98052',
'Country': 'USA',
'HomePhone': '(206) 555-8122',
'Extension': '5176',
'Photo': { 'Length': 21626 },
'Notes': 'Margaret holds a BA in English literature from Concordia
College (1958) and an MA from the American \
Institute of Culinary Arts (1966). She was assigned to the London office
temporarily from July through November 1992.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/peacock.bmp'
},
{
'EmployeeID': 5,
'Name': {
'LastName': 'Buchanan',
'FirstName': 'Steven'
},
'Names': [{
'LastName': 'Buchanan',
'FirstName': 'Steven'
}],
'Title': 'Sales Manager',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-468010800000),
'HireDate': new Date(750830400000),
'Address': '14 Garrett Hill',
'City': 'London',
'Region': null,
'PostalCode': 'SW1 8JR',
'Country': 'UK',
'HomePhone': '(71) 555-4848',
'Extension': '3453',
'Photo': { 'Length': 21626 },
'Notes': 'Steven Buchanan graduated from St. Andrews University,
Scotland, with a BSC degree in 1976. Upon joining the company as \
a sales representative in 1992, he spent 6 months in an orientation
program at the Seattle office and then returned to his permanent \
'Country': 'UK',
'HomePhone': '(71) 555-4444',
'Extension': '452',
'Photo': { 'Length': 21626 },
'Notes': 'Anne has a BA degree in English from St. Lawrence College. She
is fluent in French and German.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
}];
<div>
<ComboBoxComponent id='EmployeeID' dataSource={dropDownData}
fields={comboFields} value={orderData.EmployeeID}></ComboBoxComponent>
</div>
)
}
return (<div>
<GridComponent id='Grid' dataSource={data} editSettings={editOptions}
toolbar={toolbarOptions} height={315} actionBegin={actionBegin}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
validationRules={orderIDRules} width='100' textAlign="Right"
isPrimaryKey={true} />
<ColumnDirective field='EmployeeID' headerText='Employee Name'
width='120' foreignKeyValue='FirstName' dataSource={employeeData}
editTemplate={editTemplate} />
<ColumnDirective field='OrderDate' headerText='Order Date'
width='150' format='yMd' editType='datepickeredit' />
<ColumnDirective field='Freight' headerText='Freight' width='150'
format='C2' />
</ColumnsDirective>
<Inject services={[Edit, Toolbar, ForeignKey]} />
</GridComponent></div>)
};
export default App;
APP.TSX
import { ComboBoxComponent } from '@syncfusion/ej2-react-dropdowns';
import { ColumnDirective, ColumnsDirective, ForeignKey, GridComponent,
SaveEventArgs } from '@syncfusion/ej2-react-grids';
import { Edit, EditSettingsModel, Inject, Toolbar, ToolbarItems } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data, employeeData } from './datasource';
export interface columnDataType {
OrderID: number,
Freight: number,
ShipCity: string,
EmployeeID: number,
ShipCountry: string,
ShipAddress: string,
OrderDate: Date
}
function App() {
let orderData: Object | any;
const editOptions: EditSettingsModel = { allowEditing: true, allowAdding:
true, allowDeleting: true };
const toolbarOptions: ToolbarItems[] = ['Add', 'Edit', 'Delete', 'Update',
'Cancel'];
const orderIDRules: object = { required: true };
const comboFields: Object = { text: 'FirstName', value: 'EmployeeID' };
const dropDownData: { [key: string]: Object; }[] = [
{ FirstName: 'Nancy', EmployeeID: 1 },
{ FirstName: 'Andrew', EmployeeID: 6 },
{ FirstName: 'Janet', EmployeeID: 3 },
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
'PostalCode': '98033',
'Country': 'USA',
'HomePhone': '(206) 555-3412',
'Extension': '3355',
'Photo': { 'Length': 21722 },
DATASOURCE.TSX
export let data: Object[] = [
{
'PhotoPath': 'http://accweb/emmployees/fuller.bmp'
},
{
'EmployeeID': 3,
'LastName': 'Leverling',
'FirstName': 'Janet',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-200088000000),
'HireDate': new Date(702104400000),
'Address': '722 Moss Bay Blvd.',
'City': 'Kirkland',
'Region': 'WA',
'PostalCode': '98033',
'Country': 'USA',
'HomePhone': '(206) 555-3412',
'Extension': '3355',
'Photo': { 'Length': 21722 },
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-468010800000),
'HireDate': new Date(750830400000),
'Address': '14 Garrett Hill',
'City': 'London',
'Region': null,
'PostalCode':
'SW1 8JR',
'Country': 'UK',
'HomePhone': '(71) 555-4848',
'Extension': '3453',
'Photo': { 'Length': 21626 },
break;
case 'delete':
grid.deleteRecord();
break;
case 'update':
grid.endEdit();
break;
case 'cancel':
grid.closeEdit();
break;
}
}
return (<div>
<div>
<ToolbarComponent clicked={ontoolbarClick}>
<ItemsDirective>
<ItemDirective text="Add" id="add"></ItemDirective>
<ItemDirective text="Edit" id="edit"></ItemDirective>
<ItemDirective text="Delete" id="delete"></ItemDirective>
<ItemDirective text="Update" id="update"></ItemDirective>
<ItemDirective text="Cancel" id="cancel"></ItemDirective>
</ItemsDirective>
</ToolbarComponent>
</div>
<GridComponent id='Grid' ref={g => grid = g} dataSource={data}
editSettings={editOptions}
height={315} allowPaging={true} pageSettings={pageSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
validationRules={orderIDRules} width='100' textAlign="Right"
isPrimaryKey={true} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='120' validationRules={customerIDRules} />
<ColumnDirective field='Freight' headerText='Freight' width='150'
format='C2' editType='numericedit' validationRules={freightRules} />
<ColumnDirective field='OrderDate' headerText='Order Date'
width='150' format='yMd' editType='datepickeredit' />
<ColumnDirective field='ShipCountry' headerText='Order Date'
width='150' format='yMd' editType='dropdownedit' edit={editparams} />
</ColumnsDirective>
<Inject services={[Edit, Toolbar]} />
</GridComponent></div>)
};
export default App;
APP.TSX
import { ClickEventArgs, ItemDirective, ItemsDirective, ToolbarComponent }
from '@syncfusion/ej2-react-navigations';
import { ColumnDirective, ColumnsDirective, GridComponent, PageSettingsModel
} from '@syncfusion/ej2-react-grids';
import { Edit, EditSettingsModel, Inject, Toolbar } from '@syncfusion/ej2-
react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 6, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004',
ShipCountry: 'France', Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', Mask: '5555', ShipPostalCode: 'B-6000',
ShipCountry: 'Belgium', Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '6666', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 58.17, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 6, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004',
ShipCountry: 'France', Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
const dropdown= [
{ shipCountry: 'Germany' },
{ shipCountry: 'Brazil' },
{ shipCountry: 'France' },
{ shipCountry: 'Belgium' },
{ shipCountry: 'Switzerland' },
{ shipCountry: 'Venezuela' },
{ shipCountry: 'USA' },
{ shipCountry: 'Mexico' },
{ shipCountry: 'Italy' },
{ shipCountry: 'Sweden' },
{ shipCountry: 'Finland' },
{ shipCountry: 'Spain' },
{ shipCountry: 'Canada' },
{ shipCountry: 'Portugal' },
{ shipCountry: 'Denmark' },
{ shipCountry: 'Austria' },
{ shipCountry: 'UK' },
{ shipCountry: 'Ireland' },
{ shipCountry: 'Norway' },
{ shipCountry: 'Argentina' },
];
const dropdownFields = { text: 'shipCountry', value: 'shipCountry' };
const handleInputChange = (field, value) => {
setSelectedProduct((prevProduct) => ({ ...prevProduct, [field]: value
}));
};
const save = () => {
const index = grid.getSelectedRowIndexes()[0];
grid.updateRow(index, selectedProduct);
}
const rowSelected = (args) => {
setSelectedProduct(args.data);
}
return (<div className='row'>
<div className="col-xs-6 col-md-3">
<div>
<div className="form-row">
<div className="form-group col-md-12">
<label >OrderID</label>
<input className="form-control"
defaultValue={selectedProduct.OrderID || '' } type="number" onChange={(e) =>
handleInputChange('OrderID', e.target.value)}/>
</div>
</div>
<div className="form-row">
<div className="form-group col-md-12">
<label >CustomerID</label>
<TextBoxComponent value={selectedProduct.CustomerID || ''}
change={(e) => handleInputChange('CustomerID', e.value)}></TextBoxComponent>
</div>
</div>
<div className="form-row">
<div className="form-group col-md-12">
<label >Frieght</label>
APP.TSX
import { NumericTextBoxComponent, TextBoxComponent } from '@syncfusion/ej2-
react-inputs';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, ForeignKey, GridComponent,
RowSelectEventArgs } from '@syncfusion/ej2-react-grids';
import { Edit, EditSettingsModel, Inject, Toolbar } from '@syncfusion/ej2-
react-grids';
import React, { useState } from 'react';
import { data } from './datasource';
// export class Order {
// OrderID: number;
// CustomerID: string;
// Freight: number;
// ShipCountry: string;
// }
function App() {
let grid: GridComponent | null;
const editOptions: EditSettingsModel = { allowEditing: true };
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, parentsUntil }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const gridTemplate = (props: any): any => {
return (<div>
<input id={props.OrderID} defaultValue={props.Freight}
className='custemp' type='text' />
</div>);
}
const created = (args): void => {
grid.element.addEventListener('keyup', function (e) { // Bind the keyup
event for the grid.
if ((e.target as any).classList.contains('custemp')) { // Based on
condition, you can find whether the target is an input element or not.
let row = parentsUntil(e.target as any, 'e-row');
let rowIndex = (row as any).rowIndex; // Get the row index.
let uid = row.getAttribute('data-uid');
let grid = (document.getElementsByClassName('e-grid')[0] as
any).ej2_instances[0];
let rowData = grid.getRowObjectFromUID(uid).data; // Get the row
data.
(rowData as any).Freight = (e.target as any).value; // Update the new
value for the corresponding column.
grid.updateRow(rowIndex, rowData); // Update the modified value in
the row data.
}
});
}
return <GridComponent dataSource={data} ref={g => grid = g} height={315}
created={created}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" isPrimaryKey={true} />
<ColumnDirective field='OrderDate' headerText='Order Date' width='130'
textAlign="Right" format='yMd' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='140' />
<ColumnDirective field='Freight' headerText='Receipt Amount'
width='140' template={gridTemplate} />
</ColumnsDirective>
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004', ShipCountry:
'France', Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', Mask: '5555', ShipPostalCode: 'B-6000',
ShipCountry: 'Belgium', Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 3,
OrderDate: new Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '6666', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', Role: 'Employee', EmployeeID: 5,
OrderDate: new Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', Mask: '7777', ShipPostalCode: '3012', ShipCountry:
'Switzerland', Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', Role: 'Admin', EmployeeID: 9,
OrderDate: new Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', Mask: '8888', ShipPostalCode: '1204', ShipCountry:
'Switzerland', Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', Role: 'Employee', EmployeeID: 3,
OrderDate: new Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', Mask: '9999', ShipPostalCode: '08737-363',
ShipCountry: 'Brazil', Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', Mask: '1234', ShipPostalCode: '5022',
ShipCountry: 'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', Role: 'Manager', EmployeeID: 1,
OrderDate: new Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', Mask: '2345', ShipPostalCode: '8010', ShipCountry:
'Austria', Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', Mask: '3456', ShipPostalCode: '05022', ShipCountry:
'Mexico', Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', Mask: '4567', ShipPostalCode: '50739', ShipCountry:
'Germany', Freight: 55.09, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', Role: 'Admin', EmployeeID: 5,
OrderDate: new Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', Mask: '1111', ShipPostalCode: '51100', ShipCountry:
'France', Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', Role: 'Employee', EmployeeID: 6,
OrderDate: new Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', Mask: '2222', ShipPostalCode: '44087', ShipCountry:
'Germany', Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', Role: 'Admin', EmployeeID: 4,
OrderDate: new Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', Mask: '3333', ShipPostalCode: '05454-876',
ShipCountry: 'Brazil', Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', Role: 'Manager', EmployeeID: 3,
OrderDate: new Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', Mask: '4444', ShipPostalCode: '69004', ShipCountry:
'France', Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', Role: 'Manager', EmployeeID: 4,
OrderDate: new Date(8368506e5),
* If a template column has a corresponding field property defined, the value entered in the template
column's input field will be stored in the associated edit column of the row's data object.
See also
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Sort]}/>
</GridComponent>;
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} allowSorting={true} height={300}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Sort]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
* Grid column sorted in Ascending order. If you click on an already sorted column, then toggles the sort
direction.
* You can apply and clear sorting by using the sortColumn and clearSorting methods.
* To disable sorting for a specific column, set the allowSorting property to false.
Initial sorting
By default, the grid component does not apply any sorting to its records at initial rendering. However,
you can apply initial sorting by setting the sortSettings.columns property to the desired field and sort
direction. This feature is helpful when you want to display your data in a specific order when the grid is
first loaded.
The following example demonstrates how to set sortSettings.columns for OrderID and ShipCity columns
with a specified direction.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const sortingOptions = {
columns: [{ field: 'OrderID', direction: 'Ascending' }, { field:
'ShipCity', direction: 'Descending' }]
};
return <GridComponent dataSource={data} allowSorting={true}
sortSettings={sortingOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Sort]} />
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort,
SortSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const sortingOptions: SortSettingsModel = {
columns: [{ field: 'OrderID', direction: 'Ascending' }, { field:
'ShipCity', direction: 'Descending' }]
};
return <GridComponent dataSource={data} allowSorting={true}
sortSettings={sortingOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Sort]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
The initial sorting defined in sortSettings.columns will override any sorting applied through user
interaction.
Multi-column sorting
The Grid component allows to sort more than one column at a time using multi-column sorting. To
enable multi-column sorting in the grid, set the allowSorting property to true, and set the
allowMultiSorting property to true which enable the user to sort multiple columns by hold the CTRL key
and click on the column headers. This feature is useful when you want to sort your data based on
multiple criteria to analyze it in various ways.
To clear multi-column sorting for a particular column, press the "Shift + mouse left click".
* The allowSorting must be true while enabling multi-column sort.
* Set allowMultiSorting property as false to disable multi-column sorting.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} allowSorting={true}
allowMultiSorting={true} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Sort]}/>
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} allowSorting={true}
allowMultiSorting={true} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Sort]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort }
from '@syncfusion/ej2-react-grids';
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
Sort order
By default, the sorting order will be as ascending -> descending -> none.
When you click on a column header for the first time, it sorts the column in ascending order. Clicking the
same column header again will sort the column in descending order. A repetitive third click on the same
column header will clear the sorting.
Custom sorting
The Grid component provides a way to customize the default sort action for a column by defining the
sortComparer property. The sort comparer function works similar to the Array.sort comparer function,
and allows to define custom sorting logic for a specific column.
The following example demonstrates how to define custom sort comparer function for the Customer ID
column.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const sortComparer = (reference, comparer) => {
if (reference < comparer) {
return -1;
}
if (reference > comparer) {
return 1;
}
return 0;
};
return <GridComponent dataSource={data} height={315} allowSorting={true}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right"/>
<ColumnDirective field='CustomerID' sortComparer={sortComparer}
headerText='Customer ID' width='150'/>
<ColumnDirective field='Freight' headerText='Freight' width='80'
textAlign="Right" format='C2'/>
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100'/>
</ColumnsDirective>
<Inject services={[Sort]}/>
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const sortComparer = (reference: string, comparer: string) => {
if (reference < comparer) {
return -1;
}
if (reference > comparer) {
return 1;
}
return 0;
};
return <GridComponent dataSource={data} height={315} allowSorting={true}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
The customSortComparer function takes two parameters: a and b. The a and b parameters are the
values to be compared. The function returns -1, 0, or 1, depending on the comparison result.
Touch interaction
When you tap grid header on touch screen devices, then the selected column header is sorted and
function App() {
return <GridComponent dataSource={data} allowSorting={true} height={300}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
foreignKeyValue='ContactName' foreignKeyField='CustomerID'
dataSource={customerData} width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Sort, ForeignKey]} />
</GridComponent>
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort,
ForeignKey } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data, customerData } from './datasource';
function App() {
return <GridComponent dataSource={data} allowSorting={true} height={300}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
foreignKeyValue='ContactName' foreignKeyField='CustomerID'
dataSource={customerData} width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Sort, ForeignKey]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
"Country": "France"
},
{
"CustomerID": "BOTTM",
"ContactName": "Elizabeth Lincoln",
"CompanyName": "Bottom-Dollar Markets",
"Address": "23 Tsawassen Blvd.",
"Country": "Canada"
},
{
"CustomerID": "BSBEV",
"ContactName": "Victoria Ashworth",
"CompanyName": "B's Beverages",
"Address": "Fauntleroy Circus",
"Country": "UK"
},
{
"CustomerID": "CACTU",
"ContactName": "Patricio Simpson",
"CompanyName": "Cactus Comidas para llevar",
"Address": "Cerrito 333",
"Country": "Argentina"
},
{
"CustomerID": "CENTC",
"ContactName": "Francisco Chang",
"CompanyName": "Centro comercial Moctezuma",
"Address": "Sierras de Granada 9993",
"Country": "Mexico"
},
{
"CustomerID": "CHOPS",
"ContactName": "Yang Wang",
"CompanyName": "Chop-suey Chinese",
"Address": "Hauptstr. 29",
"Country": "Switzerland"
},
{
"CustomerID": "COMMI",
"ContactName": "Pedro Afonso",
"CompanyName": "Comércio Mineiro",
"Address": "Av. dos Lusíadas, 23",
"Country": "Brazil"
},
{
"CustomerID": "CONSH",
"ContactName": "Elizabeth Brown",
"CompanyName": "Consolidated Holdings",
"Address": "Berkeley Gardens 12 Brewery",
"Country": "UK"
},
{
"CustomerID": "DRACD",
"ContactName": "Sven Ottlieb",
"CompanyName": "Drachenblut Delikatessen",
"Address": "Walserweg 21",
"Country": "Germany"
},
{
"CustomerID": "DUMON",
"ContactName": "Janine Labrune",
"CompanyName": "Du monde entier",
"Address": "67, rue des Cinquante Otages",
"Country": "France"
},
{
"CustomerID": "EASTC",
"ContactName": "Ann Devon",
"CompanyName": "Eastern Connection",
"Address": "35 King George",
"Country": "UK"
},
{
"CustomerID": "ERNSH",
"ContactName": "Roland Mendel",
"CompanyName": "Ernst Handel",
"Address": "Kirchgasse 6",
"Country": "Austria"
},
{
"CustomerID": "FAMIA",
"ContactName": "Aria Cruz",
"CompanyName": "Familia Arquibaldo",
"Address": "Rua Orós, 92",
"Country": "Brazil"
},
{
"CustomerID": "FISSA",
"ContactName": "Diego Roel",
"CompanyName": "FISSA Fabrica Inter. Salchichas S.A.",
"Address": "C/ Moralzarzal, 86",
"Country": "Spain"
},
{
"CustomerID": "FOLIG",
"ContactName": "Martine Rancé",
"CompanyName": "Folies gourmandes",
"Address": "184, chaussée de Tournai",
"Country": "France"
},
{
"CustomerID": "FOLKO",
"ContactName": "Maria Larsson",
"CompanyName": "Folk och fä HB",
"Address": "Åkergatan 24",
"Country": "Sweden"
},
{
"CustomerID": "FRANK",
"ContactName": "Peter Franken",
"CompanyName": "Frankenversand",
"Address": "Berliner Platz 43",
"Country": "Germany"
},
{
"CustomerID": "FRANR",
"ContactName": "Carine Schmitt",
"CompanyName": "France restauration",
"Address": "54, rue Royale",
"Country": "France"
},
{
"CustomerID": "FRANS",
"ContactName": "Paolo Accorti",
"CompanyName": "Franchi S.p.A.",
"Address": "Via Monte Bianco 34",
"Country": "Italy"
},
{
"CustomerID": "FURIB",
"ContactName": "Lino Rodriguez",
"CompanyName": "Furia Bacalhau e Frutos do Mar",
"Address": "Jardim das rosas n. 32",
"Country": "Portugal"
},
{
"CustomerID": "GALED",
"ContactName": "Eduardo Saavedra",
"CompanyName": "Galería del gastrónomo",
"Address": "Rambla de Cataluña, 23",
"Country": "Spain"
},
{
"CustomerID": "GODOS",
"ContactName": "José Pedro Freyre",
"CompanyName": "Godos Cocina Típica",
"Address": "C/ Romero, 33",
"Country": "Spain"
},
{
"CustomerID": "GOURL",
"ContactName": "André Fonseca",
"CompanyName": "Gourmet Lanchonetes",
"Address": "Av. Brasil, 442",
"Country": "Brazil"
},
{
"CustomerID": "GREAL",
"ContactName": "Howard Snyder",
"CompanyName": "Great Lakes Food Market",
"Address": "2732 Baker Blvd.",
"Country": "USA"
},
{
"CustomerID": "GROSR",
"ContactName": "Manuel Pereira",
"CompanyName": "GROSELLA-Restaurante",
"Address": "5ª Ave. Los Palos Grandes",
"Country": "Venezuela"
},
{
"CustomerID": "HANAR",
"ContactName": "Mario Pontes",
"CompanyName": "Hanari Carnes",
"Address": "Rua do Paço, 67",
"Country": "Brazil"
},
{
"CustomerID": "HILAA",
"ContactName": "Carlos Hernández",
"CompanyName": "HILARION-Abastos",
"Address": "Carrera 22 con Ave. Carlos Soublette #8-35",
"Country": "Venezuela"
},
{
"CustomerID": "HUNGC",
"ContactName": "Yoshi Latimer",
"CompanyName": "Hungry Coyote Import Store",
"Address": "City Center Plaza 516 Main St.",
"Country": "USA"
},
{
"CustomerID": "HUNGO",
"ContactName": "Patricia McKenna",
"CompanyName": "Hungry Owl All-Night Grocers",
"Address": "8 Johnstown Road",
"Country": "Ireland"
},
{
"CustomerID": "ISLAT",
"ContactName": "Helen Bennett",
"CompanyName": "Island Trading",
"Address": "Garden House Crowther Way",
"Country": "UK"
},
{
"CustomerID": "KOENE",
"ContactName": "Philip Cramer",
"CompanyName": "Königlich Essen",
"Address": "Maubelstr. 90",
"Country": "Germany"
},
{
"CustomerID": "LACOR",
"ContactName": "Daniel Tonini",
"CompanyName": "La corne d'abondance",
"Address": "67, avenue de l'Europe",
"Country": "France"
},
{
"CustomerID": "LAMAI",
"ContactName": "Annette Roulet",
"CompanyName": "La maison d'Asie",
"Address": "1 rue Alsace-Lorraine",
"Country": "France"
},
{
"CustomerID": "LAUGB",
"Country": "Italy"
},
{
"CustomerID": "RICAR",
"ContactName": "Janete Limeira",
"CompanyName": "Ricardo Adocicados",
"Address": "Av. Copacabana, 267",
"Country": "Brazil"
},
{
"CustomerID": "RICSU",
"ContactName": "Michael Holz",
"CompanyName": "Richter Supermarkt",
"Address": "Grenzacherweg 237",
"Country": "Switzerland"
},
{
"CustomerID": "ROMEY",
"ContactName": "Alejandra Camino",
"CompanyName": "Romero y tomillo",
"Address": "Gran Vía, 1",
"Country": "Spain"
},
{
"CustomerID": "SANTG",
"ContactName": "Jonas Bergulfsen",
"CompanyName": "Santé Gourmet",
"Address": "Erling Skakkes gate 78",
"Country": "Norway"
},
{
"CustomerID": "SAVEA",
"ContactName": "Jose Pavarotti",
"CompanyName": "Save-a-lot Markets",
"Address": "187 Suffolk Ln.",
"Country": "USA"
},
{
"CustomerID": "SEVES",
"ContactName": "Hari Kumar",
"CompanyName": "Seven Seas Imports",
"Address": "90 Wadhurst Rd.",
"Country": "UK"
},
{
"CustomerID": "SIMOB",
"ContactName": "Jytte Petersen",
"CompanyName": "Simons bistro",
"Address": "Vinbæltet 34",
"Country": "Denmark"
},
{
"CustomerID": "SPECD",
"ContactName": "Dominique Perrier",
"CompanyName": "Spécialités du monde",
"Address": "25, rue Lauriston",
"Country": "France"
},
{
"CustomerID": "SPLIR",
"ContactName": "Art Braunschweiger",
"CompanyName": "Split Rail Beer & Ale",
"Address": "P.O. Box 555",
"Country": "USA"
},
{
"CustomerID": "SUPRD",
"ContactName": "Pascale Cartrain",
"CompanyName": "Suprêmes délices",
"Address": "Boulevard Tirou, 255",
"Country": "Belgium"
},
{
"CustomerID": "THEBI",
"ContactName": "Liz Nixon",
"CompanyName": "The Big Cheese",
"Address": "89 Jefferson Way Suite 2",
"Country": "USA"
},
{
"CustomerID": "THECR",
"ContactName": "Liu Wong",
"CompanyName": "The Cracker Box",
"Address": "55 Grizzly Peak Rd.",
"Country": "USA"
},
{
"CustomerID": "TOMSP",
"ContactName": "Karin Josephs",
"CompanyName": "Toms Spezialitäten",
"Address": "Luisenstr. 48",
"Country": "Germany"
},
{
"CustomerID": "TORTU",
"ContactName": "Miguel Angel Paolino",
"CompanyName": "Tortuga Restaurante",
"Address": "Avda. Azteca 123",
"Country": "Mexico"
},
{
"CustomerID": "TRADH",
"ContactName": "Anabela Domingues",
"CompanyName": "Tradição Hipermercados",
"Address": "Av. Inês de Castro, 414",
"Country": "Brazil"
},
{
"CustomerID": "TRAIH",
"ContactName": "Helvetius Nagy",
"CompanyName": "Trail's Head Gourmet Provisioners",
"Address": "722 DaVinci Blvd.",
"Country": "USA"
},
{
"CustomerID": "VAFFE",
"ContactName": "Palle Ibsen",
"CompanyName": "Vaffeljernet",
"Address": "Smagsloget 45",
"Country": "Denmark"
},
{
"CustomerID": "VICTE",
"ContactName": "Mary Saveley",
"CompanyName": "Victuailles en stock",
"Address": "2, rue du Commerce",
"Country": "France"
},
{
"CustomerID": "VINET",
"ContactName": "Paul Henriot",
"CompanyName": "Vins et alcools Chevalier",
"Address": "59 rue de l'Abbaye",
"Country": "France"
},
{
"CustomerID": "WANDK",
"ContactName": "Rita Müller",
"CompanyName": "Die Wandernde Kuh",
"Address": "Adenauerallee 900",
"Country": "Germany"
},
{
"CustomerID": "WARTH",
"ContactName": "Pirkko Koskitalo",
"CompanyName": "Wartian Herkku",
"Address": "Torikatu 38",
"Country": "Finland"
},
{
"CustomerID": "WELLI",
"ContactName": "Paula Parente",
"CompanyName": "Wellington Importadora",
"Address": "Rua do Mercado, 12",
"Country": "Brazil"
},
{
"CustomerID": "WHITC",
"ContactName": "Karl Jablonski",
"CompanyName": "White Clover Markets",
"Address": "305 - 14th Ave. S. Suite 3B",
"Country": "USA"
},
{
"CustomerID": "WILMK",
"ContactName": "Matti Karttunen",
"CompanyName": "Wilman Kala",
"Address": "Keskuskatu 45",
"Country": "Finland"
},
{
"CustomerID": "WOLZA",
"ContactName": "Zbyszek Piestrzeniewicz",
"CompanyName": "Wolski Zajazd",
"Address": "ul. Filtrowa 68",
"Country": "Poland"
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
"Country": "Spain"
},
{
"CustomerID": "GOURL",
"ContactName": "André Fonseca",
"CompanyName": "Gourmet Lanchonetes",
"Address": "Av. Brasil, 442",
"Country": "Brazil"
},
{
"CustomerID": "GREAL",
"ContactName": "Howard Snyder",
"CompanyName": "Great Lakes Food Market",
"Address": "2732 Baker Blvd.",
"Country": "USA"
},
{
"CustomerID": "GROSR",
"ContactName": "Manuel Pereira",
"CompanyName": "GROSELLA-Restaurante",
"Address": "5ª Ave. Los Palos Grandes",
"Country": "Venezuela"
},
{
"CustomerID": "HANAR",
"ContactName": "Mario Pontes",
"CompanyName": "Hanari Carnes",
"Address": "Rua do Paço, 67",
"Country": "Brazil"
},
{
"CustomerID": "HILAA",
"ContactName": "Carlos Hernández",
"CompanyName": "HILARION-Abastos",
"Address": "Carrera 22 con Ave. Carlos Soublette #8-35",
"Country": "Venezuela"
},
{
"CustomerID": "HUNGC",
"ContactName": "Yoshi Latimer",
"CompanyName": "Hungry Coyote Import Store",
"Address": "City Center Plaza 516 Main St.",
"Country": "USA"
},
{
"CustomerID": "HUNGO",
"ContactName": "Patricia McKenna",
"CompanyName": "Hungry Owl All-Night Grocers",
"Address": "8 Johnstown Road",
"Country": "Ireland"
},
{
"CustomerID": "ISLAT",
"ContactName": "Helen Bennett",
"CompanyName": "Island Trading",
"Address": "Garden House Crowther Way",
"Country": "UK"
},
{
"CustomerID": "KOENE",
"ContactName": "Philip Cramer",
"CompanyName": "Königlich Essen",
"Address": "Maubelstr. 90",
"Country": "Germany"
},
{
"CustomerID": "LACOR",
"ContactName": "Daniel Tonini",
"CompanyName": "La corne d'abondance",
"Address": "67, avenue de l'Europe",
"Country": "France"
},
{
"CustomerID": "LAMAI",
"ContactName": "Annette Roulet",
"CompanyName": "La maison d'Asie",
"Address": "1 rue Alsace-Lorraine",
"Country": "France"
},
{
"CustomerID": "LAUGB",
"ContactName": "Yoshi Tannamuri",
"CompanyName": "Laughing Bacchus Wine Cellars",
"Address": "1900 Oak St.",
"Country": "Canada"
},
{
"CustomerID": "LAZYK",
"ContactName": "John Steel",
"CompanyName": "Lazy K Kountry Store",
"Address": "12 Orchestra Terrace",
"Country": "USA"
},
{
"CustomerID": "LEHMS",
"ContactName": "Renate Messner",
"CompanyName": "Lehmanns Marktstand",
"Address": "Magazinweg 7",
"Country": "Germany"
},
{
"CustomerID": "LETSS",
"ContactName": "Jaime Yorres",
"CompanyName": "Let's Stop N Shop",
"Address": "87 Polk St. Suite 5",
"Country": "USA"
},
{
"CustomerID": "LILAS",
"ContactName": "Carlos González",
"CompanyName": "LILA-Supermercado",
"Address": "Carrera 52 con Ave. Bolívar #65-98 Llano Largo",
"Country": "Venezuela"
},
{
"CustomerID": "LINOD",
"ContactName": "Felipe Izquierdo",
"CompanyName": "LINO-Delicateses",
"Address": "Ave. 5 de Mayo Porlamar",
"Country": "Venezuela"
},
{
"CustomerID": "LONEP",
"ContactName": "Fran Wilson",
"CompanyName": "Lonesome Pine Restaurant",
"Address": "89 Chiaroscuro Rd.",
"Country": "USA"
},
{
"CustomerID": "MAGAA",
"ContactName": "Giovanni Rovelli",
"CompanyName": "Magazzini Alimentari Riuniti",
"Address": "Via Ludovico il Moro 22",
"Country": "Italy"
},
{
"CustomerID": "MAISD",
"ContactName": "Catherine Dewey",
"CompanyName": "Maison Dewey",
"Address": "Rue Joseph-Bens 532",
"Country": "Belgium"
},
{
"CustomerID": "MEREP",
"ContactName": "Jean Fresnière",
"CompanyName": "Mère Paillarde",
"Address": "43 rue St. Laurent",
"Country": "Canada"
},
{
"CustomerID": "MORGK",
"ContactName": "Alexander Feuer",
"CompanyName": "Morgenstern Gesundkost",
"Address": "Heerstr. 22",
"Country": "Germany"
},
{
"CustomerID": "NORTS",
"ContactName": "Simon Crowther",
"CompanyName": "North/South",
"Address": "South House 300 Queensbridge",
"Country": "UK"
},
{
"CustomerID": "OCEAN",
"ContactName": "Yvonne Moncada",
"CompanyName": "Océano Atlántico Ltda.",
"Address": "Ing. Gustavo Moncada 8585 Piso 20-A",
"Country": "Argentina"
},
{
"CustomerID": "OLDWO",
"ContactName": "Rene Phillips",
"CompanyName": "Old World Delicatessen",
"Address": "2743 Bering St.",
"Country": "USA"
},
{
"CustomerID": "OTTIK",
"ContactName": "Henriette Pfalzheim",
"CompanyName": "Ottilies Käseladen",
"Address": "Mehrheimerstr. 369",
"Country": "Germany"
},
{
"CustomerID": "PARIS",
"ContactName": "Marie Bertrand",
"CompanyName": "Paris spécialités",
"Address": "265, boulevard Charonne",
"Country": "France"
},
{
"CustomerID": "PERIC",
"ContactName": "Guillermo Fernández",
"CompanyName": "Pericles Comidas clásicas",
"Address": "Calle Dr. Jorge Cash 321",
"Country": "Mexico"
},
{
"CustomerID": "PICCO",
"ContactName": "Georg Pipps",
"CompanyName": "Piccolo und mehr",
"Address": "Geislweg 14",
"Country": "Austria"
},
{
"CustomerID": "PRINI",
"ContactName": "Isabel de Castro",
"CompanyName": "Princesa Isabel Vinhos",
"Address": "Estrada da saúde n. 58",
"Country": "Portugal"
},
{
"CustomerID": "QUEDE",
"ContactName": "Bernardo Batista",
"CompanyName": "Que Delícia",
"Address": "Rua da Panificadora, 12",
"Country": "Brazil"
},
{
"CustomerID": "QUEEN",
"ContactName": "Lúcia Carvalho",
"CompanyName": "Queen Cozinha",
"Address": "Alameda dos Canàrios, 891",
"Country": "Brazil"
},
{
"CustomerID": "QUICK",
"Country": "Finland"
},
{
"CustomerID": "WELLI",
"ContactName": "Paula Parente",
"CompanyName": "Wellington Importadora",
"Address": "Rua do Mercado, 12",
"Country": "Brazil"
},
{
"CustomerID": "WHITC",
"ContactName": "Karl Jablonski",
"CompanyName": "White Clover Markets",
"Address": "305 - 14th Ave. S. Suite 3B",
"Country": "USA"
},
{
"CustomerID": "WILMK",
"ContactName": "Matti Karttunen",
"CompanyName": "Wilman Kala",
"Address": "Keskuskatu 45",
"Country": "Finland"
},
{
"CustomerID": "WOLZA",
"ContactName": "Zbyszek Piestrzeniewicz",
"CompanyName": "Wolski Zajazd",
"Address": "ul. Filtrowa 68",
"Country": "Poland"
}
];
Make sure to inject the ForeignKey module in the grid to ensure its availability throughout your
application.
Sort foreign key column based on text for remote data
In the case of remote data in the grid, the sorting operation will be performed based on the
foreignKeyField property of the column. The foreignKeyField property should be defined in the column
definition with the corresponding foreign key field name for each row. The grid will send a request to
the server-side with the foreignKeyField name, and the server-side should handle the sorting operation
and return the sorted data to the grid.
`typescript
import { DataManager, ODataV4Adaptor } from '@syncfusion/ej2-data';
import { ColumnDirective, ColumnsDirective, ForeignKey, GridComponent, Inject, Sort } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
function App() {
const data = new DataManager({
adaptor: new ODataV4Adaptor,
url: '/OData/Items'
});
const employeeData = new DataManager({
adaptor: new ODataV4Adaptor,
url: '/OData/Brands'
});
return <GridComponent dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100' textAlign="Right" />
<ColumnDirective field='EmployeeID' foreignKeyValue='FirstName' foreignKeyField='EmployeeID'
dataSource={employeeData} headerText='Employee Name' width='150' />
<ColumnDirective field='Freight' headerText='Freight' width='80' textAlign="Right" format='C2' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100' />
</ColumnsDirective>
<Inject services={[ForeignKey, Sort]} />
</GridComponent>
};
export default App;
`
The following code example describes the handling of sorting operation at the server side.
`cs
public class ItemsController : ODataController
{
[EnableQuery]
public IQueryable<Item> Get()
{
List<Item> GridData =
JsonConvert.DeserializeObject<Item[]>(Properties.Resources.ItemsJson).AsQueryable().ToList();
List<Brand> empData =
JsonConvert.DeserializeObject<Brand[]>(Properties.Resources.BrandsJson).AsQueryable().ToList();
let queryString = HttpContext.Current.Request.QueryString;
let allUrlKeyValues = ControllerContext.Request.GetQueryNameValuePairs();
string key = allUrlKeyValues.LastOrDefault(x => x.Key == "$orderby").Value;
if (key != null)
{
if (key == "EmployeeID") {
GridData = SortFor(key); //Only for foreignKey Column ascending
}
else if(key == "EmployeeID desc") {
GridData = SortFor(key); //Only for foreignKey Column descending
}
}
let count = GridData.Count();
let data = GridData.AsQueryable();
return data;
}
public List<Item> SortFor(String Sorted)
{
List<Item> GridData =
JsonConvert.DeserializeObject<Item[]>(Properties.Resources.ItemsJson).AsQueryable().ToList();
List<Brand> empData =
JsonConvert.DeserializeObject<Brand[]>(Properties.Resources.BrandsJson).AsQueryable().ToList();
if (Sorted == "EmployeeID") //check whether ascending or descending
empData = empData.OrderBy(e => e.FirstName).ToList();
else if(Sorted == "EmployeeID desc")
empData = empData.OrderByDescending(e => e.FirstName).ToList();
List<Item> or = new List<Item>();
for (int i = 0; i < empData.Count(); i++) {
//Select the Field matching records
IEnumerable<Item> list = GridData.Where(pred => pred.EmployeeID ==
empData[i].EmployeeID).ToList();
or.AddRange(list);
}
return or;
}
}
`
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
import {loadCldr, setCulture, setCurrencyCode } from '@syncfusion/ej2-base';
import * as cagregorian from './ca-gregorian.json';
import * as currencies from './currencies.json';
import * as numbers from './numbers.json';
import * as timeZoneNames from './timeZoneNames.json';
import * as numberingSystems from './numberingSystems.json'
function App() {
const formatOption: object = { type: 'date', format: 'yyyy-MMM-dd' };
const locale: string = 'ar';
setCulture('ar');
setCurrencyCode('QAR');
loadCldr(
cagregorian,
currencies,
numbers,
timeZoneNames,
numberingSystems
);
const sortComparer = (reference: string, comparer: string, sortOrder:
string) => {
const referenceDate = new Date(reference);
const comparerDate = new Date(comparer);
if (typeof reference === 'number' && typeof comparer === 'number') {
// Numeric column sorting
return sortOrder === 'Ascending' ? comparer - reference : reference -
comparer;
} else if (!isNaN(referenceDate.getTime()) &&
!isNaN(comparerDate.getTime())) {
// Date column sorting
return sortOrder === 'Ascending' ? comparerDate.getTime() -
referenceDate.getTime() : referenceDate.getTime() - comparerDate.getTime();
}
else {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort,
SortSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const sortingOptions: SortSettingsModel = {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
The following example demonstrates how to add sort columns to a grid. It utilizes the DropDownList
component to select the column and sort direction. When an external button is clicked, the sortColumn
method is called with the specified columnName, direction, and isMultiSort parameters.
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort,
SortDirection, SortSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
let dropColumn;
let dropdirection;
const columns = [
{ text: 'Order ID', value: 'OrderID' },
{ text: 'Customer ID', value: 'CustomerID' },
{ text: 'Freight', value: 'Freight' },
];
const direction = [
{ text: 'Ascending', value: 'Ascending' },
{ text: 'Descending', value: 'Descending' },
];
const field = { text: 'text', value: 'value' };
const sortingOptions = {
columns: [{ field: 'ShipName', direction: 'Ascending' }]
};
const addSortColumn = () => {
grid.sortColumn(dropColumn.value, dropdirection.value, true);
}
return (<div>
<div>
<label style={{ padding: "30px 20px 0 0" }}> Column name :</label>
<DropDownListComponent ref={dc => dropColumn = dc} index={0}
width='120' dataSource={columns}
fields={field}></DropDownListComponent></div>
<div>
<label style={{ padding: "30px 20px 0 0" }}> Sort direction :</label>
<DropDownListComponent ref={dd => dropdirection = dd} index={0}
width='120' dataSource={direction}
fields={field}></DropDownListComponent></div>
<ButtonComponent style={{ marginTop: "10px" }} cssClass='e-outline'
onClick={addSortColumn}>Add Sort Column</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data} allowSorting={true}
sortSettings={sortingOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
textAlign="Right" format='C'/>
<ColumnDirective field='ShipName' headerText='Ship Name' width='100'
/>
</ColumnsDirective>
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort,
SortDirection, SortSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
let dropColumn: DropDownListComponent | null;
let dropdirection: DropDownListComponent | null;
const columns: { [key: string]: Object; }[] = [
{ text: 'Order ID', value: 'OrderID' },
{ text: 'Customer ID', value: 'CustomerID' },
{ text: 'Freight', value: 'Freight' },
];
const direction: { [key: string]: Object; }[] = [
{ text: 'Ascending', value: 'Ascending' },
{ text: 'Descending', value: 'Descending' },
];
const field: Object = { text: 'text', value: 'value' };
const sortingOptions: SortSettingsModel = {
columns: [{ field: 'ShipName', direction: 'Ascending' }]
};
const addSortColumn = () => {
(grid as GridComponent).sortColumn(((dropColumn as
DropDownListComponent).value as string), ((dropdirection as
DropDownListComponent).value as SortDirection), true);
}
return (<div>
<div>
<label style={{ padding: "30px 20px 0 0" }}> Column name :</label>
<DropDownListComponent ref={dc => dropColumn = dc} index={0}
width='120' dataSource={columns}
fields={field}></DropDownListComponent></div>
<div>
<label style={{ padding: "30px 20px 0 0" }}> Sort direction :</label>
<DropDownListComponent ref={dd => dropdirection = dd} index={0}
width='120' dataSource={direction}
fields={field}></DropDownListComponent></div>
<ButtonComponent style={{ marginTop: "10px" }} cssClass='e-outline'
onClick={addSortColumn}>Add Sort Column</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data} allowSorting={true}
sortSettings={sortingOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort,
SortSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
let dropColumn: DropDownListComponent | null;
const columns: { [key: string]: Object; }[] = [
{ text: 'Order ID', value: 'OrderID' },
{ text: 'Customer ID', value: 'CustomerID' },
{ text: 'ShipCity', value: 'ShipCity' },
{ text: 'ShipName', value: 'ShipName' }
];
const field: Object = { text: 'text', value: 'value' };
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
Clear sorting
To clear the sorting on an external button click, you can use the clearSorting method provided by the
Grid component. This method clears the sorting applied to all columns in the grid.
The following example demonstrates how to clear the sorting using clearSorting method in the external
button click.
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort,
SortSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const sortingOptions = {
columns: [{ field: 'CustomerID', direction: 'Ascending' }, { field:
'ShipName', direction: 'Descending' }]
};
const clearSorting = () => {
grid.clearSorting();
}
return (<div>
<ButtonComponent style={{ marginTop: "10px" }} cssClass='e-outline'
onClick={clearSorting}>Clear Sorting</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data} allowSorting={true}
sortSettings={sortingOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100'
/>
</ColumnsDirective>
<Inject services={[Sort]} />
</GridComponent></div>)
};
export default App;
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort,
SortSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
Sorting events
The Grid component provides two events that are triggered during the sorting action such as
actionBegin and actionComplete. These events can be used to perform any custom actions before and
after the sorting action is completed.
1. actionBegin: actionBegin event is triggered before the sorting action begins. It provides a way to
perform any necessary operations before the sorting action takes place. This event provides a
parameter that contains the current grid state, including the current sorting column, direction,
and data.
2. actionComplete: actionComplete event is triggered after the sorting action is completed. It
provides a way to perform any necessary operations after the sorting action has taken place.
This event provides a parameter that contains the current grid state, including the sorted data
and column information.
The following example demonstrates how the actionBegin and actionComplete events work when
sorting is performed. The actionBegin event event is used to cancel the sorting of the OrderID column.
The actionComplete event is used to display a message.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { useState } from 'react';
import { data } from './datasource';
function App() {
const [message, setMessage] = useState('');
const actionBegin = (args) => {
if (args.requestType === 'sorting' && args.columnName === 'OrderID') {
args.cancel = true;
}
}
const actionComplete = (args) => {
setMessage(args.requestType + ' action completed for ' + args.columnName
+ ' column');
}
return (<div>
<div style={{ marginLeft: "100px" }}><p style={{ color: "red" }}
id="message">{message}</p></div>
<GridComponent dataSource={data} allowSorting={true} height={315}
actionBegin={actionBegin} actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100'
/>
</ColumnsDirective>
<Inject services={[Sort]} />
</GridComponent></div>)
};
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Sort,
SortEventArgs } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { useState } from 'react';
import { data } from './datasource';
function App() {
const [message, setMessage] = useState('');
const actionBegin = (args: SortEventArgs) => {
if (args.requestType === 'sorting' && args.columnName === 'OrderID') {
args.cancel = true;
}
}
const actionComplete = (args: SortEventArgs) => {
setMessage(args.requestType + ' action completed for ' + args.columnName
+ ' column');
}
return (<div>
<div style={{ marginLeft: "100px" }}><p style={{ color: "red" }}
id="message">{message}</p></div>
<GridComponent dataSource={data} allowSorting={true} height={315}
actionBegin={actionBegin} actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100'
/>
</ColumnsDirective>
<Inject services={[Sort]} />
</GridComponent></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
args.requestType refers to the current action being performed. For example in sorting, the
args.requestType value is sorting.
See also
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Group, Inject }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', EmployeeID: 8, OrderDate: new
Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
* You can group and ungroup columns in the Grid by using the groupColumn and ungroupColumn
methods respectively.
* To disable grouping for a specific column, set the allowGrouping to false.
Initial group
To enable initial grouping in the Grid, you can use the groupSettings property and set the
groupSettings.columns property to an array of column names(field of the column) that you want to
group by. This feature is particularly useful when working with large datasets, as it allows you to quickly
organize and analyze the data based on specific criteria.
The following example demonstrates how to set an initial grouping for the CustomerID and ShipCity
columns during the initial rendering grid, by using the groupSettings.columns property.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Group, Inject }
from '@syncfusion/ej2-react-grids';
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Group,
GroupSettingsModel, Inject } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const groupOptions: GroupSettingsModel = {
columns: ['CustomerID', 'ShipCity']
};
return <GridComponent dataSource={data} allowGrouping={true}
groupSettings={groupOptions} height={267}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name' width='150' />
</ColumnsDirective>
<Inject services={[Group]} />
</GridComponent >
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
You can group by multiple columns by specifying an array of column names in the columns property of
the groupSettings.
Prevent grouping for particular column
The Grid component provides the ability to prevent grouping for a particular column. This can be useful
when you have certain columns that you do not want to be included in the grouping process. It can be
achieved by setting the allowGrouping property of the particular ColumnDirective to false. The
following example demonstrates, how to disable grouping for CustomerID column.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Group, Inject }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return <GridComponent dataSource={data} allowGrouping={true}
height={267}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right"/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' allowGrouping={false}/>
<ColumnDirective field='ShipCity' headerText='Ship City' width='150'/>
<ColumnDirective field='ShipName' headerText='Ship Name' width='150'/>
</ColumnsDirective>
<Inject services={[Group]}/>
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Group, Inject }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', EmployeeID: 8, OrderDate: new
Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
APP.TSX
import { ChangeEventArgs, SwitchComponent } from '@syncfusion/ej2-react-
buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Group,
GroupSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const groupOptions: GroupSettingsModel = {
columns: ['CustomerID', 'ShipCity'],
showDropArea: false
};
const onSwitchChange = (args: ChangeEventArgs) => {
if (args.checked) {
(grid as GridComponent).groupSettings.showDropArea = true;
}
else {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
By default, the group drop area will be shown only if there is at least one column available to group.
Show the grouped column
The Syncfusion React Grid has a default behavior where the grouped column is hidden, to provide a
cleaner and more focused view of your data. However, if you prefer to show the grouped column in the
grid, you can achieve this by setting the groupSettings.showGroupedColumn property to true.
In the following example, the EJ2 Toggle Switch Button component is added to hide or show the
grouped columns. When the switch is toggled, the change event is triggered and the
groupSettings.showGroupedColumn property of the grid is updated accordingly.
APP.JSX
import { ChangeEventArgs, SwitchComponent } from '@syncfusion/ej2-react-
buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Group,
GroupSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const groupOptions = {
columns: ['CustomerID', 'ShipCity'],
showGroupedColumn: true
};
const onSwitchChange = (args) => {
if (args.checked) {
grid.groupSettings.showGroupedColumn = false;
}
else {
grid.groupSettings.showGroupedColumn = true;
}
}
return (
<div><label style={{ padding: "10px 10px" }}>Hide or show grouped
columns</label>
<SwitchComponent change={onSwitchChange}></SwitchComponent>
<GridComponent ref={g => grid = g} dataSource={data}
allowGrouping={true} groupSettings={groupOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name'
width='150' />
</ColumnsDirective>
<Inject services={[Group]} />
</GridComponent ></div>)
};
export default App;
APP.TSX
import { ChangeEventArgs, SwitchComponent } from '@syncfusion/ej2-react-
buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Group,
GroupSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
APP.TSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Grid, GridComponent, Group, GroupSettingsModel, Inject } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Group, Inject,
Sort } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const sortingOptions = {
columns: [{ field: 'CustomerID', direction: 'Descending' }]
};
const groupOptions = {
columns: ['CustomerID']
};
return <GridComponent dataSource={data} allowGrouping={true}
allowSorting={true} height={267} sortSettings={sortingOptions}
groupSettings={groupOptions}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right"/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150'/>
<ColumnDirective field='ShipCity' headerText='Ship City' width='150'/>
<ColumnDirective field='ShipName' headerText='Ship Name' width='150'/>
</ColumnsDirective>
<Inject services={[Group, Sort]}/>
</GridComponent >
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Group,
GroupSettingsModel, Inject } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const groupOptions: GroupSettingsModel = {
columns: ['OrderDate', 'Freight'],
showDropArea: false
};
return <GridComponent dataSource={data} allowGrouping={true}
groupSettings={groupOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='OrderDate' headerText='Order Date'
format='yMMM' enableGroupByFormat={true} width='150' />
<ColumnDirective field='Freight' headerText='Freight' format='C2'
enableGroupByFormat={true} width='150' />
</ColumnsDirective>
<Inject services={[Group]} />
</GridComponent >
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
Numeric columns can be grouped based on formats such as currency or percentage, while datetime
columns can be grouped based on specific date or time formats.
Show grouped rows based on page size
Showing grouped column rows based on the page size in Syncfusion React Grid is useful when you have
grouped data and want to control the number of grouped rows displayed per page.
The Grid component allows you to display the number of records based on the pageSize. However, by
default, the pageSize applies to individual grid rows, not to grouped rows. If you want to show grouped
column rows based on the pageSize, you can achieve it by using a custom implementation.
Customizing the generateQuery method of the Data prototype allows you to modify the query used
for data retrieval. By doing so, you can achieve the display of grouped rows based on the page size
according to your specific requirements. This can be achieved in the below example.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject } from
'@syncfusion/ej2-react-grids';
import { Data, Group, Page } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
const oldGenerateQuery = Data.prototype.generateQuery;
Data.prototype.generateQuery = function() {
const query = oldGenerateQuery.call(this, true);
// Check if 'pageQuery' is available in the prototype chain
if (Data.prototype.hasOwnProperty('pageQuery')) {
const pageQueryFn = Data.prototype['pageQuery'];
pageQueryFn.call(this, query);
}
return query;
};
function App() {
let grid;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject,
GroupSettingsModel, PageSettingsModel } from '@syncfusion/ej2-react-grids';
import { Data, Group, Page } from '@syncfusion/ej2-react-grids';
import { Query } from '@syncfusion/ej2-data';
import * as React from 'react';
import { data } from './datasource';
const oldGenerateQuery = Data.prototype.generateQuery;
Data.prototype.generateQuery = function() {
const query = oldGenerateQuery.call(this, true);
// Check if 'pageQuery' is available in the prototype chain
if (Data.prototype.hasOwnProperty('pageQuery')) {
const pageQueryFn = Data.prototype['pageQuery'] as (query: Query) =>
void;
pageQueryFn.call(this, query);
}
return query;
};
function App() {
let grid: GridComponent | null;
const groupOptions: GroupSettingsModel = { showGroupedColumn: false,
columns: ['ShipCountry'] };
const pageSettings: PageSettingsModel = { pageSize: 5 };
return <GridComponent ref={g => grid = g} allowGrouping={true}
groupSettings={groupOptions} allowPaging={true}
pageSettings={pageSettings}
dataSource={data}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject } from
'@syncfusion/ej2-react-grids';
import { Grid, Group, GroupSettingsModel } from '@syncfusion/ej2-react-
grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let initial = true;
const groupOptions: GroupSettingsModel = { columns: ['ShipCity'] };
let gridObj: Grid | null;
const dataBound = (): void => {
if (gridObj && initial === true) {
gridObj.groupModule.collapseAll();
initial = false;
}
}
return <GridComponent dataSource={data} ref={grid => gridObj = grid}
dataBound={dataBound}
allowGrouping={true} groupSettings={groupOptions} height={267}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name' width='150' />
</ColumnsDirective>
<Inject services={[Group]} />
</GridComponent >
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
You can also collapse all the grouped rows at the initial rendering using the groupCollapseAll method
inside the dataBound event. This is demonstrated in the below code snippet,
`typescript
const dataBound = () => {
if (initial === true) {
(grid as GridComponent).groupCollapseAll();
initial = false;
}
}
`
The collapse all approach is suggested for a limited number of records since collapsing every grouped
record takes some time. If you have a large dataset, it is recommended to use lazy-load grouping. This
approach is also applicable for the groupExpandAll method.
Group or ungroup column externally
By default, the Syncfusion Grid supports interaction-oriented column grouping, where users manually
group columns by dragging and dropping them into the grouping area of the grid. Grid provides an
ability to group and ungroup a column using groupColumn and ungroupColumn methods. These
methods provide a programmatic approach to perform column grouping and ungrouping.
The following example demonstrates how to group and upgroup the columns in a grid. It utilizes the
DropDownList component to select the column. When an external button is clicked, the groupColumn
and ungroupColumn methods are called to group or ungroup the selected column.
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Group,
GroupSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
let dropColumn;
const columns = [
{ text: 'CustomerID', value: 'CustomerID' },
{ text: 'OrderID', value: 'OrderID' },
{ text: 'Ship City', value: 'ShipCity' },
{ text: 'Ship Name', value: 'ShipName' },
];
const field = { text: 'text', value: 'value' };
const groupOptions = {
columns: ['CustomerID', 'ShipCity'],
showDropArea: false
};
const groupColumn = () => {
grid.groupColumn(dropColumn.value);
}
const unGroupColumn = () => {
grid.ungroupColumn(dropColumn.valu);
}
return (
<div>
<label style={{ padding: "30px 20px 0 0" }}> Column name :</label>
<DropDownListComponent ref={drop => dropColumn = drop} index={0}
width={120} dataSource={columns} fields={field}></DropDownListComponent><br
/>
<ButtonComponent style={{ marginTop: "10px" }} id="group" cssClass="e-
outline" onClick={groupColumn}>GroupColumn</ButtonComponent>
<ButtonComponent style={{ marginTop: "10px" }} id="ungroup"
cssClass="e-outline" onClick={unGroupColumn}>UnGroupColumn</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data}
allowGrouping={true} groupSettings={groupOptions} height={267}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name'
width='150' />
</ColumnsDirective>
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Group,
GroupSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
let dropColumn: DropDownListComponent | null;
const columns: { [key: string]: Object; }[] = [
{ text: 'CustomerID', value: 'CustomerID' },
{ text: 'OrderID', value: 'OrderID' },
{ text: 'Ship City', value: 'ShipCity' },
{ text: 'Ship Name', value: 'ShipName' },
];
const field: object = { text: 'text', value: 'value' };
const groupOptions: GroupSettingsModel = {
columns: ['CustomerID', 'ShipCity'],
showDropArea: false
};
const groupColumn = () => {
(grid as GridComponent).groupColumn(((dropColumn as
DropDownListComponent).value as string));
}
const unGroupColumn = () => {
(grid as GridComponent).ungroupColumn(((dropColumn as
DropDownListComponent).value as string));
}
return (
<div>
<label style={{ padding: "30px 20px 0 0" }}> Column name :</label>
<DropDownListComponent ref={drop => dropColumn = drop} index={0}
width={120} dataSource={columns} fields={field}></DropDownListComponent><br
/>
<ButtonComponent style={{ marginTop: "10px" }} id="group" cssClass="e-
outline" onClick={groupColumn}>GroupColumn</ButtonComponent>
<ButtonComponent style={{ marginTop: "10px" }} id="ungroup"
cssClass="e-outline" onClick={unGroupColumn}>UnGroupColumn</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data}
allowGrouping={true} groupSettings={groupOptions} height={267}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name'
width='150' />
</ColumnsDirective>
<Inject services={[Group]} />
</GridComponent ></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', EmployeeID: 8, OrderDate: new
Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
showDropArea: false
};
const onSwitchChange = (args) => {
if (args.checked) {
grid.groupCollapseAll();
}
else {
grid.groupExpandAll();
}
}
return (
<div><label style={{ padding: "10px 10px" }}>Expand or collapse
rows</label>
<SwitchComponent change={onSwitchChange}></SwitchComponent>
<GridComponent ref={g => grid = g} dataSource={data}
allowGrouping={true} groupSettings={groupOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name'
width='150' />
</ColumnsDirective>
<Inject services={[Group]} />
</GridComponent ></div>)
};
export default App;
APP.TSX
import { ChangeEventArgs, SwitchComponent } from '@syncfusion/ej2-react-
buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Group,
GroupSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const groupOptions: GroupSettingsModel = {
columns: ['CustomerID', 'ShipCity'],
showDropArea: false
};
const onSwitchChange = (args: ChangeEventArgs) => {
if (args.checked) {
(grid as GridComponent).groupCollapseAll();
}
else {
(grid as GridComponent).groupExpandAll();
}
}
return (
<div><label style={{ padding: "10px 10px" }}>Expand or collapse
rows</label>
<SwitchComponent change={onSwitchChange}></SwitchComponent>
<GridComponent ref={g => grid = g} dataSource={data}
allowGrouping={true} groupSettings={groupOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name'
width='150' />
</ColumnsDirective>
<Inject services={[Group]} />
</GridComponent ></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
2. Add a button element with a click event binding to trigger the onExpandCollapseButtonClick
method. This method retrieve the grouped rows from the grid's content table using the
querySelectorAll method.
3. Check if there are any grouped rows available.
4. If grouped rows exist, locate the group caption element based on the entered row index.
5. Call the expandCollapseRows method of the grid's group module, passing the group caption
element to toggle its expand/collapse state.
The following example demonstrates the function that collapses the selected row using an external
button click.
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Group }
from '@syncfusion/ej2-react-grids';
import { TextBoxComponent } from '@syncfusion/ej2-react-inputs';
import React, { useState } from 'react';
import { data } from './datasource';
function App() {
let grid;
let textbox;
const [message, setMessage] = useState('');
const groupOptions = {
columns: ['CustomerID'],
showDropArea: false
};
const onExpandCollapseButtonClick = () => {
const groupedRows =
Array.from(grid.getContentTable().querySelectorAll('.e-recordplusexpand, .e-
recordpluscollapse'));
const groupedRowIndex = parseInt(textbox.value);
if (groupedRows.length >= 0 && groupedRowIndex < groupedRows.length) {
setMessage('');
const groupCaptionElement = groupedRows[groupedRowIndex];
grid.groupModule.expandCollapseRows(groupCaptionElement);
} else {
setMessage('The entered index exceeds the total number of grouped rows.
Please enter a valid grouped index.');
}
}
return (
<div><TextBoxComponent ref={t => textbox = t} type='number'
placeholder="Enter Grouped Row Index" width={200} ></TextBoxComponent>
<ButtonComponent onClick={onExpandCollapseButtonClick}>Collapse or
Expand Row</ButtonComponent>
<p style={{ color: "red" }}>{message}</p>
<GridComponent ref={g => grid = g} dataSource={data}
allowGrouping={true} groupSettings={groupOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Group,
GroupSettingsModel } from '@syncfusion/ej2-react-grids';
import { TextBoxComponent } from '@syncfusion/ej2-react-inputs';
import * as React from 'react';
import { useState } from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
let textbox: TextBoxComponent | null;
const [message, setMessage] = useState('');
const groupOptions: GroupSettingsModel = {
columns: ['CustomerID'],
showDropArea: false
};
const onExpandCollapseButtonClick = () => {
const groupedRows = Array.from((grid as
GridComponent).getContentTable().querySelectorAll('.e-recordplusexpand, .e-
recordpluscollapse'));
const groupedRowIndex: number = parseInt((textbox as
TextBoxComponent).value);
if (groupedRows.length >= 0 && groupedRowIndex < groupedRows.length) {
setMessage('');
const groupCaptionElement = groupedRows[groupedRowIndex];
(grid as
GridComponent).groupModule.expandCollapseRows(groupCaptionElement);
} else {
setMessage('The entered index exceeds the total number of grouped rows.
Please enter a valid grouped index.');
}
}
return (<div>
<TextBoxComponent ref={t => textbox = t} type='number'
placeholder="Enter Grouped Row Index" width={200}></TextBoxComponent>
<ButtonComponent onClick={onExpandCollapseButtonClick}>Collapse or
Expand Row</ButtonComponent>
<p style={{ color: "red" }}>{message}</p>
<GridComponent ref={g => grid = g} dataSource={data}
allowGrouping={true} groupSettings={groupOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
Clear grouping
The clear grouping feature in the Syncfusion React Grid allows you to removing all the grouped columns
from the grid. This feature provides a convenient way to clear the grouping of columns in your
application.
To clear all the grouped columns in the Grid, you can utilize the clearGrouping method of the grid.
The following example demonstrates how to clear the grouping using clearGroup method in the
external button click.
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Group,
GroupSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const groupOptions = {
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Group,
GroupSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const groupOptions: GroupSettingsModel = {
columns: ['CustomerID', 'ShipCity'],
};
const clearGroup = () => {
(grid as GridComponent).clearGrouping();
}
return (
<div>
<ButtonComponent onClick={clearGroup}>Clear Grouping</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data}
allowGrouping={true} groupSettings={groupOptions} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name'
width='150' />
</ColumnsDirective>
<Inject services={[Group]} />
</GridComponent ></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
Grouping events
The Grid component provides two events that are triggered during the group action such as actionBegin
and actionComplete. The actionBegin event is triggered before the group action starts, and the
actionComplete event is triggered after the group action is completed. You can use these events to
perform any custom action based on the grouping.
1. actionBegin event: actionBegin event is triggered before the group action begins. It provides a
way to perform any necessary operations before the group action takes place. This event
provides a parameter that contains the current grid state, including the current group field
name, requestType information and etc.
2. actionComplete event: actionComplete event is triggered after the group action is completed.
It provides a way to perform any necessary operations after the group action has taken place.
This event provides a parameter that contains the current grid state, including the grouped data
and column information and etc.
The following example demonstrates how the actionBegin and actionComplete events work when
grouping is performed. The actionBegin event event is used to cancel the grouping of the OrderID
column. The actionComplete event is used to display a message.
APP.JSX
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, GroupEventArgs,
Inject, Group } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { useState } from 'react';
import { data } from './datasource';
function App() {
const [message, setMessage] = useState('');
const actionBegin = (args: GroupEventArgs) => {
if (args.requestType === 'grouping' && args.columnName === 'OrderID') {
args.cancel = true;
}
}
const actionComplete = (args: GroupEventArgs) => {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
DATASOURCE.TSX
export let employeeData: Object[] = [{
'EmployeeID': 1,
'LastName': 'Davolio',
'FirstName': 'Nancy',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-664743600000),
'HireDate': new Date(704692800000),
'Address': '507 - 20th Ave. E.\r\nApt. 2A',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98122',
'Country': 'USA',
'EmployeeID': 6,
'LastName': 'Suyama',
'FirstName': 'Michael',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-205185600000),
'HireDate': new Date(750830400000),
'Address': 'Coventry House\r\nMiner Rd.',
'City': 'London',
'Region': null,
'PostalCode': 'EC2 7JR',
'Country': 'UK',
'HomePhone': '(71) 555-7773',
'Extension': '428',
'Photo': { 'Length': 21626 },
'Notes': 'Michael is a graduate of Sussex University (MA, economics,
1983) and the University of California at Los Angeles \
(MBA, marketing, 1986). He has also taken the courses \'Multi-Cultural
Selling\' and \'Time Management for the Sales Professional.\' \
He is fluent in Japanese and can read and write French, Portuguese, and
Spanish.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 7,
'LastName': 'King',
'FirstName': 'Robert',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-302731200000),
'HireDate': new Date(757486800000),
'Address': 'Edgeham Hollow\r\nWinchester Way',
'City': 'London',
'Region': null,
'PostalCode': 'RG1 9SP',
'Country': 'UK',
'HomePhone': '(71) 555-5598',
'Extension': '465',
'Photo': { 'Length': 21626 },
'Notes': 'Robert King served in the Peace Corps and traveled extensively
before completing his degree in English at the \
University of Michigan in 1992, the year he joined the company. After
completing a course entitled \'Selling in Europe,\' \
he was transferred to the London office in March 1993.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 8,
'LastName': 'Callahan',
'FirstName': 'Laura',
'Title': 'Inside Sales Coordinator',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-377982000000),
'HireDate': new Date(762843600000),
'Address': '4726 - 11th Ave. N.E.',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98105',
'Country': 'USA',
'HomePhone': '(206) 555-1189',
'Extension': '2344',
'Photo': { 'Length': 21626 },
'Notes': 'Laura received a BA in psychology from the University of
Washington. She has also completed a course in business \
French. She reads and writes French.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 9,
'LastName': 'Dodsworth',
'FirstName': 'Anne',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-123966000000),
'HireDate': new Date(784875600000),
'Address': '7 Houndstooth Rd.',
'City': 'London',
'Region': null,
'PostalCode': 'WG2 7LT',
'Country': 'UK',
'HomePhone': '(71) 555-4444',
'Extension': '452',
'Photo': { 'Length': 21626 },
'Notes': 'Anne has a BA degree in English from St. Lawrence College. She
is fluent in French and German.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
}];
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
The args.requestType property represents the name of the current action being performed. For
instance, during grouping, the args.requestType value will be grouping.
Limitations
See also
APP.TSX
import { ColumnDirective, ColumnsDirective, PageSettingsModel } from
'@syncfusion/ej2-react-grids';
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
* You can apply and clear filtering, by using filterByColumn and clearFiltering methods.
* To disable Filtering for a particular column, by specifying allowFiltering to false.
Initial filter
To apply an initial filter, you need to specify the filter criteria using the predicate object in
filterSettings.columns. The predicate object represents the filtering condition and contains properties
such as field, operator, and value.
Here is an example of how to configure the initial filter using the predicate object:
APP.JSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, GridComponent, Inject } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const filterOptions = {
columns: [
{
field: 'ShipCity', matchCase: false,
operator: 'startswith', predicate: 'and', value: 'reims'
},
{
field: 'ShipName', matchCase: false, operator: 'startswith',
predicate: 'and', value: 'Vins et alcools Chevalier'
}
]
};
return <GridComponent dataSource={data} allowFiltering={true}
filterSettings={filterOptions} height={273}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='100' />
<ColumnDirective field='ShipName' headerText='Ship Name'
width='100' />
</ColumnsDirective>
<Inject services={[Filter]} />
</GridComponent>;
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, FilterSettingsModel, GridComponent, Inject } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
const filterOptions: FilterSettingsModel = {
columns: [
{
field: 'ShipCity', matchCase: false,
operator: 'startswith', predicate: 'and', value: 'reims'
},
{
field: 'ShipName', matchCase: false, operator: 'startswith',
predicate: 'and', value: 'Vins et alcools Chevalier'
}
]
};
return <GridComponent dataSource={data} allowFiltering={true}
filterSettings={filterOptions}
height={273}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100' />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Filter]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
APP.TSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
]
};
return <GridComponent dataSource={data} filterSettings={filterOptions}
allowFiltering={true} height={315} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100' />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Filter]} />
</GridComponent>
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, FilterSettingsModel, GridComponent, Inject } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
const filterOptions: FilterSettingsModel = {
type: 'Excel',
columns: [
{
field: 'CustomerID',
matchCase: false,
operator: 'startswith',
predicate: 'or',
value: 'VINET',
},
{
field: 'CustomerID',
matchCase: false,
operator: 'startswith',
predicate: 'or',
value: 'HANAR',
},
{
field: 'OrderID',
matchCase: false,
operator: 'lessThan',
predicate: 'or',
value: 10250,
},
{
field: 'OrderID',
matchCase: false,
operator: 'notEqual',
predicate: 'or',
value: 10262,
},
]
};
return <GridComponent dataSource={data} filterSettings={filterOptions}
allowFiltering={true} height={315} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100' />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100' />
</ColumnsDirective>
<Inject services={[Filter]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
Filter operators
The Syncfusion Grid component provides various filter operators that can be used to define filter
conditions for columns. The filter operator for a column can be defined using the operator property in
the filterSettings.columns object.
The available operators and its supported data types are,
Operator |Description |Supported Types
a*b |Everything that starts with "a" and ends with "b".
a* |Everything that starts with "a".
LIKE filtering
The LIKE filter can process single search patterns using the "%" symbol, retrieving values matching the
specified patterns. The following Grid features support LIKE filtering on string-type columns:
• Filter Menu
• Filter Bar with the filterSettings.showFilterBarOperator property enabled on the Grid
filterSettings.
• Custom Filter of Excel filter type.
For example:
Operator |Description
%ab% |Returns all the value that are contains "ab" character.
ab% |Returns all the value that are ends with "ab" character.
%ab |Returns all the value that are starts with "ab" character.
By default, the Syncfusion React Grid uses different filter operators for different column types. The
default filter operator for string type columns is startsWith, for numerical type columns is equal, and for
boolean type columns is also equal.
Diacritics filter
The diacritics filter feature in the Syncfusion React Grid is useful when working with text data that
includes accented characters (diacritic characters). By default, the grid ignores these characters during
filtering. However, if you need to consider diacritic characters in your filtering process, you can enable
this feature by setting the filterSettings.ignoreAccent property to true using the filterSettings.
Consider the following sample where the ignoreAccent property is set to true in order to include
diacritic characters in the filtering process:
APP.JSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, GridComponent, Inject } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const filterOptions = {
ignoreAccent: true
};
APP.TSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, FilterSettingsModel, GridComponent, Inject } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
const filterOptions: FilterSettingsModel = {
ignoreAccent: true
};
return <GridComponent dataSource={data} filterSettings={filterOptions}
allowFiltering={true}>
<ColumnsDirective>
<ColumnDirective field='EmployeeID' headerText='Employee ID'
width='140' textAlign="Right" />
<ColumnDirective field='Name' headerText='Name' width='140' />
<ColumnDirective field='ShipName' headerText='Ship Name' width='170'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='CustomerID' width='140'
textAlign="Right" />
</ColumnsDirective>
<Inject services={[Filter]} />
</GridComponent>
};
export default App;
DATASOURCE.JSX
export let data = [
{
'EmployeeID': 1,
'Name': 'Aeróbics',
'id': 'list-01',
'CustomerID': 'VINET',
'ShipName': 'Vins et alcools Chevalier',
},
{
'EmployeeID': 2,
'id': 'list-10',
'CustomerID': 'WELLI',
'ShipName': 'Victuailles'
}
];
DATASOURCE.TSX
export let data: { [key: string]: Object }[] = [
{
'EmployeeID': 1,
'Name': 'Aeróbics',
'id': 'list-01',
'CustomerID': 'VINET',
'ShipName': 'Vins et alcools Chevalier',
},
{
'EmployeeID': 2,
'Name': 'Aerógrafía en Agua',
'id': 'list-02',
'CustomerID': 'TOMSP',
'ShipName': 'Toms SpezialitAiten',
},
{
'EmployeeID': 3,
'Name': 'AerografÃa',
'id': 'list-03',
'CustomerID': 'TAMSP',
'ShipName': 'Suprames dalices',
},
{
'EmployeeID': 4,
'Name': 'Aeromodelaje',
'id': 'list-04',
'CustomerID': 'HANAA',
'ShipName': 'Ottilies Kaseladen'
},
{
'EmployeeID': 5,
'Name': 'Águilas',
'id': 'list-05',
'CustomerID': 'VICTE',
'ShipName': 'Centro comercial Moctezuma',
},
{
'EmployeeID': 6,
'Name': 'Álbumes de Delta',
'id': 'list-06',
'CustomerID': 'HANAR',
'ShipName': 'Que Delacia',
},
{
'EmployeeID': 7,
'Name': 'Õlbumes de Música',
'id': 'list-07',
'CustomerID': 'SUPRD',
APP.TSX
import { ChangeEventArgs, SwitchComponent } from '@syncfusion/ej2-react-
buttons';
import { ColumnDirective, ColumnsDirective, FilterSettingsModel } from
'@syncfusion/ej2-react-grids';
import { Filter, GridComponent, Inject } from '@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const filterSettings: FilterSettingsModel = { enableCaseSensitivity: false
};
const onToggleCaseSensitive = (args: ChangeEventArgs) => {
if (args.checked) {
(grid as GridComponent).filterSettings.enableCaseSensitivity = true;
}
else {
(grid as GridComponent).filterSettings.enableCaseSensitivity = false;
}
}
return (<div>
<label style={{marginTop:'20px'}}> Enable Case Sensitivity </label>
<SwitchComponent change={onToggleCaseSensitive}></SwitchComponent>
<GridComponent ref={g => grid = g} dataSource={data}
allowFiltering={true} filterSettings={filterSettings} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipRegion' headerText='Ship Region'
width='100' textAlign="Right" />
</ColumnsDirective>
<Inject services={[Filter]} />
</GridComponent></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', EmployeeID: 8, OrderDate: new
Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
let columnFilterSettings;
let fieldData = [];
let column;
const dataBound = () => {
fieldData = grid.getColumnFieldNames();
fieldDrop.dataSource = fieldData
}
const onFieldChange = (args) => {
typeDrop.enabled = true;
typeDrop.dataSource = ['Menu', 'CheckBox', 'Excel'];
column = grid.getColumnByField(args.value);
}
const onTypeChange = (args) => {
columnFilterSettings = { type: args.value };
column.filter = columnFilterSettings;
grid.refreshColumns();
}
return (<div><div className="input-container">
<label><b>Select Column</b> </label>
<DropDownListComponent ref={field => fieldDrop = field} width={120}
onChange={onFieldChange} placeholder="Eg: OrderID"></DropDownListComponent>
<label><b>Select Filter Type</b> </label>
<DropDownListComponent ref={type => typeDrop = type} width={120}
onChange={onTypeChange} placeholder="Eg: Excel"
enabled={false}></DropDownListComponent></div>
<GridComponent ref={g => grid = g} dataSource={data}
allowFiltering={true} filterSettings={filterSettings} dataBound={dataBound} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipRegion' headerText='Ship Region'
width='100' textAlign="Right" />
</ColumnsDirective>
<Inject services={[Filter]} />
</GridComponent></div>)
}
export default App;
APP.TSX
import { DropDownListComponent, ChangeEventArgs } from '@syncfusion/ej2-
react-dropdowns';
import { Column, ColumnDirective, ColumnsDirective, FilterSettingsModel }
from '@syncfusion/ej2-react-grids';
import { Filter, GridComponent, Inject } from '@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
let typeDrop: DropDownListComponent | null;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
APP.TSX
import { DropDownListComponent, ChangeEventArgs } from '@syncfusion/ej2-
react-dropdowns';
import { Column, ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-
react-grids';
import { Filter, GridComponent, Inject, Page } from '@syncfusion/ej2-react-
grids'
import * as React from 'react';
import { data, stringOperatorsData, numericOperatorsData } from
'./datasource';
function App() {
let grid: GridComponent | null;
let operatorDrop: DropDownListComponent | null;
let fieldDrop: DropDownListComponent | null;
let availableOperator:Object;
let fieldData: string[] = [];
let column: Column;
const dataBound = () => {
fieldData = (grid as GridComponent).getColumnFieldNames();
(fieldDrop as DropDownListComponent).dataSource = fieldData
}
const onFieldChange = (args: ChangeEventArgs) => {
(operatorDrop as DropDownListComponent).enabled = true;
column = (grid as GridComponent).getColumnByField(args.value);
console.log(args.value);
console.log(column);
if(column) {
availableOperator = column.type === 'string' ? stringOperatorsData :
numericOperatorsData;
(operatorDrop as DropDownListComponent).dataSource = availableOperator;
}
}
const onOperatorChange = (args: ChangeEventArgs) => {
let filterOptions = { operator: args.value, showFilterBarStatus: true };
column.filter = filterOptions;
}
return (<div><div className="input-container">
<label><b>Select Column</b> </label>
<DropDownListComponent ref={field => fieldDrop = field} width={120}
onChange={onFieldChange} placeholder="Eg: OrderID"></DropDownListComponent>
<label><b>Select Operator</b> </label>
<DropDownListComponent ref={operator => operatorDrop = operator}
width={120} onChange={onOperatorChange} placeholder="Eg: Excel"
enabled={false}></DropDownListComponent></div>
<GridComponent ref={g => grid = g} dataSource={data}
allowFiltering={true} allowPaging={true} dataBound={dataBound} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' format ='C'
width='100' textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
</ColumnsDirective>
<Inject services={[Filter, Page]} />
</GridComponent></div>)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
'isempty',
'isnotnull',
'isnull',
'notEqual',
'equal',
'doesnotcontain',
'doesnotendwith',
'doesnotstartwith',
];
export let numericOperatorsData = [
'equal',
'notEqual',
'greaterThan',
'greaterThanOrEqual',
'lessThan',
'lessThanOrEqual',
'isnull',
'isnotnull',
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
Filter grid programmatically with single and multiple values using method
Programmatic filtering in the Syncfusion React Grid with single and multiple values allows you to apply
filters to specific columns in the grid without relying on interactions through the interface.
This can be achieved by utilizing the filterByColumn method of the Grid.
The following example demostrates, how to programmatically filter the Grid using single and multiple
values for the OrderID and CustomerID columns. This is accomplished by calling the filterByColumn
method within an external button click function.
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, GridComponent, Inject } from '@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const filterOptions = {
type: 'Excel',
};
const onSingleValueFilter = () => {
grid.clearFiltering();
// filter OrderID column with single value
grid.filterByColumn('OrderID', 'equal', 10248);
}
const onMultipleValueFilter = () => {
grid.clearFiltering();
// filter CustomerID column with multiple values
grid.filterByColumn('CustomerID', 'equal', [
'VINET',
'TOMSP',
'ERNSH',
]);
}
return (<div>
<ButtonComponent cssClass="e-outline"
onClick={onSingleValueFilter}>Filter with single value</ButtonComponent>
<ButtonComponent cssClass="e-outline"
onClick={onMultipleValueFilter}>Filter with multiple values</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data}
filterSettings={filterOptions} allowFiltering={true} height={315} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
/>
<ColumnDirective field='ShipName' headerText='Ship Name' width='100'
/>
</ColumnsDirective>
<Inject services={[Filter]} />
</GridComponent></div>)
};
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, FilterSettingsModel, GridComponent, Inject } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const filterOptions: FilterSettingsModel = {
type: 'Excel',
};
const onSingleValueFilter = () => {
(grid as GridComponent).clearFiltering();
// filter OrderID column with single value
(grid as GridComponent).filterByColumn('OrderID', 'equal', 10248);
}
const onMultipleValueFilter = () => {
(grid as GridComponent).clearFiltering();
// filter CustomerID column with multiple values
(grid as GridComponent).filterByColumn('CustomerID', 'equal', [
'VINET',
'TOMSP',
'ERNSH',
]);
}
return (<div>
<ButtonComponent cssClass="e-outline"
onClick={onSingleValueFilter}>Filter with single value</ButtonComponent>
<ButtonComponent cssClass="e-outline"
onClick={onMultipleValueFilter}>Filter with multiple values</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data}
filterSettings={filterOptions} allowFiltering={true} height={315} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
/>
<ColumnDirective field='ShipName' headerText='Ship Name' width='100'
/>
</ColumnsDirective>
<Inject services={[Filter]} />
</GridComponent></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, GridComponent, Inject, Page, PageSettingsModel } from
'@syncfusion/ej2-react-grids'
import { MessageComponent } from '@syncfusion/ej2-react-notifications';
import React, { useState } from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
let filteredGrid: GridComponent | null;
const pageSettings: PageSettingsModel = { pageSize: 10, pageCount: 5 };
let filteredData;
let showRecords;
let showWarning;
const [isFilteredGridVisible, setIsFilteredGridVisible] = useState(false);
const [isMsgWarningVisible, setIsMsgWarningVisible] = useState(false);
const getFilter = () => {
filteredData = (grid as GridComponent).getFilteredRecords();
showRecords = filteredData.length > 0 ? true : false;
showWarning = !showRecords;
if (showRecords) {
(filteredGrid as GridComponent).dataSource = filteredData;
}
setIsMsgWarningVisible(showWarning);
setIsFilteredGridVisible(showRecords);
}
const clear = () => {
(grid as GridComponent).clearFiltering();
showRecords = false;
showWarning = false;
setIsMsgWarningVisible(false);
setIsFilteredGridVisible(false);
}
return (<div><div id='msgWarning' style={{ display: isMsgWarningVisible ?
'block' : 'none' }}>
<MessageComponent content="No Records" cssClass="e-content-center"
severity="Warning"></MessageComponent></div>
<ButtonComponent cssClass="e-success" onClick={getFilter}>Get Filtered
Data</ButtonComponent>
<ButtonComponent cssClass='e-danger'
onClick={clear}>Clear</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data}
allowFiltering={true} pageSettings={pageSettings} allowPaging={true}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
To access these properties, you can use the actionComplete event handler as shown below:
`typescript
actionComplete(args: FilterEventArgs) {
let column = args.columns;
let object = args.currentFilterObject;
let name = args.currentFilteringColumn;
}
`
Clear filtering using methods
The Syncfusion Grid provides a method called clearFiltering to clear the filtering applied to the grid. This
method is used to remove the filter conditions and reset the grid to its original state.
Here's an example of how to clear the filtering in a Syncfusion grid using the clearFiltering method:
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, GridComponent, Inject, Page, Sort, PageSettingsModel } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const pageSettings = { pageSize: 6 };
const clearFilter = () => {
grid.clearFiltering();
}
return (<div>
<ButtonComponent cssClass='e-primary' onClick={clearFilter}>Clear
Filter</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data}
allowFiltering={true} pageSettings={pageSettings} allowSorting={true}
allowPaging={true}>
<ColumnsDirective>
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, GridComponent, Inject, Page, Sort, PageSettingsModel } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const pageSettings: PageSettingsModel = { pageSize: 6 };
const clearFilter = () => {
(grid as GridComponent).clearFiltering();
}
return (<div>
<ButtonComponent cssClass='e-primary' onClick={clearFilter}>Clear
Filter</ButtonComponent>
<GridComponent ref={g => grid = g} dataSource={data}
allowFiltering={true} pageSettings={pageSettings} allowSorting={true}
allowPaging={true}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' format='C'
width='100' textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
</ColumnsDirective>
<Inject services={[Filter, Page, Sort]} />
</GridComponent>
</div>)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
Filtering events
Filtering events allow you to customize the behavior of the grid when filtering is applied. You can
prevent filtering for specific columns, show messages to users, or perform other actions to suit your
application's needs.
To implement filtering events in the Syncfusion React Grid, you can utilize the available events such as
actionBegin and actionComplete. These events allow you to intervene in the filtering process and
customize it as needed.
In the given example, the filtering is prevented for ShipCity column during actionBegin event.
APP.JSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Filter, GridComponent, Inject, Page, Sort } from '@syncfusion/ej2-
react-grids'
import React, { useState } from 'react';
import { data } from './datasource';
function App() {
const [message, setMessage] = useState('');
const actionBegin = (args) => {
if (args.requestType === 'filtering' && args.currentFilteringColumn ===
'ShipCity') {
args.cancel = true;
setMessage('The ' + args.type + ' event has been triggered and the ' +
args.requestType + ' action is cancelled for ' +
args.currentFilteringColumn);
}
}
const actionComplete = (args) => {
if (args.requestType === 'filtering' && args.currentFilteringColumn) {
setMessage('The ' + args.type + ' event has been triggered and the ' +
args.requestType + ' action for the ' + args.currentFilteringColumn + '
column has been successfully executed');
} else {
setMessage('');
}
}
return (<div>
<div id='message'>{message}</div>
<GridComponent dataSource={data} allowFiltering={true}
actionBegin={actionBegin} actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100'
/>
</ColumnsDirective>
<Inject services={[Filter, Page, Sort]} />
</GridComponent>
</div>)
}
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, FilterEventArgs } from
'@syncfusion/ej2-react-grids';
import { Filter, GridComponent, Inject, Page, Sort } from '@syncfusion/ej2-
react-grids'
import React, { useState } from 'react';
import { data } from './datasource';
function App() {
const [message, setMessage] = useState('');
const actionBegin = (args: FilterEventArgs) => {
if (args.requestType === 'filtering' && args.currentFilteringColumn ===
'ShipCity') {
args.cancel = true;
setMessage('The ' + args.type + ' event has been triggered and the ' +
args.requestType + ' action is cancelled for ' +
args.currentFilteringColumn);
}
}
const actionComplete = (args: FilterEventArgs) => {
if (args.requestType === 'filtering' && args.currentFilteringColumn) {
setMessage('The ' + args.type + ' event has been triggered and the ' +
args.requestType + ' action for the ' + args.currentFilteringColumn + '
column has been successfully executed');
} else {
setMessage('');
}
}
return (<div>
<div id='message'>{message}</div>
<GridComponent dataSource={data} allowFiltering={true}
actionBegin={actionBegin} actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
textAlign="Right" />
<ColumnDirective field='ShipName' headerText='Ship Name' width='100'
/>
</ColumnsDirective>
<Inject services={[Filter, Page, Sort]} />
</GridComponent>
</div>)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
See also
• The vertical scrollbar appears when the total height of rows present in the grid exceeds its
element height.
• The horizontal scrollbar appears when the sum of columns width exceeds the grid element
width.
• The height and width are used to set the grid height and width, respectively.
APP.TSX
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
To achieve this, you need to specify the width and height properties of the Grid as 100%. However, keep
in mind that setting the height property to 100% requires the Grid's parent element to have an explicit
height defined.
In the following example, the parent container has explicit height and width set, and the Grid container's
height and width are both set to 100%. This ensures that the Grid adjusts its size responsively based on
the dimensions of the parent container:
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return (<div style={{ height: '500px', width: '600px' }}>
<GridComponent dataSource={data} height='100%' width='100%'>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='OrderID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='CustomerID'
width='150' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format='C2' />
<ColumnDirective field='ShipAddress' headerText='ShipAddress'
width='150' />
</ColumnsDirective>
</GridComponent>
</div>)
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return (<div style={{ height: '500px', width: '600px' }}>
<GridComponent dataSource={data} height='100%' width='100%'>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='OrderID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='CustomerID'
width='150' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format='C2' />
<ColumnDirective field='ShipAddress' headerText='ShipAddress'
width='150' />
</ColumnsDirective>
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = createLazyLoadData();
function createLazyLoadData() {
let lazyLoadData = [];
let customerid = ['VINET', 'TOMSP', 'HANAR', 'VICTE', 'SUPRD', 'HANAR',
'CHOPS', 'RICSU', 'WELLI', 'HILAA', 'ERNSH', 'CENTC',
'OTTIK', 'QUEDE', 'RATTC', 'ERNSH', 'FOLKO', 'BLONP', 'WARTH', 'FRANK',
'GROSR', 'WHITC', 'WARTH', 'SPLIR', 'RATTC', 'QUICK', 'VINET',
'MAGAA', 'TORTU', 'MORGK', 'BERGS', 'LEHMS', 'BERGS', 'ROMEY', 'ROMEY',
'LILAS', 'LEHMS', 'QUICK', 'QUICK', 'RICAR', 'REGGC', 'BSBEV',
'COMMI', 'QUEDE', 'TRADH', 'TORTU', 'RATTC', 'VINET', 'LILAS', 'BLONP',
'HUNGO', 'RICAR', 'MAGAA', 'WANDK', 'SUPRD', 'GODOS', 'TORTU',
'OLDWO', 'ROMEY', 'LONEP', 'ANATR', 'HUNGO', 'THEBI', 'DUMON', 'WANDK',
'QUICK', 'RATTC', 'ISLAT', 'RATTC', 'LONEP', 'ISLAT', 'TORTU',
'WARTH', 'ISLAT', 'PERIC', 'KOENE', 'SAVEA', 'KOENE', 'BOLID', 'FOLKO',
'FURIB', 'SPLIR', 'LILAS', 'BONAP', 'MEREP', 'WARTH', 'VICTE',
'HUNGO', 'PRINI', 'FRANK', 'OLDWO', 'MEREP', 'BONAP', 'SIMOB', 'FRANK',
'LEHMS', 'WHITC', 'QUICK', 'RATTC', 'FAMIA'];
let product = ['Chai', 'Chang', 'Aniseed Syrup', 'Chef Anton\'s Cajun
Seasoning', 'Chef Anton\'s Gumbo Mix', 'Grandma\'s Boysenberry Spread',
'Uncle Bob\'s Organic Dried Pears', 'Northwoods Cranberry Sauce', 'Mishi
Kobe Niku', 'Ikura', 'Queso Cabrales', 'Queso Manchego La Pastora', 'Konbu',
'Tofu', 'Genen Shouyu', 'Pavlova', 'Alice Mutton', 'Carnarvon Tigers',
'Teatime Chocolate Biscuits', 'Sir Rodney\'s Marmalade', 'Sir Rodney\'s
Scones',
'Gustaf\'s Knäckebröd', 'Tunnbröd', 'Guaraná Fantástica', 'NuNuCa Nuß-
Nougat-Creme', 'Gumbär Gummibärchen', 'Schoggi Schokolade', 'Rössle
Sauerkraut',
'Thüringer Rostbratwurst', 'Nord-Ost Matjeshering', 'Gorgonzola Telino',
'Mascarpone Fabioli', 'Geitost', 'Sasquatch Ale', 'Steeleye Stout', 'Inlagd
Sill',
'Gravad lax', 'Côte de Blaye', 'Chartreuse verte', 'Boston Crab Meat',
'Jack\'s New England Clam Chowder', 'Singaporean Hokkien Fried Mee', 'Ipoh
Coffee',
'Gula Malacca', 'Rogede sild', 'Spegesild', 'Zaanse koeken', 'Chocolade',
'Maxilaku', 'Valkoinen suklaa', 'Manjimup Dried Apples', 'Filo Mix', 'Perth
Pasties',
'Tourtière', 'Pâté chinois', 'Gnocchi di nonna Alice', 'Ravioli Angelo',
'Escargots de Bourgogne', 'Raclette Courdavault', 'Camembert Pierrot', 'Sirop
d\'érable',
'Tarte au sucre', 'Vegie-spread', 'Wimmers gute Semmelknödel', 'Louisiana
Fiery Hot Pepper Sauce', 'Louisiana Hot Spiced Okra', 'Laughing Lumberjack
Lager', 'Scottish Longbreads',
'Gudbrandsdalsost', 'Outback Lager', 'Flotemysost', 'Mozzarella di
Giovanni', 'Röd Kaviar', 'Longlife Tofu', 'Rhönbräu Klosterbier',
'Lakkalikööri', 'Original Frankfurter grüne Soße'];
let customername = ['Maria', 'Ana Trujillo', 'Antonio Moreno', 'Thomas
Hardy', 'Christina Berglund', 'Hanna Moos', 'Frédérique Citeaux', 'Martín
Sommer', 'Laurence Lebihan', 'Elizabeth Lincoln',
'Victoria Ashworth', 'Patricio Simpson', 'Francisco Chang', 'Yang Wang',
'Pedro Afonso', 'Elizabeth Brown', 'Sven Ottlieb', 'Janine Labrune', 'Ann
Devon', 'Roland Mendel', 'Aria Cruz', 'Diego Roel',
'Martine Rancé', 'Maria Larsson', 'Peter Franken', 'Carine Schmitt',
'Paolo Accorti', 'Lino Rodriguez', 'Eduardo Saavedra', 'José Pedro Freyre',
'André Fonseca', 'Howard Snyder', 'Manuel Pereira',
DATASOURCE.TSX
export let data: Object[] = createLazyLoadData();
function createLazyLoadData(): Object[] {
let lazyLoadData: Object[] = [];
let customerid: string[] = ['VINET', 'TOMSP', 'HANAR', 'VICTE', 'SUPRD',
'HANAR', 'CHOPS', 'RICSU', 'WELLI', 'HILAA', 'ERNSH', 'CENTC',
Sticky header
The React Grid component provides a feature that allows you to make column headers remain fixed
while scrolling, ensuring they stay visible at all times. To achieve this, you can utilize the
enableStickyHeader property by setting it to true.
In the below demo, the Grid headers will be sticky while scrolling the Grid's parent div element.
APP.JSX
import { SwitchComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
APP.TSX
import { ChangeEventArgs, SwitchComponent } from '@syncfusion/ej2-react-
buttons';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const onChange = (args: ChangeEventArgs) => {
(grid as GridComponent).enableStickyHeader = args.checked;
}
return (<div>
<label style={{ padding: "30px 20px 0 0" }}>Enable/Disable Sticky Header
</label>
<SwitchComponent change={onChange}></SwitchComponent>
<GridComponent ref={g => grid = g} dataSource={data} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='OrderID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='CustomerID'
width='150' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format='C2' />
<ColumnDirective field='ShipAddress' headerText='ShipAddress'
width='150' />
</ColumnsDirective>
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = createLazyLoadData();
function createLazyLoadData() {
let lazyLoadData = [];
let customerid = ['VINET', 'TOMSP', 'HANAR', 'VICTE', 'SUPRD', 'HANAR',
'CHOPS', 'RICSU', 'WELLI', 'HILAA', 'ERNSH', 'CENTC',
'OTTIK', 'QUEDE', 'RATTC', 'ERNSH', 'FOLKO', 'BLONP', 'WARTH', 'FRANK',
'GROSR', 'WHITC', 'WARTH', 'SPLIR', 'RATTC', 'QUICK', 'VINET',
'MAGAA', 'TORTU', 'MORGK', 'BERGS', 'LEHMS', 'BERGS', 'ROMEY', 'ROMEY',
'LILAS', 'LEHMS', 'QUICK', 'QUICK', 'RICAR', 'REGGC', 'BSBEV',
'COMMI', 'QUEDE', 'TRADH', 'TORTU', 'RATTC', 'VINET', 'LILAS', 'BLONP',
'HUNGO', 'RICAR', 'MAGAA', 'WANDK', 'SUPRD', 'GODOS', 'TORTU',
'OLDWO', 'ROMEY', 'LONEP', 'ANATR', 'HUNGO', 'THEBI', 'DUMON', 'WANDK',
'QUICK', 'RATTC', 'ISLAT', 'RATTC', 'LONEP', 'ISLAT', 'TORTU',
'WARTH', 'ISLAT', 'PERIC', 'KOENE', 'SAVEA', 'KOENE', 'BOLID', 'FOLKO',
'FURIB', 'SPLIR', 'LILAS', 'BONAP', 'MEREP', 'WARTH', 'VICTE',
'HUNGO', 'PRINI', 'FRANK', 'OLDWO', 'MEREP', 'BONAP', 'SIMOB', 'FRANK',
'LEHMS', 'WHITC', 'QUICK', 'RATTC', 'FAMIA'];
let product = ['Chai', 'Chang', 'Aniseed Syrup', 'Chef Anton\'s Cajun
Seasoning', 'Chef Anton\'s Gumbo Mix', 'Grandma\'s Boysenberry Spread',
'Uncle Bob\'s Organic Dried Pears', 'Northwoods Cranberry Sauce', 'Mishi
Kobe Niku', 'Ikura', 'Queso Cabrales', 'Queso Manchego La Pastora', 'Konbu',
'Tofu', 'Genen Shouyu', 'Pavlova', 'Alice Mutton', 'Carnarvon Tigers',
'Teatime Chocolate Biscuits', 'Sir Rodney\'s Marmalade', 'Sir Rodney\'s
Scones',
'Gustaf\'s Knäckebröd', 'Tunnbröd', 'Guaraná Fantástica', 'NuNuCa Nuß-
Nougat-Creme', 'Gumbär Gummibärchen', 'Schoggi Schokolade', 'Rössle
Sauerkraut',
'Thüringer Rostbratwurst', 'Nord-Ost Matjeshering', 'Gorgonzola Telino',
'Mascarpone Fabioli', 'Geitost', 'Sasquatch Ale', 'Steeleye Stout', 'Inlagd
Sill',
'Gravad lax', 'Côte de Blaye', 'Chartreuse verte', 'Boston Crab Meat',
'Jack\'s New England Clam Chowder', 'Singaporean Hokkien Fried Mee', 'Ipoh
Coffee',
'Gula Malacca', 'Rogede sild', 'Spegesild', 'Zaanse koeken', 'Chocolade',
'Maxilaku', 'Valkoinen suklaa', 'Manjimup Dried Apples', 'Filo Mix', 'Perth
Pasties',
'Tourtière', 'Pâté chinois', 'Gnocchi di nonna Alice', 'Ravioli Angelo',
'Escargots de Bourgogne', 'Raclette Courdavault', 'Camembert Pierrot', 'Sirop
d\'érable',
'Tarte au sucre', 'Vegie-spread', 'Wimmers gute Semmelknödel', 'Louisiana
Fiery Hot Pepper Sauce', 'Louisiana Hot Spiced Okra', 'Laughing Lumberjack
Lager', 'Scottish Longbreads',
'Gudbrandsdalsost', 'Outback Lager', 'Flotemysost', 'Mozzarella di
Giovanni', 'Röd Kaviar', 'Longlife Tofu', 'Rhönbräu Klosterbier',
'Lakkalikööri', 'Original Frankfurter grüne Soße'];
let customername = ['Maria', 'Ana Trujillo', 'Antonio Moreno', 'Thomas
Hardy', 'Christina Berglund', 'Hanna Moos', 'Frédérique Citeaux', 'Martín
Sommer', 'Laurence Lebihan', 'Elizabeth Lincoln',
'Victoria Ashworth', 'Patricio Simpson', 'Francisco Chang', 'Yang Wang',
'Pedro Afonso', 'Elizabeth Brown', 'Sven Ottlieb', 'Janine Labrune', 'Ann
Devon', 'Roland Mendel', 'Aria Cruz', 'Diego Roel',
'Martine Rancé', 'Maria Larsson', 'Peter Franken', 'Carine Schmitt',
'Paolo Accorti', 'Lino Rodriguez', 'Eduardo Saavedra', 'José Pedro Freyre',
'André Fonseca', 'Howard Snyder', 'Manuel Pereira',
DATASOURCE.TSX
export let data: Object[] = createLazyLoadData();
function createLazyLoadData(): Object[] {
let lazyLoadData: Object[] = [];
let customerid: string[] = ['VINET', 'TOMSP', 'HANAR', 'VICTE', 'SUPRD',
'HANAR', 'CHOPS', 'RICSU', 'WELLI', 'HILAA', 'ERNSH', 'CENTC',
function App() {
let grid;
const dropDownData = [
{ text: 'Select count' },
{ text: '10', value: '10' },
{ text: '20', value: '20' },
{ text: '30', value: '30' },
{ text: '80', value: '80' },
{ text: '100', value: '100' },
{ text: '200', value: '200' },
{ text: '232', value: '232' },
{ text: '300', value: '300' },
{ text: '500', value: '500' },
{ text: '800', value: '800' },
{ text: '820', value: '850' },
{ text: '920', value: '920' },
{ text: '2020', value: '2020' },
{ text: '3000', value: '3000' },
{ text: '4000', value: '4000' },
{ text: '4999', value: '4999' }
];
const onChange = (args) => {
grid.selectionModule.selectRow(parseInt((args.value), 10));
}
const rowSelected = () => {
const rowHeight =
grid.getRows()[grid.getSelectedRowIndexes()[0]].scrollHeight;
grid.getContent().children[0].scrollTop = rowHeight *
grid.getSelectedRowIndexes()[0];
}
return (<div>
<label style={{ padding: "30px 20px 0 0" }} > Select row index :</label>
<DropDownListComponent index={0} width={200} dataSource={dropDownData}
change={onChange}></DropDownListComponent>
<GridComponent dataSource={data} height="315" width="100%"
rowSelected={rowSelected} ref={g => grid = g}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='OrderID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='CustomerID'
width='150' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format='C2' />
<ColumnDirective field='ShipAddress' headerText='ShipAddress'
width='150' />
</ColumnsDirective>
</GridComponent></div>)
};
export default App;
APP.TSX
import { ChangeEventArgs, DropDownListComponent } from '@syncfusion/ej2-
react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
DATASOURCE.JSX
export let data = createLazyLoadData();
function createLazyLoadData() {
let lazyLoadData = [];
let customerid = ['VINET', 'TOMSP', 'HANAR', 'VICTE', 'SUPRD', 'HANAR',
'CHOPS', 'RICSU', 'WELLI', 'HILAA', 'ERNSH', 'CENTC',
'OTTIK', 'QUEDE', 'RATTC', 'ERNSH', 'FOLKO', 'BLONP', 'WARTH', 'FRANK',
'GROSR', 'WHITC', 'WARTH', 'SPLIR', 'RATTC', 'QUICK', 'VINET',
'MAGAA', 'TORTU', 'MORGK', 'BERGS', 'LEHMS', 'BERGS', 'ROMEY', 'ROMEY',
'LILAS', 'LEHMS', 'QUICK', 'QUICK', 'RICAR', 'REGGC', 'BSBEV',
'COMMI', 'QUEDE', 'TRADH', 'TORTU', 'RATTC', 'VINET', 'LILAS', 'BLONP',
'HUNGO', 'RICAR', 'MAGAA', 'WANDK', 'SUPRD', 'GODOS', 'TORTU',
'OLDWO', 'ROMEY', 'LONEP', 'ANATR', 'HUNGO', 'THEBI', 'DUMON', 'WANDK',
'QUICK', 'RATTC', 'ISLAT', 'RATTC', 'LONEP', 'ISLAT', 'TORTU',
'WARTH', 'ISLAT', 'PERIC', 'KOENE', 'SAVEA', 'KOENE', 'BOLID', 'FOLKO',
'FURIB', 'SPLIR', 'LILAS', 'BONAP', 'MEREP', 'WARTH', 'VICTE',
'HUNGO', 'PRINI', 'FRANK', 'OLDWO', 'MEREP', 'BONAP', 'SIMOB', 'FRANK',
'LEHMS', 'WHITC', 'QUICK', 'RATTC', 'FAMIA'];
let product = ['Chai', 'Chang', 'Aniseed Syrup', 'Chef Anton\'s Cajun
Seasoning', 'Chef Anton\'s Gumbo Mix', 'Grandma\'s Boysenberry Spread',
'Uncle Bob\'s Organic Dried Pears', 'Northwoods Cranberry Sauce', 'Mishi
Kobe Niku', 'Ikura', 'Queso Cabrales', 'Queso Manchego La Pastora', 'Konbu',
'Tofu', 'Genen Shouyu', 'Pavlova', 'Alice Mutton', 'Carnarvon Tigers',
'Teatime Chocolate Biscuits', 'Sir Rodney\'s Marmalade', 'Sir Rodney\'s
Scones',
'Gustaf\'s Knäckebröd', 'Tunnbröd', 'Guaraná Fantástica', 'NuNuCa Nuß-
Nougat-Creme', 'Gumbär Gummibärchen', 'Schoggi Schokolade', 'Rössle
Sauerkraut',
'Thüringer Rostbratwurst', 'Nord-Ost Matjeshering', 'Gorgonzola Telino',
'Mascarpone Fabioli', 'Geitost', 'Sasquatch Ale', 'Steeleye Stout', 'Inlagd
Sill',
'Gravad lax', 'Côte de Blaye', 'Chartreuse verte', 'Boston Crab Meat',
'Jack\'s New England Clam Chowder', 'Singaporean Hokkien Fried Mee', 'Ipoh
Coffee',
'Gula Malacca', 'Rogede sild', 'Spegesild', 'Zaanse koeken', 'Chocolade',
'Maxilaku', 'Valkoinen suklaa', 'Manjimup Dried Apples', 'Filo Mix', 'Perth
Pasties',
'Tourtière', 'Pâté chinois', 'Gnocchi di nonna Alice', 'Ravioli Angelo',
'Escargots de Bourgogne', 'Raclette Courdavault', 'Camembert Pierrot', 'Sirop
d\'érable',
'Tarte au sucre', 'Vegie-spread', 'Wimmers gute Semmelknödel', 'Louisiana
Fiery Hot Pepper Sauce', 'Louisiana Hot Spiced Okra', 'Laughing Lumberjack
Lager', 'Scottish Longbreads',
'Gudbrandsdalsost', 'Outback Lager', 'Flotemysost', 'Mozzarella di
Giovanni', 'Röd Kaviar', 'Longlife Tofu', 'Rhönbräu Klosterbier',
'Lakkalikööri', 'Original Frankfurter grüne Soße'];
let customername = ['Maria', 'Ana Trujillo', 'Antonio Moreno', 'Thomas
Hardy', 'Christina Berglund', 'Hanna Moos', 'Frédérique Citeaux', 'Martín
Sommer', 'Laurence Lebihan', 'Elizabeth Lincoln',
'Victoria Ashworth', 'Patricio Simpson', 'Francisco Chang', 'Yang Wang',
'Pedro Afonso', 'Elizabeth Brown', 'Sven Ottlieb', 'Janine Labrune', 'Ann
Devon', 'Roland Mendel', 'Aria Cruz', 'Diego Roel',
'Martine Rancé', 'Maria Larsson', 'Peter Franken', 'Carine Schmitt',
'Paolo Accorti', 'Lino Rodriguez', 'Eduardo Saavedra', 'José Pedro Freyre',
'André Fonseca', 'Howard Snyder', 'Manuel Pereira',
'Mario Pontes', 'Carlos Hernández', 'Yoshi Latimer', 'Patricia McKenna',
'Helen Bennett', 'Philip Cramer', 'Daniel Tonini', 'Annette Roulet', 'Yoshi
Tannamuri', 'John Steel', 'Renate Messner', 'Jaime Yorres',
DATASOURCE.TSX
export let data: Object[] = createLazyLoadData();
function createLazyLoadData(): Object[] {
let lazyLoadData: Object[] = [];
let customerid: string[] = ['VINET', 'TOMSP', 'HANAR', 'VICTE', 'SUPRD',
'HANAR', 'CHOPS', 'RICSU', 'WELLI', 'HILAA', 'ERNSH', 'CENTC',
'OTTIK', 'QUEDE', 'RATTC', 'ERNSH', 'FOLKO', 'BLONP', 'WARTH', 'FRANK',
'GROSR', 'WHITC', 'WARTH', 'SPLIR', 'RATTC', 'QUICK', 'VINET',
'MAGAA', 'TORTU', 'MORGK', 'BERGS', 'LEHMS', 'BERGS', 'ROMEY', 'ROMEY',
'LILAS', 'LEHMS', 'QUICK', 'QUICK', 'RICAR', 'REGGC', 'BSBEV',
grid.hideScroll();
};
return (<div>
<GridComponent dataSource={data.slice(0, 2)} dataBound={dataBound}
height='312' ref={g => grid = g}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='OrderID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='CustomerID'
width='150' />
<ColumnDirective field='EmployeeID' headerText='EmployeeID'
width='120' textAlign='Right' />
<ColumnDirective field='ShipCity' headerText='ShipCity' width='150'
/>
<ColumnDirective field='ShipCountry' headerText='ShipCountry'
width='150' />
<ColumnDirective field='ShipName' headerText='ShipName' width='150'
/>
</ColumnsDirective>
</GridComponent>
</div>);
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const dataBound = () => {
(grid as GridComponent).hideScroll();
}
return (<div>
<GridComponent dataSource={data.slice(0, 2)} dataBound={dataBound}
height='312' ref={g => grid = g}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='OrderID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='CustomerID'
width='150' />
<ColumnDirective field='EmployeeID' headerText='EmployeeID'
width='120' textAlign='Right' />
<ColumnDirective field='ShipCity' headerText='ShipCity' width='150'
/>
<ColumnDirective field='ShipCountry' headerText='ShipCountry'
width='150' />
<ColumnDirective field='ShipName' headerText='ShipName' width='150'
/>
</ColumnsDirective>
</GridComponent>
</div>)
};
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { Inject, Search, Toolbar, ToolbarItems } from '@syncfusion/ej2-react-
grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const toolbarOptions: ToolbarItems[] = ['Search'];
return (
<GridComponent dataSource={data} toolbar={toolbarOptions}
height={272}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100'
textAlign="Right"/>
<ColumnDirective field='CustomerID' width='100'/>
<ColumnDirective field='EmployeeID' width='100'
textAlign="Right"/>
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right"/>
<ColumnDirective field='ShipCountry' width='100'/>
</ColumnsDirective>
<Inject services={[Search, Toolbar]} />
</GridComponent>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
DATASOURCE.TSX
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
The clear icon is shown in the Data Grid search text box when it is focused on search text or after typing
the single character in the search text box. A single click of the clear icon clears the text in the search
box as well as the search results in the Grid.
Initial search
By default, the search operation can be performed on the grid data after the grid renders. However,
there might be scenarios where need to perform a search operation on the grid data during the initial
rendering of the grid. In such cases, you can make use of the initial search feature provided by the grid.
To apply search at initial rendering, need to set the following properties in the searchSettings object.
Property |Description
startswith |Checks whether a value begins with the specified value.
endswith |Checks whether a value ends with the specified value.
contains |Checks whether a value contains with the specified value.
wildcard |Processes one or more search patterns using the “*” symbol, returning values that match the
given patterns.
like |Processes a single search pattern using the “%” symbol, retrieving values that match the specified
pattern.
equal |Checks whether a value equal to the specified value.
notequal |Checks whether a value not equal to the specified value.
These operators provide flexibility in defining the search behavior and allow you to perform different
types of comparisons based on your requirements.
The following example demonstrates how to set the searchSettings.operator property based on
changing the dropdown value using the change event of the DropDownList component.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent,
SearchSettingsModel } from '@syncfusion/ej2-react-grids';
import { Inject, Search, Toolbar, ToolbarItems } from '@syncfusion/ej2-react-
grids';
import React, { useState } from 'react';
import { data } from './datasource';
import { DropDownListComponent, ChangeEventArgs } from '@syncfusion/ej2-
react-dropdowns'
function App() {
const [searchOptions, setSearchOptions] = useState({ operator: 'contains'
});
const toolbarOptions = ['Search'];
const ddlData = [
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent,
SearchSettingsModel } from '@syncfusion/ej2-react-grids';
import { Inject, Search, Toolbar, ToolbarItems } from '@syncfusion/ej2-react-
grids';
import React, { useState } from 'react';
import { data } from './datasource';
import { DropDownListComponent, ChangeEventArgs } from '@syncfusion/ej2-
react-dropdowns'
function App() {
const [searchOptions, setSearchOptions] = useState<SearchSettingsModel>({
operator: 'contains' });
const toolbarOptions: ToolbarItems[] = ['Search'];
const ddlData: { [key: string]: Object; }[] = [
{ text: 'startswith', value: 'startswith' },
{ text: 'endswith', value: 'endswith' },
{ text: 'wildcard', value: 'wildcard' },
{ text: 'like', value: 'like' },
{ text: 'equal', value: 'equal' },
{ text: 'notequal', value: 'notequal' },
];
const valueChange = (args: ChangeEventArgs) => {
const searchOperator: SearchSettingsModel = { operator: args.value };
setSearchOptions(searchOperator);
}
return (<div>
<label style={{ padding: "10px 10px 26px 0" }}>Change the search
operators:</label>
<DropDownListComponent id="value" index={0} width={100}
dataSource={ddlData} change={valueChange}></DropDownListComponent>
<GridComponent dataSource={data} toolbar={toolbarOptions}
searchSettings={searchOptions}
height={272}>
<ColumnsDirective>
<ColumnDirective field='OrderID' width='100' textAlign="Right" />
<ColumnDirective field='CustomerID' width='100' />
<ColumnDirective field='EmployeeID' width='100' textAlign="Right" />
<ColumnDirective field='Freight' width='100' format="C2"
textAlign="Right" />
<ColumnDirective field='ShipCountry' width='100' />
</ColumnsDirective>
<Inject services={[Search, Toolbar]} />
</GridComponent></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
The search method allows you to perform a search operation based on a search key or criteria. The
following example demonstatres how to implement search by an external button using the following
steps:
APP.JSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { employeeData } from './datasource';
function App() {
let grid;
const inputStyle = { width: '200px', display: 'inline-block' };
const clickHandler = () => {
const searchText =
document.getElementsByClassName('searchtext')[0].value;
if (grid) {
grid.search(searchText);
}
};
return (<div>
<div className="e-float-input" style={inputStyle}>
<input type="text" className="searchtext"/>
<span className="e-float-line"/>
<label className="e-float-text">Search text</label>
</div>
<ButtonComponent onClick={clickHandler}>Search</ButtonComponent>
<GridComponent dataSource={employeeData} height={260} ref={g
=> grid = g}>
<ColumnsDirective>
<ColumnDirective field='EmployeeID' headerText='Employee
ID' width='120' textAlign='Right'/>
<ColumnDirective field='FirstName' headerText='First
Name' width='150'/>
<ColumnDirective field='City' headerText='City'
width='150'/>
<ColumnDirective field='Country' headerText='Country'
width='150'/>
</ColumnsDirective>
</GridComponent>
</div>);
};
export default App;
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
DATASOURCE.JSX
export let employeeData = [{
'EmployeeID': 1,
'LastName': 'Davolio',
'FirstName': 'Nancy',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-664743600000),
'HireDate': new Date(704692800000),
'Address': '507 - 20th Ave. E.\r\nApt. 2A',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98122',
'Country': 'USA',
'HomePhone': '(206) 555-9857',
'Extension': '5467',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/leverling.bmp'
},
{
'EmployeeID': 4,
'LastName': 'Peacock',
'FirstName': 'Margaret',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mrs.',
'BirthDate': new Date(-1018814400000),
'HireDate': new Date(736401600000),
'Address': '4110 Old Redmond Rd.',
'City': 'Redmond',
'Region': 'WA',
'PostalCode': '98052',
'Country': 'USA',
'HomePhone': '(206) 555-8122',
'Extension': '5176',
'Photo': { 'Length': 21626 },
'Notes': 'Margaret holds a BA in English literature from Concordia
College (1958) and an MA from the American \
Institute of Culinary Arts (1966). She was assigned to the London office
temporarily from July through November 1992.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/peacock.bmp'
},
{
'EmployeeID': 5,
'LastName': 'Buchanan',
'FirstName': 'Steven',
'Title': 'Sales Manager',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-468010800000),
'HireDate': new Date(750830400000),
'Address': '14 Garrett Hill',
'City': 'London',
'Region': null,
'PostalCode': 'SW1 8JR',
'Country': 'UK',
'HomePhone': '(71) 555-4848',
'Extension': '3453',
'Photo': { 'Length': 21626 },
'Notes': 'Steven Buchanan graduated from St. Andrews University,
Scotland, with a BSC degree in 1976. Upon joining the company as \
a sales representative in 1992, he spent 6 months in an orientation
program at the Seattle office and then returned to his permanent \
post in London. He was promoted to sales manager in March 1993. Mr.
Buchanan has completed the courses \'Successful \
Telemarketing\' and \'International Sales Management.\' He is fluent in
French.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/buchanan.bmp'
},
{
'EmployeeID': 6,
'LastName': 'Suyama',
'FirstName': 'Michael',
'Country': 'USA',
'HomePhone': '(206) 555-1189',
'Extension': '2344',
'Photo': { 'Length': 21626 },
'Notes': 'Laura received a BA in psychology from the University of
Washington. She has also completed a course in business \
French. She reads and writes French.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 9,
'LastName': 'Dodsworth',
'FirstName': 'Anne',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-123966000000),
'HireDate': new Date(784875600000),
'Address': '7 Houndstooth Rd.',
'City': 'London',
'Region': null,
'PostalCode': 'WG2 7LT',
'Country': 'UK',
'HomePhone': '(71) 555-4444',
'Extension': '452',
'Photo': { 'Length': 21626 },
'Notes': 'Anne has a BA degree in English from St. Lawrence College.
She is fluent in French and German.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
}];
DATASOURCE.TSX
export let employeeData: Object[] = [{
'EmployeeID': 1,
'LastName': 'Davolio',
'FirstName': 'Nancy',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-664743600000),
'HireDate': new Date(704692800000),
'Address': '507 - 20th Ave. E.\r\nApt. 2A',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98122',
'Country': 'USA',
'HomePhone': '(206) 555-9857',
'Extension': '5467',
'Photo': { 'Length': 21626 },
'Notes': 'Education includes a BA in psychology from Colorado State
University in 1970. She also completed\
\'The Art of the Cold Call.\' Nancy is a member of Toastmasters
International.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 2,
'LastName': 'Fuller',
'FirstName': 'Andrew',
'Title': 'Vice President, Sales',
'TitleOfCourtesy': 'Dr.',
'BirthDate': new Date(-563828400000),
'HireDate': new Date(713764800000),
'Address': '908 W. Capital Way',
'City': 'Tacoma',
'Region': 'WA',
'PostalCode': '98401',
'Country': 'USA',
'HomePhone': '(206) 555-9482',
'Extension': '3457',
'Photo': { 'Length': 21626 },
'Notes': 'Andrew received his BTS commercial in 1974 and a Ph.D. in
international marketing from the University of \
Dallas in 1981. He is fluent in French and Italian and reads German. He
joined the company as a sales representative, \
was promoted to sales manager in January 1992 and to vice president of
sales in March 1993. Andrew is a member of the \
Sales Management Roundtable, the Seattle Chamber of Commerce, and the
Pacific Rim Importers Association.',
'ReportsTo': 0,
'PhotoPath': 'http://accweb/emmployees/fuller.bmp'
},
{
'EmployeeID': 3,
'LastName': 'Leverling',
'FirstName': 'Janet',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-200088000000),
'HireDate': new Date(702104400000),
'Address': '722 Moss Bay Blvd.',
'City': 'Kirkland',
'Region': 'WA',
'PostalCode': '98033',
'Country': 'USA',
'HomePhone': '(206) 555-3412',
'Extension': '3355',
'Photo': { 'Length': 21722 },
'Notes': 'Janet has a BS degree in chemistry from Boston College (1984).
\
She has also completed a certificate program in food retailing
management.\
Janet was hired as a sales associate in 1991 and promoted to sales
representative in February 1992.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/leverling.bmp'
},
{
'EmployeeID': 4,
'LastName': 'Peacock',
'FirstName': 'Margaret',
'Region': null,
'PostalCode': 'EC2 7JR',
'Country': 'UK',
'HomePhone': '(71) 555-7773',
'Extension': '428',
'Photo': { 'Length': 21626 },
'Notes': 'Michael is a graduate of Sussex University (MA, economics,
1983) and the University of California at Los Angeles \
(MBA, marketing, 1986). He has also taken the courses \'Multi-Cultural
Selling\' and \'Time Management for the Sales Professional.\' \
He is fluent in Japanese and can read and write French, Portuguese, and
Spanish.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 7,
'LastName': 'King',
'FirstName': 'Robert',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-302731200000),
'HireDate': new Date(757486800000),
'Address': 'Edgeham Hollow\r\nWinchester Way',
'City': 'London',
'Region': null,
'PostalCode': 'RG1 9SP',
'Country': 'UK',
'HomePhone': '(71) 555-5598',
'Extension': '465',
'Photo': { 'Length': 21626 },
'Notes': 'Robert King served in the Peace Corps and traveled extensively
before completing his degree in English at the \
University of Michigan in 1992, the year he joined the company. After
completing a course entitled \'Selling in Europe,\' \
he was transferred to the London office in March 1993.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 8,
'LastName': 'Callahan',
'FirstName': 'Laura',
'Title': 'Inside Sales Coordinator',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-377982000000),
'HireDate': new Date(762843600000),
'Address': '4726 - 11th Ave. N.E.',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98105',
'Country': 'USA',
'HomePhone': '(206) 555-1189',
'Extension': '2344',
'Photo': { 'Length': 21626 },
'Notes': 'Laura received a BA in psychology from the University of
Washington. She has also completed a course in business \
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { Inject, SearchSettingsModel, Toolbar } from '@syncfusion/ej2-react-
grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const searchSettings: SearchSettingsModel = {
fields: ['CustomerID', 'Freight', 'ShipCountry']
};
return (<div>
<GridComponent dataSource={data} height={280} toolbar={['Search']}
searchSettings={searchSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='100'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight' width='100'
format='C' textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100' />
</ColumnsDirective>
<Inject services={[Toolbar]} />
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
DATASOURCE.TSX
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { Inject, Toolbar } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const created = () => {
(document.getElementById((grid as GridComponent).element.id +
"_searchbar") as HTMLElement).addEventListener('keyup', (event) => {
(grid as GridComponent).search((event.target as
HTMLInputElement).value)
});
}
return (<div>
<GridComponent dataSource={data} height={280} toolbar= {['Search']}
ref={g => grid = g} created={created}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100'/>
<ColumnDirective field='Freight' headerText='Freight'
width='100' textAlign="Right"/>
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100'/>
</ColumnsDirective>
<Inject services={[Toolbar]} />
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
Search on each key stroke approach may affect the performance of the application when dealing with a
large number of records.
Perform search based on column formatting
By default, the search operation considers the underlying raw data of each cell for searching. However,
in some cases, you may want to search based on the formatted data visible to the users. To search data
based on column formatting, you can utilize the grid.valueFormatterService.fromView method within
the actionBegin event. This method allows you to retrieve the formatted value of a cell and perform
searching on each column using the OR predicate.
The following example demonstrates how to implement searching based on column formatting in the
Grid. In the actionBegin event, retrieve the search value from the getColumns method. Iterate through
the columns and check whether the column has a format specified. If the column has a format specified,
use the grid.valueFormatterService.fromView method to get the formatted value of the cell. If the
formatted value matches the search value, set the OR predicate that includes the current column filter
and the new filter based on the formatted value.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import { Inject, Toolbar } from '@syncfusion/ej2-react-grids';
import { Predicate, Query } from '@syncfusion/ej2-data';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const actionBegin = (args) => {
if (args.requestType === 'searching') {
args.cancel = true;
setTimeout(() => {
var columns = grid.getColumns();
var predicate = null;
for (var i = 0; i < columns.length; i++) {
var val =
grid.valueFormatterService.fromView(args.searchString,
columns[i].getParser(), columns[i].type);
if (val) {
if (predicate == null) {
predicate = new Predicate(columns[i].field,
'contains', val, true, true);
} else {
predicate = predicate.or(columns[i].field,
'contains', val, true, true);
}
}
}
grid.query = new Query().where(predicate);
}, 200);
}
}
const keyPressed = (args) => {
if (args.key === 'Enter' && args.target && args.target.closest('.e-
search') && args.target.value === '') {
args.cancel = true;
grid.query = new Query();
}
}
return (<div>
<GridComponent ref={g => grid = g} dataSource={data} height={280}
toolbar={['Search']} actionBegin={actionBegin} keyPressed={keyPressed}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='Freight' headerText='Freight'
width='100' format='C' textAlign="Right" />
<ColumnDirective field='OrderDate' headerText='OrderDate'
width='100' format='yMd' />
</ColumnsDirective>
<Inject services={[Toolbar]} />
</GridComponent>
</div>);
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, SearchEventArgs }
from '@syncfusion/ej2-react-grids';
import { Inject, Toolbar } from '@syncfusion/ej2-react-grids';
import { Predicate, Query } from '@syncfusion/ej2-data';
import { KeyboardEventArgs } from '@syncfusion/ej2-base';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const actionBegin = (args: SearchEventArgs) => {
if (args.requestType === 'searching') {
args.cancel = true;
setTimeout(() => {
var columns = (grid as GridComponent).getColumns();
var predicate: Predicate = null;
for (var i = 0; i < columns.length; i++) {
var val = (grid as
GridComponent).valueFormatterService.fromView(args.searchString,
columns[i].getParser(), columns[i].type);
if (val) {
if (predicate == null) {
predicate = new Predicate(columns[i].field, 'contains', val,
true, true);
} else {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
grid.getColumns().forEach((col) => {
if (flag) {
predicate = new Predicate(col.field,
'contains', key, true);
flag = false;
}
else {
var predic = new Predicate(col.field,
'contains', key, true);
predicate = predicate.or(predic);
}
});
});
grid.query = new Query().where(predicate);
grid.searchSettings.key = '';
refresh = true;
valueAssign = true;
removeQuery = true;
grid.refresh();
}
}
}
};
const actionComplete = (args) => {
if (args.requestType === 'refresh' && valueAssign) {
document.getElementById(grid.element.id + '_searchbar').value =
values;
valueAssign = false;
}
else if (document.getElementById(grid.element.id +
'_searchbar').value ===
'' &&
args.requestType === 'refresh' &&
removeQuery) {
grid.query = new Query();
removeQuery = false;
grid.refresh();
}
};
return (<div>
<GridComponent dataSource={data} height={280} toolbar={toolbarOptions}
searchSettings={searchOptions} ref={g => grid = g} actionBegin={actionBegin}
actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100'/>
<ColumnDirective field='Freight' headerText='Freight' width='100'
format='C' textAlign="Right"/>
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100'/>
</ColumnsDirective>
<Inject services={[Toolbar]}/>
</GridComponent>
</div>);
};
APP.TSX
import {Toolbar, ToolbarItems, Grid, GridComponent, SearchSettingsModel,
ColumnsDirective,ColumnDirective, Inject, SearchEventArgs} from
'@syncfusion/ej2-react-grids';
import { Predicate, Query } from '@syncfusion/ej2-data';
import * as React from 'react';
import { data } from './datasource';
function App() {
let values = '';
const key = '';
let refresh = false;
let removeQuery = false;
let valueAssign = false;
let grid: Grid | null;
const searchOptions: SearchSettingsModel = {
fields: ['OrderID', 'CustomerID', 'Freight', 'ShipCountry'],
key: '',
operator:'contains',
ignoreCase: true
};
const toolbarOptions: ToolbarItems[] = ['Search'];
const actionBegin = (args: SearchEventArgs): void => {
if (args.requestType == 'searching') {
const keys = args.searchString.split(',');
let flag = true;
let predicate;
if (keys.length > 1) {
if (grid.searchSettings.key !== '') {
values = args.searchString;
keys.forEach((key) => {
grid.getColumns().forEach((col) => {
if (flag) {
predicate = new Predicate(col.field, 'contains', key, true);
flag = false;
} else {
var predic = new Predicate(col.field, 'contains', key, true);
predicate = predicate.or(predic);
}
});
});
grid.query = new Query().where(predicate);
grid.searchSettings.key = '';
refresh = true;
valueAssign = true;
removeQuery = true;
grid.refreshColumns();
}
}
}
};
const actionComplete = (args: SearchEventArgs): void => {
if (args.requestType === 'refresh' && valueAssign) {
document.getElementById(grid.element.id + '_searchbar').value =
values;
valueAssign = false;
} else if (
document.getElementById(grid.element.id + '_searchbar').value ===
'' &&
args.requestType === 'refresh' &&
removeQuery
) {
grid.query = new Query();
removeQuery = false;
grid.refreshColumns();
}
};
return (<div>
<GridComponent dataSource={data} height={280} toolbar= {toolbarOptions}
searchSettings={searchOptions} ref={g => grid = g}
actionBegin={actionBegin}
actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='100' textAlign="Right"/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100'/>
<ColumnDirective field='Freight' headerText='Freight' width='100'
format ='C' textAlign="Right"/>
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='100'/>
</ColumnsDirective>
<Inject services={[Toolbar]} />
</GridComponent>
</div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
By using this approach, you can perform a search operation in the grid using multiple keywords.
How to ignore accent while searching
By default, the searching operation in the Grid component does not ignore diacritic characters or
accents. However, there are cases where ignoring diacritic characters becomes necessary. This feature
enhances the search experience by enabling data searching without considering accents, ensuring a
more comprehensive and accurate search and it can be achieved by utilizing the
searchSettings.ignoreAccent property of the Grid component as true.
The following example demonstrates how to define the ignoreAccent property within the
searchSettings property of the grid. Additionally, the EJ2 Toggle Switch Button component is included to
modify the value of the searchSettings.ignoreAccent property. When the switch is toggled, the change
event is triggered, and the searchSettings.ignoreAccent property is updated accordingly. This
functionality helps to visualize the impact of the searchSettings.ignoreAccent setting when
performing search operations.
APP.JSX
import { SwitchComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Search } from
'@syncfusion/ej2-react-grids';
import { Inject, Toolbar } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const valueChange = (args) => {
grid.searchSettings.ignoreAccent = args.checked;
}
return (<div>
<label style={{ padding: "10px 10px" }}>Enable or disable
ignoreAccent property</label>
<SwitchComponent id='switch' change={valueChange}></SwitchComponent>
<GridComponent ref={g => grid = g} dataSource={data} height={280}
toolbar={['Search']} >
<ColumnsDirective>
<ColumnDirective field='CategoryName' headerText='Category
Name' width='100' textAlign="Right" />
<ColumnDirective field='ProductName' headerText='Product
Name' width='100' />
<ColumnDirective field='QuantityPerUnit' headerText='Quantity
Per Unit' width='100' textAlign="Right" />
<ColumnDirective field='UnitsInStock' headerText='Units In
Stock' width='100' />
</ColumnsDirective>
<Inject services={[Toolbar, Search]} />
</GridComponent>
</div>);
};
export default App;
APP.TSX
import { SwitchComponent, ChangeEventArgs } from '@syncfusion/ej2-react-
buttons';
import { ColumnDirective, ColumnsDirective, GridComponent, Search } from
'@syncfusion/ej2-react-grids';
import { Inject, Toolbar } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const valueChange = (args: ChangeEventArgs) => {
(grid as GridComponent).searchSettings.ignoreAccent = args.checked;
}
return (<div>
<label style={{ padding: "10px 10px" }}>Enable or disable ignoreAccent
property:</label>
<SwitchComponent id='switch' change={valueChange}></SwitchComponent>
<GridComponent ref={g => grid = g} dataSource={data} height={280}
toolbar={['Search']} >
<ColumnsDirective>
<ColumnDirective field='CategoryName' headerText='Category Name'
width='100' textAlign="Right" />
<ColumnDirective field='ProductName' headerText='Product Name'
width='100' />
<ColumnDirective field='QuantityPerUnit' headerText='Quantity Per
Unit' width='100' textAlign="Right" />
<ColumnDirective field='UnitsInStock' headerText='Units In Stock'
width='100' />
</ColumnsDirective>
<Inject services={[Toolbar, Search]} />
</GridComponent>
</div>);
};
export default App;
DATASOURCE.JSX
export let data = [
{
"CategoryName": "Beveräges",
'ProductID': 1,
'ProductName': 'Chäi',
'SupplierID': 1,
'QuantityPerUnit': '10 boxes x 20 bags',
'UnitPrice': 18.00,
'UnitsInStock': 39,
'Discontinued': true
},
{
"CategoryName": "Beverages",
'ProductID': 2,
'ProductName': 'CHANG',
'SupplierID': 1,
{
"CategoryName": "Beverages",
'ProductID': 3,
'ProductName': 'Aniseed Syrup',
'SupplierID': 1,
'QuantityPerUnit': '12 - 550 ml bottles',
'UnitPrice': 10.00,
'UnitsInStock': 13,
'Discontinued': true
},
{
"CategoryName": "Beverages",
'ProductID': 4,
'ProductName': 'Chef Anton\'s Cajun Seasoning',
'SupplierID': 2,
'QuantityPerUnit': '48 - 6 oz jars',
'UnitPrice': 22.00,
'UnitsInStock': 53,
'Discontinued': true
},
{
"CategoryName": "Beveräges",
'ProductID': 5,
'ProductName': 'Chef Anton\'s Gumbo Mix',
'SupplierID': 2,
'QuantityPerUnit': '36 boxes',
'UnitPrice': 21.35,
'UnitsInStock': 0,
'Discontinued': true
},
{
"CategoryName": "Beverages",
'ProductID': 6,
'ProductName': 'Grandma\'s Boysenberry Spread',
'SupplierID': 3,
'QuantityPerUnit': '12 - 8 oz jars',
'UnitPrice': 25.00,
'UnitsInStock': 120,
'Discontinued': false
},
{
"CategoryName": "Beveräges",
'ProductID': 7,
'ProductName': 'Uncle Bob\'s Organic Dried Pears',
'SupplierID': 3,
'QuantityPerUnit': '12 - 1 lb pkgs.',
'UnitPrice': 30.00,
'UnitsInStock': 15,
'Discontinued': false
},
{
"CategoryName": "Beverages",
'ProductID': 8,
'ProductName': 'Northwoods Cranberry Sauce',
'SupplierID': 3,
'QuantityPerUnit': '12 - 12 oz jars',
'UnitPrice': 40.00,
'UnitsInStock': 6,
'Discontinued': false
},
{
"CategoryName": "Beverages",
'ProductID': 9,
'ProductName': 'Mishi Kobe Niku',
'SupplierID': 4,
'QuantityPerUnit': '18 - 500 g pkgs.',
'UnitPrice': 97.00,
'UnitsInStock': 29,
'Discontinued': true
},
{
"CategoryName": "Beverages",
'ProductID': 10,
'ProductName': 'Ikura',
'SupplierID': 4,
'QuantityPerUnit': '12 - 200 ml jars',
'UnitPrice': 31.00,
'UnitsInStock': 31,
'Discontinued': false
},
{
"CategoryName": "Beveräges",
'ProductID': 11,
'ProductName': 'Queso Cabrales',
'SupplierID': 5,
'QuantityPerUnit': '1 kg pkg.',
'UnitPrice': 21.00,
'UnitsInStock': 22,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 12,
'ProductName': 'Queso Manchego La Pastora',
'SupplierID': 5,
'QuantityPerUnit': '10 - 500 g pkgs.',
'UnitPrice': 38.00,
'UnitsInStock': 86,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 13,
'ProductName': 'Konbu',
'SupplierID': 6,
'QuantityPerUnit': '2 kg box',
'UnitPrice': 6.00,
'UnitsInStock': 24,
'Discontinued': true
},
{
"CategoryName": "Condiments",
'ProductID': 14,
'ProductName': 'Tofu',
'SupplierID': 6,
'QuantityPerUnit': '40 - 100 g pkgs.',
'UnitPrice': 23.25,
'UnitsInStock': 35,
'Discontinued': true
},
{
"CategoryName": "Condiments",
'ProductID': 15,
'ProductName': 'Genen Shouyu',
'SupplierID': 6,
'QuantityPerUnit': '24 - 250 ml bottles',
'UnitPrice': 15.50,
'UnitsInStock': 39,
'Discontinued': true
},
{
"CategoryName": "Condiments",
'ProductID': 16,
'ProductName': 'Pavlova',
'SupplierID': 7,
'QuantityPerUnit': '32 - 500 g boxes',
'UnitPrice': 17.45,
'UnitsInStock': 29,
'Discontinued': true
},
{
"CategoryName": "Condiments",
'ProductID': 17,
'ProductName': 'Alice Mutton',
'SupplierID': 7,
'QuantityPerUnit': '20 - 1 kg tins',
'UnitPrice': 39.00,
'UnitsInStock': 0,
'Discontinued': true
},
{
"CategoryName": "Condiments",
'ProductID': 18,
'ProductName': 'Carnarvon Tigers',
'SupplierID': 7,
'QuantityPerUnit': '16 kg pkg.',
'UnitPrice': 62.50,
'UnitsInStock': 42,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 19,
'ProductName': 'Teatime Chocolate Biscuits',
'SupplierID': 8,
'QuantityPerUnit': '10 boxes x 12 pieces',
'UnitPrice': 9.20,
'UnitsInStock': 25,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 20,
'ProductName': 'Sir Rodney\'s Marmalade',
'SupplierID': 8,
'QuantityPerUnit': '30 gift boxes',
'UnitPrice': 81.00,
'UnitsInStock': 40,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 21,
'ProductName': 'Sir Rodney\'s Scones',
'SupplierID': 8,
'QuantityPerUnit': '24 pkgs. x 4 pieces',
'UnitPrice': 10.00,
'UnitsInStock': 3,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 22,
'ProductName': 'Gustaf\'s Knäckebröd',
'SupplierID': 9,
'QuantityPerUnit': '24 - 500 g pkgs.',
'UnitPrice': 21.00,
'UnitsInStock': 104,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 23,
'ProductName': 'Tunnbröd',
'SupplierID': 9,
'QuantityPerUnit': '12 - 250 g pkgs.',
'UnitPrice': 9.00,
'UnitsInStock': 61,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 24,
'ProductName': 'Guaraná Fantástica',
'SupplierID': 10,
'QuantityPerUnit': '12 - 355 ml cans',
'UnitPrice': 4.50,
'UnitsInStock': 20,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 25,
'ProductName': 'NuNuCa Nuß-Nougat-Creme',
'SupplierID': 11,
'QuantityPerUnit': '20 - 450 g glasses',
'UnitPrice': 14.00,
'UnitsInStock': 76,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 26,
'ProductName': 'Gumbär Gummibärchen',
'SupplierID': 11,
'QuantityPerUnit': '100 - 250 g bags',
'UnitPrice': 31.23,
'UnitsInStock': 15,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 27,
'ProductName': 'Schoggi Schokolade',
'SupplierID': 11,
'QuantityPerUnit': '100 - 100 g pieces',
'UnitPrice': 43.90,
'UnitsInStock': 49,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 28,
'ProductName': 'Rössle Sauerkraut',
'SupplierID': 12,
'QuantityPerUnit': '25 - 825 g cans',
'UnitPrice': 45.60,
'UnitsInStock': 26,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 29,
'ProductName': 'Thüringer Rostbratwurst',
'SupplierID': 12,
'QuantityPerUnit': '50 bags x 30 sausgs.',
'UnitPrice': 123.79,
'UnitsInStock': 0,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 30,
'ProductName': 'Nord-Ost Matjeshering',
'SupplierID': 13,
'QuantityPerUnit': '10 - 200 g glasses',
'UnitPrice': 25.89,
'UnitsInStock': 10,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 31,
'ProductName': 'Gorgonzola Telino',
'SupplierID': 14,
'QuantityPerUnit': '12 - 100 g pkgs',
'UnitPrice': 12.50,
'UnitsInStock': 0,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 32,
'ProductName': 'Mascarpone Fabioli',
'SupplierID': 14,
'QuantityPerUnit': '24 - 200 g pkgs.',
'UnitPrice': 32.00,
'UnitsInStock': 9,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 33,
'ProductName': 'Geitost',
'SupplierID': 15,
'QuantityPerUnit': '500 g',
'UnitPrice': 2.50,
'UnitsInStock': 112,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 34,
'ProductName': 'Sasquatch Ale',
'SupplierID': 16,
'QuantityPerUnit': '24 - 12 oz bottles',
'UnitPrice': 14.00,
'UnitsInStock': 111,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 35,
'ProductName': 'Steeleye Stout',
'SupplierID': 16,
'QuantityPerUnit': '24 - 12 oz bottles',
'UnitPrice': 18.00,
'UnitsInStock': 20,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 36,
'ProductName': 'Inlagd Sill',
'SupplierID': 17,
'QuantityPerUnit': '24 - 250 g jars',
'UnitPrice': 19.00,
'UnitsInStock': 112,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 37,
'ProductName': 'Gravad lax',
'SupplierID': 17,
'QuantityPerUnit': '12 - 500 g pkgs.',
'UnitPrice': 26.00,
'UnitsInStock': 11,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 38,
'ProductName': 'Côte de Blaye',
'SupplierID': 18,
'QuantityPerUnit': '12 - 75 cl bottles',
'UnitPrice': 263.50,
'UnitsInStock': 17,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 39,
'ProductName': 'Chartreuse verte',
'SupplierID': 18,
'QuantityPerUnit': '750 cc per bottle',
'UnitPrice': 18.00,
'UnitsInStock': 69,
'Discontinued': true
},
{
"CategoryName": "Dairy Products",
'ProductID': 40,
'ProductName': 'Boston Crab Meat',
'SupplierID': 19,
'QuantityPerUnit': '24 - 4 oz tins',
'UnitPrice': 18.40,
'UnitsInStock': 123,
'Discontinued': true
},
{
"CategoryName": "Dairy Products",
'ProductID': 41,
'ProductName': 'Jack\'s New England Clam Chowder',
'SupplierID': 19,
'QuantityPerUnit': '12 - 12 oz cans',
'UnitPrice': 9.65,
'UnitsInStock': 85,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 42,
'ProductName': 'Singaporean Hokkien Fried Mee',
'SupplierID': 20,
'QuantityPerUnit': '32 - 1 kg pkgs.',
'UnitPrice': 14.00,
'UnitsInStock': 26,
'Discontinued': true
},
{
"CategoryName": "Dairy Products",
'ProductID': 43,
'ProductName': 'Ipoh Coffee',
'SupplierID': 20,
'QuantityPerUnit': '16 - 500 g tins',
'UnitPrice': 46.00,
'UnitsInStock': 17,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 44,
'ProductName': 'Gula Malacca',
'SupplierID': 20,
'QuantityPerUnit': '20 - 2 kg bags',
'UnitPrice': 19.45,
'UnitsInStock': 27,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 45,
'ProductName': 'Rogede sild',
'SupplierID': 21,
'QuantityPerUnit': '1k pkg.',
'UnitPrice': 9.50,
'UnitsInStock': 5,
'Discontinued': true
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 46,
'ProductName': 'Spegesild',
'SupplierID': 21,
'QuantityPerUnit': '4 - 450 g glasses',
'UnitPrice': 12.00,
'UnitsInStock': 95,
'Discontinued': true
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 47,
'ProductName': 'Zaanse koeken',
'SupplierID': 22,
'QuantityPerUnit': '10 - 4 oz boxes',
'UnitPrice': 9.50,
'UnitsInStock': 36,
'Discontinued': true
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 48,
'ProductName': 'Chocolade',
'SupplierID': 22,
'QuantityPerUnit': '10 pkgs.',
'UnitPrice': 12.75,
'UnitsInStock': 15,
'Discontinued': true
},
"CategoryName": "Grains/Cereals",
'ProductID': 49,
'ProductName': 'Maxilaku',
'SupplierID': 23,
'QuantityPerUnit': '24 - 50 g pkgs.',
'UnitPrice': 20.00,
'UnitsInStock': 10,
'Discontinued': false
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 50,
'ProductName': 'Valkoinen suklaa',
'SupplierID': 23,
'QuantityPerUnit': '12 - 100 g bars',
'UnitPrice': 16.25,
'UnitsInStock': 65,
'Discontinued': false
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 51,
'ProductName': 'Manjimup Dried Apples',
'SupplierID': 24,
'QuantityPerUnit': '50 - 300 g pkgs.',
'UnitPrice': 53.00,
'UnitsInStock': 20,
'Discontinued': false
},
{
"CategoryName": "Meat/Poultry",
'ProductID': 52,
'ProductName': 'Filo Mix',
'SupplierID': 24,
'QuantityPerUnit': '16 - 2 kg boxes',
'UnitPrice': 7.00,
'UnitsInStock': 38,
'Discontinued': true
},
{
"CategoryName": "Meat/Poultry",
'ProductID': 53,
'ProductName': 'Perth Pasties',
'SupplierID': 24,
'QuantityPerUnit': '48 pieces',
'UnitPrice': 32.80,
'UnitsInStock': 0,
'Discontinued': true
},
{
"CategoryName": "Produce",
'ProductID': 54,
'ProductName': 'Tourtière',
'SupplierID': 25,
'QuantityPerUnit': '16 pies',
'UnitPrice': 7.45,
'UnitsInStock': 21,
'Discontinued': true
},
{
"CategoryName": "Produce",
'ProductID': 55,
'ProductName': 'Pâté chinois',
'SupplierID': 25,
'QuantityPerUnit': '24 boxes x 2 pies',
'UnitPrice': 24.00,
'UnitsInStock': 115,
'Discontinued': true
},
{
"CategoryName": "Produce",
'ProductName': 'Gnocchi di nonna Alice',
'SupplierID': 26,
'QuantityPerUnit': '24 - 250 g pkgs.',
'UnitPrice': 38.00,
'UnitsInStock': 21,
'Discontinued': false
},
{
"CategoryName": "Produce",
'ProductName': 'Ravioli Angelo',
'SupplierID': 26,
'QuantityPerUnit': '24 - 250 g pkgs.',
'UnitPrice': 19.50,
'UnitsInStock': 36,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 58,
'ProductName': 'Escargots de Bourgogne',
'SupplierID': 27,
'QuantityPerUnit': '24 pieces',
'UnitPrice': 13.25,
'UnitsInStock': 62,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 59,
'ProductName': 'Raclette Courdavault',
'SupplierID': 28,
'QuantityPerUnit': '5 kg pkg.',
'UnitPrice': 55.00,
'UnitsInStock': 79,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 60,
'ProductName': 'Camembert Pierrot',
'SupplierID': 28,
'QuantityPerUnit': '15 - 300 g rounds',
'UnitPrice': 34.00,
'UnitsInStock': 19,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 61,
'ProductName': 'Sirop d\'érable',
'SupplierID': 29,
'QuantityPerUnit': '24 - 500 ml bottles',
'UnitPrice': 28.50,
'UnitsInStock': 113,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 62,
'ProductName': 'Tarte au sucre',
'SupplierID': 29,
'QuantityPerUnit': '48 pies',
'UnitPrice': 49.30,
'UnitsInStock': 17,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 63,
'ProductName': 'Vegie-spread',
'SupplierID': 7,
'QuantityPerUnit': '15 - 625 g jars',
'UnitPrice': 43.90,
'UnitsInStock': 24,
'Discontinued': true
},
{
"CategoryName": "Seafood",
'ProductID': 64,
'ProductName': 'Wimmers gute Semmelknödel',
'SupplierID': 12,
'QuantityPerUnit': '20 bags x 4 pieces',
'UnitPrice': 33.25,
'UnitsInStock': 22,
'Discontinued': true
},
{
"CategoryName": "Seafood",
'ProductID': 65,
'ProductName': 'Louisiana Fiery Hot Pepper Sauce',
'SupplierID': 2,
'QuantityPerUnit': '32 - 8 oz bottles',
'UnitPrice': 21.05,
'UnitsInStock': 76,
'Discontinued': true
},
{
"CategoryName": "Seafood",
'ProductID': 66,
'ProductName': 'Louisiana Hot Spiced Okra',
'SupplierID': 2,
'QuantityPerUnit': '24 - 8 oz jars',
'UnitPrice': 17.00,
'UnitsInStock': 4,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 67,
'ProductName': 'Laughing Lumberjack Lager',
'SupplierID': 16,
'QuantityPerUnit': '24 - 12 oz bottles',
'UnitPrice': 14.00,
'UnitsInStock': 52,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 68,
'ProductName': 'Scottish Longbreads',
'SupplierID': 8,
'QuantityPerUnit': '10 boxes x 8 pieces',
'UnitPrice': 12.50,
'UnitsInStock': 6,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 69,
'ProductName': 'Gudbrandsdalsost',
'SupplierID': 15,
'QuantityPerUnit': '10 kg pkg.',
'UnitPrice': 36.00,
'UnitsInStock': 26,
'Discontinued': false
}
];
DATASOURCE.TSX
export let data: object[] = [
{
"CategoryName": "Beveräges",
'ProductID': 1,
'ProductName': 'Chäi',
'SupplierID': 1,
'QuantityPerUnit': '10 boxes x 20 bags',
'UnitPrice': 18.00,
'UnitsInStock': 39,
'Discontinued': true
},
{
"CategoryName": "Beverages",
'ProductID': 2,
'ProductName': 'CHANG',
'SupplierID': 1,
'QuantityPerUnit': '24 - 12 oz bottles',
'UnitPrice': 19.00,
'UnitsInStock': 17,
'Discontinued': true
},
{
"CategoryName": "Beverages",
'ProductID': 3,
'ProductName': 'Aniseed Syrup',
'SupplierID': 1,
'QuantityPerUnit': '12 - 550 ml bottles',
'UnitPrice': 10.00,
'UnitsInStock': 13,
'Discontinued': true
},
{
"CategoryName": "Beverages",
'ProductID': 4,
'ProductName': 'Chef Anton\'s Cajun Seasoning',
'SupplierID': 2,
'QuantityPerUnit': '48 - 6 oz jars',
'UnitPrice': 22.00,
'UnitsInStock': 53,
'Discontinued': true
},
{
"CategoryName": "Beveräges",
'ProductID': 5,
'ProductName': 'Chef Anton\'s Gumbo Mix',
'SupplierID': 2,
'QuantityPerUnit': '36 boxes',
'UnitPrice': 21.35,
'UnitsInStock': 0,
'Discontinued': true
},
{
"CategoryName": "Beverages",
'ProductID': 6,
'ProductName': 'Grandma\'s Boysenberry Spread',
'SupplierID': 3,
'QuantityPerUnit': '12 - 8 oz jars',
'UnitPrice': 25.00,
'UnitsInStock': 120,
'Discontinued': false
},
{
"CategoryName": "Beveräges",
'ProductID': 7,
'ProductName': 'Uncle Bob\'s Organic Dried Pears',
'SupplierID': 3,
'QuantityPerUnit': '12 - 1 lb pkgs.',
'UnitPrice': 30.00,
'UnitsInStock': 15,
'Discontinued': false
},
{
"CategoryName": "Beverages",
'ProductID': 8,
'ProductName': 'Northwoods Cranberry Sauce',
'SupplierID': 3,
'QuantityPerUnit': '12 - 12 oz jars',
'UnitPrice': 40.00,
'UnitsInStock': 6,
'Discontinued': false
},
{
"CategoryName": "Beverages",
'ProductID': 9,
'ProductName': 'Mishi Kobe Niku',
'SupplierID': 4,
'QuantityPerUnit': '18 - 500 g pkgs.',
'UnitPrice': 97.00,
'UnitsInStock': 29,
'Discontinued': true
},
{
"CategoryName": "Beverages",
'ProductID': 10,
'ProductName': 'Ikura',
'SupplierID': 4,
'QuantityPerUnit': '12 - 200 ml jars',
'UnitPrice': 31.00,
'UnitsInStock': 31,
'Discontinued': false
},
{
"CategoryName": "Beveräges",
'ProductID': 11,
'ProductName': 'Queso Cabrales',
'SupplierID': 5,
'QuantityPerUnit': '1 kg pkg.',
'UnitPrice': 21.00,
'UnitsInStock': 22,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 12,
'ProductName': 'Queso Manchego La Pastora',
'SupplierID': 5,
'QuantityPerUnit': '10 - 500 g pkgs.',
'UnitPrice': 38.00,
'UnitsInStock': 86,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 13,
'ProductName': 'Konbu',
'SupplierID': 6,
'QuantityPerUnit': '2 kg box',
'UnitPrice': 6.00,
'UnitsInStock': 24,
'Discontinued': true
},
{
"CategoryName": "Condiments",
'ProductID': 14,
'ProductName': 'Tofu',
'SupplierID': 6,
'QuantityPerUnit': '40 - 100 g pkgs.',
'UnitPrice': 23.25,
'UnitsInStock': 35,
'Discontinued': true
},
{
"CategoryName": "Condiments",
'ProductID': 15,
'ProductName': 'Genen Shouyu',
'SupplierID': 6,
'QuantityPerUnit': '24 - 250 ml bottles',
'UnitPrice': 15.50,
'UnitsInStock': 39,
'Discontinued': true
},
"CategoryName": "Condiments",
'ProductID': 16,
'ProductName': 'Pavlova',
'SupplierID': 7,
'QuantityPerUnit': '32 - 500 g boxes',
'UnitPrice': 17.45,
'UnitsInStock': 29,
'Discontinued': true
},
{
"CategoryName": "Condiments",
'ProductID': 17,
'ProductName': 'Alice Mutton',
'SupplierID': 7,
'QuantityPerUnit': '20 - 1 kg tins',
'UnitPrice': 39.00,
'UnitsInStock': 0,
'Discontinued': true
},
{
"CategoryName": "Condiments",
'ProductID': 18,
'ProductName': 'Carnarvon Tigers',
'SupplierID': 7,
'QuantityPerUnit': '16 kg pkg.',
'UnitPrice': 62.50,
'UnitsInStock': 42,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 19,
'ProductName': 'Teatime Chocolate Biscuits',
'SupplierID': 8,
'QuantityPerUnit': '10 boxes x 12 pieces',
'UnitPrice': 9.20,
'UnitsInStock': 25,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 20,
'ProductName': 'Sir Rodney\'s Marmalade',
'SupplierID': 8,
'QuantityPerUnit': '30 gift boxes',
'UnitPrice': 81.00,
'UnitsInStock': 40,
'Discontinued': false
},
{
"CategoryName": "Condiments",
'ProductID': 21,
{
"CategoryName": "Condiments",
'ProductID': 22,
'ProductName': 'Gustaf\'s Knäckebröd',
'SupplierID': 9,
'QuantityPerUnit': '24 - 500 g pkgs.',
'UnitPrice': 21.00,
'UnitsInStock': 104,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 23,
'ProductName': 'Tunnbröd',
'SupplierID': 9,
'QuantityPerUnit': '12 - 250 g pkgs.',
'UnitPrice': 9.00,
'UnitsInStock': 61,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 24,
'ProductName': 'Guaraná Fantástica',
'SupplierID': 10,
'QuantityPerUnit': '12 - 355 ml cans',
'UnitPrice': 4.50,
'UnitsInStock': 20,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 25,
'ProductName': 'NuNuCa Nuß-Nougat-Creme',
'SupplierID': 11,
'QuantityPerUnit': '20 - 450 g glasses',
'UnitPrice': 14.00,
'UnitsInStock': 76,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 26,
'ProductName': 'Gumbär Gummibärchen',
'SupplierID': 11,
{
"CategoryName": "Confections",
'ProductID': 27,
'ProductName': 'Schoggi Schokolade',
'SupplierID': 11,
'QuantityPerUnit': '100 - 100 g pieces',
'UnitPrice': 43.90,
'UnitsInStock': 49,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 28,
'ProductName': 'Rössle Sauerkraut',
'SupplierID': 12,
'QuantityPerUnit': '25 - 825 g cans',
'UnitPrice': 45.60,
'UnitsInStock': 26,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 29,
'ProductName': 'Thüringer Rostbratwurst',
'SupplierID': 12,
'QuantityPerUnit': '50 bags x 30 sausgs.',
'UnitPrice': 123.79,
'UnitsInStock': 0,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 30,
'ProductName': 'Nord-Ost Matjeshering',
'SupplierID': 13,
'QuantityPerUnit': '10 - 200 g glasses',
'UnitPrice': 25.89,
'UnitsInStock': 10,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 31,
'ProductName': 'Gorgonzola Telino',
'SupplierID': 14,
'QuantityPerUnit': '12 - 100 g pkgs',
'UnitPrice': 12.50,
'UnitsInStock': 0,
'Discontinued': true
},
{
"CategoryName": "Confections",
'ProductID': 32,
'ProductName': 'Mascarpone Fabioli',
'SupplierID': 14,
'QuantityPerUnit': '24 - 200 g pkgs.',
'UnitPrice': 32.00,
'UnitsInStock': 9,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 33,
'ProductName': 'Geitost',
'SupplierID': 15,
'QuantityPerUnit': '500 g',
'UnitPrice': 2.50,
'UnitsInStock': 112,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 34,
'ProductName': 'Sasquatch Ale',
'SupplierID': 16,
'QuantityPerUnit': '24 - 12 oz bottles',
'UnitPrice': 14.00,
'UnitsInStock': 111,
'Discontinued': false
},
{
"CategoryName": "Confections",
'ProductID': 35,
'ProductName': 'Steeleye Stout',
'SupplierID': 16,
'QuantityPerUnit': '24 - 12 oz bottles',
'UnitPrice': 18.00,
'UnitsInStock': 20,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 36,
'ProductName': 'Inlagd Sill',
'SupplierID': 17,
'QuantityPerUnit': '24 - 250 g jars',
'UnitPrice': 19.00,
'UnitsInStock': 112,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 37,
'ProductName': 'Gravad lax',
'SupplierID': 17,
'QuantityPerUnit': '12 - 500 g pkgs.',
'UnitPrice': 26.00,
'UnitsInStock': 11,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 38,
'ProductName': 'Côte de Blaye',
'SupplierID': 18,
'QuantityPerUnit': '12 - 75 cl bottles',
'UnitPrice': 263.50,
'UnitsInStock': 17,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 39,
'ProductName': 'Chartreuse verte',
'SupplierID': 18,
'QuantityPerUnit': '750 cc per bottle',
'UnitPrice': 18.00,
'UnitsInStock': 69,
'Discontinued': true
},
{
"CategoryName": "Dairy Products",
'ProductID': 40,
'ProductName': 'Boston Crab Meat',
'SupplierID': 19,
'QuantityPerUnit': '24 - 4 oz tins',
'UnitPrice': 18.40,
'UnitsInStock': 123,
'Discontinued': true
},
{
"CategoryName": "Dairy Products",
'ProductID': 41,
'ProductName': 'Jack\'s New England Clam Chowder',
'SupplierID': 19,
'QuantityPerUnit': '12 - 12 oz cans',
'UnitPrice': 9.65,
'UnitsInStock': 85,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 42,
'ProductName': 'Singaporean Hokkien Fried Mee',
'SupplierID': 20,
'QuantityPerUnit': '32 - 1 kg pkgs.',
'UnitPrice': 14.00,
'UnitsInStock': 26,
'Discontinued': true
},
{
"CategoryName": "Dairy Products",
'ProductID': 43,
'ProductName': 'Ipoh Coffee',
'SupplierID': 20,
'QuantityPerUnit': '16 - 500 g tins',
'UnitPrice': 46.00,
'UnitsInStock': 17,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 44,
'ProductName': 'Gula Malacca',
'SupplierID': 20,
'QuantityPerUnit': '20 - 2 kg bags',
'UnitPrice': 19.45,
'UnitsInStock': 27,
'Discontinued': false
},
{
"CategoryName": "Dairy Products",
'ProductID': 45,
'ProductName': 'Rogede sild',
'SupplierID': 21,
'QuantityPerUnit': '1k pkg.',
'UnitPrice': 9.50,
'UnitsInStock': 5,
'Discontinued': true
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 46,
'ProductName': 'Spegesild',
'SupplierID': 21,
'QuantityPerUnit': '4 - 450 g glasses',
'UnitPrice': 12.00,
'UnitsInStock': 95,
'Discontinued': true
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 47,
'ProductName': 'Zaanse koeken',
'SupplierID': 22,
'QuantityPerUnit': '10 - 4 oz boxes',
'UnitPrice': 9.50,
'UnitsInStock': 36,
'Discontinued': true
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 48,
'ProductName': 'Chocolade',
'SupplierID': 22,
'QuantityPerUnit': '10 pkgs.',
'UnitPrice': 12.75,
'UnitsInStock': 15,
'Discontinued': true
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 49,
'ProductName': 'Maxilaku',
'SupplierID': 23,
'QuantityPerUnit': '24 - 50 g pkgs.',
'UnitPrice': 20.00,
'UnitsInStock': 10,
'Discontinued': false
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 50,
'ProductName': 'Valkoinen suklaa',
'SupplierID': 23,
'QuantityPerUnit': '12 - 100 g bars',
'UnitPrice': 16.25,
'UnitsInStock': 65,
'Discontinued': false
},
{
"CategoryName": "Grains/Cereals",
'ProductID': 51,
'ProductName': 'Manjimup Dried Apples',
'SupplierID': 24,
'QuantityPerUnit': '50 - 300 g pkgs.',
'UnitPrice': 53.00,
'UnitsInStock': 20,
'Discontinued': false
},
{
"CategoryName": "Meat/Poultry",
'ProductID': 52,
'ProductName': 'Filo Mix',
'SupplierID': 24,
'QuantityPerUnit': '16 - 2 kg boxes',
'UnitPrice': 7.00,
'UnitsInStock': 38,
'Discontinued': true
},
{
"CategoryName": "Meat/Poultry",
'ProductID': 53,
'ProductName': 'Perth Pasties',
'SupplierID': 24,
'QuantityPerUnit': '48 pieces',
'UnitPrice': 32.80,
'UnitsInStock': 0,
'Discontinued': true
},
{
"CategoryName": "Produce",
'ProductID': 54,
'ProductName': 'Tourtière',
'SupplierID': 25,
'QuantityPerUnit': '16 pies',
'UnitPrice': 7.45,
'UnitsInStock': 21,
'Discontinued': true
},
{
"CategoryName": "Produce",
'ProductID': 55,
'ProductName': 'Pâté chinois',
'SupplierID': 25,
'QuantityPerUnit': '24 boxes x 2 pies',
'UnitPrice': 24.00,
'UnitsInStock': 115,
'Discontinued': true
},
{
"CategoryName": "Produce",
'ProductName': 'Gnocchi di nonna Alice',
'SupplierID': 26,
'QuantityPerUnit': '24 - 250 g pkgs.',
'UnitPrice': 38.00,
'UnitsInStock': 21,
'Discontinued': false
},
{
"CategoryName": "Produce",
'ProductName': 'Ravioli Angelo',
'SupplierID': 26,
'QuantityPerUnit': '24 - 250 g pkgs.',
'UnitPrice': 19.50,
'UnitsInStock': 36,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 58,
'ProductName': 'Escargots de Bourgogne',
'SupplierID': 27,
'QuantityPerUnit': '24 pieces',
'UnitPrice': 13.25,
'UnitsInStock': 62,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 59,
'ProductName': 'Raclette Courdavault',
'SupplierID': 28,
'QuantityPerUnit': '5 kg pkg.',
'UnitPrice': 55.00,
'UnitsInStock': 79,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 60,
'ProductName': 'Camembert Pierrot',
'SupplierID': 28,
'QuantityPerUnit': '15 - 300 g rounds',
'UnitPrice': 34.00,
'UnitsInStock': 19,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 61,
'ProductName': 'Sirop d\'érable',
'SupplierID': 29,
'QuantityPerUnit': '24 - 500 ml bottles',
'UnitPrice': 28.50,
'UnitsInStock': 113,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 62,
'ProductName': 'Tarte au sucre',
'SupplierID': 29,
'QuantityPerUnit': '48 pies',
'UnitPrice': 49.30,
'UnitsInStock': 17,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 63,
'ProductName': 'Vegie-spread',
'SupplierID': 7,
'QuantityPerUnit': '15 - 625 g jars',
'UnitPrice': 43.90,
'UnitsInStock': 24,
'Discontinued': true
},
{
"CategoryName": "Seafood",
'ProductID': 64,
'ProductName': 'Wimmers gute Semmelknödel',
'SupplierID': 12,
'QuantityPerUnit': '20 bags x 4 pieces',
'UnitPrice': 33.25,
'UnitsInStock': 22,
'Discontinued': true
},
{
"CategoryName": "Seafood",
'ProductID': 65,
'ProductName': 'Louisiana Fiery Hot Pepper Sauce',
'SupplierID': 2,
'QuantityPerUnit': '32 - 8 oz bottles',
'UnitPrice': 21.05,
'UnitsInStock': 76,
'Discontinued': true
},
{
"CategoryName": "Seafood",
'ProductID': 66,
'ProductName': 'Louisiana Hot Spiced Okra',
'SupplierID': 2,
'QuantityPerUnit': '24 - 8 oz jars',
'UnitPrice': 17.00,
'UnitsInStock': 4,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 67,
'ProductName': 'Laughing Lumberjack Lager',
'SupplierID': 16,
'QuantityPerUnit': '24 - 12 oz bottles',
'UnitPrice': 14.00,
'UnitsInStock': 52,
'Discontinued': false
},
"CategoryName": "Seafood",
'ProductID': 68,
'ProductName': 'Scottish Longbreads',
'SupplierID': 8,
'QuantityPerUnit': '10 boxes x 8 pieces',
'UnitPrice': 12.50,
'UnitsInStock': 6,
'Discontinued': false
},
{
"CategoryName": "Seafood",
'ProductID': 69,
'ProductName': 'Gudbrandsdalsost',
'SupplierID': 15,
'QuantityPerUnit': '10 kg pkg.',
'UnitPrice': 36.00,
'UnitsInStock': 26,
'Discontinued': false
}
];
* You can set searchSettings.ignoreAccent property along with other search settings such as fields,
operator, and ignoreCase to achieve the desired search behavior.
* This feature works only for the characters that are not in the ASCII range.
* This feature may have a slight impact on search performance.
Highlight the search text
The Syncfusion Grid component allows you to visually highlight search results within the displayed data.
This feature helps you to quickly identify where the search items are found within the displayed data. By
adding a style to the matched text, you can quickly identify where the search items are present in the
grid.
To achieve search text highlighting in the Grid, you can utilize the queryCellInfo event. This event is
triggered for each cell during the Grid rendering process, allowing you to customize the cell content
based on your requirements.
The following example demonstrates how to highlight search text in grid using the queryCellInfo event.
The queryCellInfo event checks if the current cell is in the desired search column, retrieves the cell
value, search keyword and uses the includes method to check if the cell value contains the search
keyword. If it does, the matched text is replaced with the same text wrapped in a span tag with a
customcss class. You can then use CSS to define the customcss class and style to easily identify where
the search keywords are present in the grid.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Search } from
'@syncfusion/ej2-react-grids';
import { Inject, Toolbar } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let key = '';
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent,
QueryCellInfoEventArgs, Search, SearchEventArgs } from '@syncfusion/ej2-
react-grids';
import { Inject, Toolbar } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let key: string = '';
const actionBegin = (args: SearchEventArgs) => {
if (args.requestType === 'searching') {
key = args.searchString.toLowerCase();
}
}
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
APP.TSX
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
You can also clear the searched records by using the clear icon within the search input field.
See also
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page,
PageSettingsModel } from '@syncfusion/ej2-react-grids';
import React, { useState } from 'react';
import { data } from './datasource';
import { TextBoxComponent } from '@syncfusion/ej2-react-inputs';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
function App() {
const [pageSettings, setPageSettings] = useState<PageSettingsModel>();
let textbox: TextBoxComponent | null;
const click = () => {
const pageSize: PageSettingsModel = { pageSize: (textbox as
TextBoxComponent).value };
setPageSettings(pageSize);
}
return (<div>
<label style={{ padding: "30px 17px 0 0" }}>Enter page size:</label>
<TextBoxComponent ref={t => textbox = t} width={120}></TextBoxComponent>
<ButtonComponent onClick={click}>Click button</ButtonComponent>
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
The following example demonstrates how to change the page count of a Grid using an external button
click based on TextBox input.
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page }
from '@syncfusion/ej2-react-grids';
import React, { useState } from 'react';
import { data } from './datasource';
import { TextBoxComponent } from '@syncfusion/ej2-react-inputs';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
function App() {
const [pageSettings, setPageSettings] = useState();
let textbox;
const click = () => {
const pageCount = { pageCount: textbox.value };
setPageSettings(pageCount);
}
return (<div>
<label style={{ padding: "30px 17px 0 0" }}>Enter page count:</label>
<TextBoxComponent ref={t => textbox = t} width={120}></TextBoxComponent>
<ButtonComponent onClick={click}>Click button</ButtonComponent>
<GridComponent dataSource={data} height={265} allowPaging={true}
pageSettings={pageSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" isPrimaryKey={true} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='140' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C" textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='150'
/>
<ColumnDirective field='Verified' headerText='Verified' width='150'
displayAsCheckBox={true} />
</ColumnsDirective>
<Inject services={[Page]} />
</GridComponent></div>)
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page,
PageSettingsModel } from '@syncfusion/ej2-react-grids';
import React, { useState } from 'react';
import { data } from './datasource';
import { TextBoxComponent } from '@syncfusion/ej2-react-inputs';
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
function App() {
const [pageSettings, setPageSettings] = useState<PageSettingsModel>();
let textbox: TextBoxComponent | null;
const click = () => {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page,
PageSettingsModel } from '@syncfusion/ej2-react-grids';
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
import { ChangeEventArgs, SwitchComponent } from '@syncfusion/ej2-react-
buttons';
function App() {
let grid: GridComponent | null;
const toggleQueryString = (args: ChangeEventArgs) => {
(grid as GridComponent).pageSettings.enableQueryString = args.checked;
}
return (<div>
<label style={{ padding: "30px 17px 0 0" }}>Enable/Disable Query
String</label>
<SwitchComponent change={toggleQueryString}></SwitchComponent>
<GridComponent dataSource={data} height={265} ref={g => grid = g}
allowPaging={true} >
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" isPrimaryKey={true} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='140' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C" textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='150'
/>
<ColumnDirective field='Verified' headerText='Verified' width='150'
displayAsCheckBox={true} />
</ColumnsDirective>
<Inject services={[Page]} />
</GridComponent></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', EmployeeID: 8, OrderDate: new
Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
Pager template
The pager template in Syncfusion Grid allows you to customize the appearance and behavior of the
pager element, which is used for navigation through different pages of grid data. This feature is
particularly useful when you want to use custom elements inside the pager instead of the default
elements.
To use the pager template, you need to specify the pagerTemplate property in your Syncfusion Grid
configuration. The pagerTemplate property allows you to define a custom template for the pager.
Within the template, you can access the currentPage, pageSize, pageCount, totalPage and
totalRecordCount values.
The following example demonstrates how to render a NumericTextBox component in the pager using
the pagerTemplate property:
APP.JSX
import { NumericTextBoxComponent } from "@syncfusion/ej2-react-inputs";
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { GridComponent, Inject, Page } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const change = (args) => {
grid.pageSettings.currentPage = args.value;
};
const template = (pagerData) => {
return (<div className="e-pagertemplate">
<div className="col-lg-12 control-section">
<div className="content-wrapper">
<NumericTextBoxComponent min={1} max={3}
value={pagerData.currentPage} format='###.##'
change={change}></NumericTextBoxComponent>
</div>
</div>
<div id="totalPages" className="e-pagertemplatemessage" style={{
marginTop: 8, marginLeft: 30, border: "none", display: "inline-block" }}>
<span className="e-pagenomsg">
{pagerData.currentPage} of {pagerData.totalPages} pages
({pagerData.totalRecordsCount} items)
</span>
</div>
</div>);
};
return (<GridComponent dataSource={data} allowPaging={true}
pageSettings={{ template: template, pageSize: 5 }} ref={g => grid = g}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='120' textAlign="Right"/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100'/>
<ColumnDirective field='ShipCity' headerText='Ship City'
width='100'/>
</ColumnsDirective>
<Inject services={[Page]}/>
</GridComponent>);
}
;
export default App;
APP.TSX
import { NumericTextBoxComponent } from "@syncfusion/ej2-react-inputs";
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { GridComponent, Inject, Grid, Page, PageSettingsModel } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: Grid | null;
const change = (args) => {
grid.pageSettings.currentPage = args.value;
}
const template = (pagerData) => {
return (
<div className="e-pagertemplate">
<div className="col-lg-12 control-section">
<div className="content-wrapper">
<NumericTextBoxComponent min={1} max={3}
value={pagerData.currentPage} format='###.##'
change={change}></NumericTextBoxComponent>
</div>
</div>
<div
id="totalPages"
className="e-pagertemplatemessage" style={{ marginTop: 8,
marginLeft: 30, border: "none", display: "inline-block"}}>
<span className="e-pagenomsg">
{pagerData.currentPage} of {pagerData.totalPages} pages
({pagerData.totalRecordsCount} items)
</span>
</div>
</div>
);
}
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
APP.TSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { GridComponent, Inject, Page, PageSettingsModel } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageOptions: PageSettingsModel = {
pageSize: 8, pageSizes: true
};
return (<GridComponent dataSource={data} allowPaging={true} height={268}
pageSettings={pageOptions}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='120' textAlign="Right"/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100'/>
<ColumnDirective field='ShipCity' headerText='Ship City'
width='100'/>
</ColumnsDirective>
<Inject services={[Page]}/>
</GridComponent>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
If the pageSizes property is set to a boolean value like 'true' or 'false,' the page size dropdown defaults
to an array of strings containing options such as ['All', '5', '10', '15', '20'].
Customize page size dropdown
The Syncfusion Grid allows you to customize the default values of the page size dropdown in the pager,
allowing you to change the number of records displayed per page. To achieve this, you can define the
pageSizes property as an array of string instead of boolean value.
The following example demonstrate how to customize the default values of the pager dropdown using
the pageSizes property:
APP.JSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { GridComponent, Inject, Page } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageOptions = {
pageSizes: ['5', '10', '15', '20', 'All']
};
return (<GridComponent dataSource={data} allowPaging={true} height={268}
pageSettings={pageOptions}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='120' textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='100' />
</ColumnsDirective>
<Inject services={[Page]} />
</GridComponent>);
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { GridComponent, Inject, Page, PageSettingsModel } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageOptions: PageSettingsModel = {
pageSizes: ['5', '10', '15', '20', 'All']
};
return (<GridComponent dataSource={data} allowPaging={true} height={268}
pageSettings={pageOptions}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='100' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100' />
</ColumnsDirective>
<Inject services={[Page]} />
</GridComponent>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', EmployeeID: 8, OrderDate: new
Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
The pageSizes property can be configured with either an array of strings or a boolean value.
APP.TSX
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
OrderID: 10262, CustomerID: 'RATTC', EmployeeID: 8, OrderDate: new
Date(8379738e5),
ShipName: 'Rattlesnake Canyon Grocery', ShipCity: 'Albuquerque',
ShipAddress: '2817 Milton Dr.',
ShipRegion: 'NM', ShipPostalCode: '87110', ShipCountry: 'USA',
Freight: 48.29, Verified: !0
}
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Page,
PageSettingsModel } from '@syncfusion/ej2-react-grids';
import React, { useState } from 'react';
import { data } from './datasource';
import { NumericTextBoxComponent, ChangeEventArgs } from '@syncfusion/ej2-
react-inputs';
function App() {
let grid: GridComponent | null;
const [pageSize, setPageSize] = useState<PageSettingsModel>()
const calculatePageSize = ({ value }: ChangeEventArgs) => {
const newValue: PageSettingsModel = { pageSize: (grid as
GridComponent).calculatePageSizeByParentHeight((value as number).toString())
};
setPageSize(newValue);
}
return (<div>
<label style={{ padding: "30px 17px 0 0" }}>Select page size:</label>
<NumericTextBoxComponent placeholder='select container height'
format='####.##' min={150} step={50} width={200}
change={calculatePageSize}></NumericTextBoxComponent>
<GridComponent dataSource={data} ref={g => grid = g} allowPaging={true}
pageSettings={pageSize}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" isPrimaryKey={true} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='140' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C" textAlign="Right" />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
function App() {
let gridInstance;
let initialGridLoad = true;
const pageOptions = {
pageSize: 8, pageSizes: true
};
const dataBound = () => {
if (initialGridLoad && gridInstance) {
initialGridLoad = false;
const pager = document.getElementsByClassName('e-gridpager');
let topElement = document.getElementsByClassName('e-gridheader');
gridInstance.element.insertBefore(pager[0], topElement[0]);
}
};
return (<GridComponent dataSource={data} ref={grid => gridInstance =
grid} toolbar={toolbarOptions} allowPaging={true} height={268}
pageSettings={pageOptions} dataBound={dataBound}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='120' textAlign="Right"/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150'/>
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150'/>
<ColumnDirective field='ShipName' headerText='Ship Name'
width='150'/>
</ColumnsDirective>
<Inject services={[Page, Toolbar]}/>
</GridComponent>);
}
;
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective } from '@syncfusion/ej2-react-
grids';
import { Grid, GridComponent, Inject, Page, PageSettingsModel } from
'@syncfusion/ej2-react-grids'
import * as React from 'react';
import { data } from './datasource';
function App() {
let gridInstance: Grid | null;
let initialGridLoad: boolean = true;
const pageOptions: PageSettingsModel = {
pageSize: 8, pageSizes: true
};
const dataBound = () => {
if (initialGridLoad && gridInstance) {
initialGridLoad = false;
const pager = document.getElementsByClassName('e-gridpager');
let topElement = document.getElementsByClassName('e-gridheader');
gridInstance.element.insertBefore(pager[0], topElement[0]);
}
}
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
During the paging action, the pager component triggers the below three events.
* The created event triggers when Pager is created.
* The click event triggers when the numeric items in the pager is clicked.
* The dropDownChanged event triggers when pageSize DropDownList value is selected.
Pager events
The Syncfusion Grid component triggers two pager events during paging actions:
actionBegin- This event triggered before any paging action (such as changing the page, changing the
page size and etc) is initiated. You can use this event to customize or control the behavior of paging
actions.
actionComplete- This event triggered after a pager action is completed. It provides information about
the action, such as the new page number, page size, and the total number of records. You can use this
event to perform actions or update the UI after the operation has been executed.
The following example that example demonstrates how to use these events to display notification
messages to indicate the current and next page during paging actions in the Syncfusion React Grid:
APP.JSX
import { ColumnDirective, ColumnsDirective, Grid, GridComponent, Inject,
Page, PageEventArgs, PageSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings = { pageSize: 5 };
const [currentMessage, setCurrentMessage] = React.useState('');
const [nextMessage, setNextMessage] = React.useState('');
const actionBegin = (args) => {
if (args.requestType === 'paging') {
const pageMessage = (args.currentPage) > (args.previousPage)
? `You are going to switch to page
${parseInt((args.currentPage), 10) + 1}`
: `You are going to switch to page ${args.previousPage}`;
setNextMessage(pageMessage);
}
}
const actionComplete = (args) => {
if (args.requestType === 'paging') {
setCurrentMessage('Now you are in page ' + args.currentPage);
}
}
return (<div>
<p id='message1' className='message'>{currentMessage}</p>
<p id='message2' className='message'>{nextMessage}</p>
<GridComponent dataSource={data} allowPaging={true}
pageSettings={pageSettings} actionBegin={actionBegin}
actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='120' textAlign="Right" isPrimaryKey={true} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='140' />
<ColumnDirective field='Freight' headerText='Freight'
width='120' format="C" textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship
Country' width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150' />
<ColumnDirective field='Verified' headerText='Verified'
width='150' displayAsCheckBox={true} />
</ColumnsDirective>
<Inject services={[Page]} />
</GridComponent></div>)
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, Grid, GridComponent, Inject,
Page, PageEventArgs, PageSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const pageSettings: PageSettingsModel = { pageSize: 5 };
const [currentMessage, setCurrentMessage] = React.useState('');
const [nextMessage, setNextMessage] = React.useState('');
const actionBegin = (args: PageEventArgs) => {
if (args.requestType === 'paging') {
const pageMessage = (args.currentPage as string) > (args.previousPage
as string)
? `You are going to switch to page ${parseInt((args.currentPage as
string), 10) + 1}`
: `You are going to switch to page ${args.previousPage}`;
setNextMessage(pageMessage);
}
}
const actionComplete = (args: PageEventArgs) => {
if (args.requestType === 'paging') {
setCurrentMessage('Now you are in page ' + args.currentPage);
}
}
return (<div>
<p id='message1' className='message'>{currentMessage}</p>
<p id='message2' className='message'>{nextMessage}</p>
<GridComponent dataSource={data} allowPaging={true}
pageSettings={pageSettings} actionBegin={actionBegin}
actionComplete={actionComplete}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" isPrimaryKey={true} />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='140' />
<ColumnDirective field='Freight' headerText='Freight' width='120'
format="C" textAlign="Right" />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='150'
/>
<ColumnDirective field='Verified' headerText='Verified' width='150'
displayAsCheckBox={true} />
</ColumnsDirective>
<Inject services={[Page]} />
</GridComponent></div>)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
See also
• Single - The Single value is set by default. Allows you to select only a single row or cell or
column.
• Multiple - Allows you to select multiple rows or cells or columns.
To perform the multi-selection, press and hold CTRL key and click the desired rows or cells or columns.
To select range of rows or cells or columns, press and hold the SHIFT key and click the rows or cells or
columns.
APP.JSX
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const dropdownData = [
{ text: 'Single', value: 'Single' },
{ text: 'Multiple', value: 'Multiple' }
];
const valueChange = (args) => {
grid.selectionSettings.type = args.value;
}
return (<div>
<label style={{ padding: "30px 17px 0 0" }}>Choose selection
type:</label>
<DropDownListComponent index={0} width={150} dataSource={dropdownData}
change={valueChange}></DropDownListComponent>
<GridComponent ref={g => grid = g} dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
/>
<ColumnDirective field='ShipName' headerText='Ship Name' width='150'
/>
</ColumnsDirective>
</GridComponent></div>)
};
export default App;
APP.TSX
import { ChangeEventArgs, DropDownListComponent } from '@syncfusion/ej2-
react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const dropdownData: { [key: string]: Object; }[] = [
{ text: 'Single', value: 'Single' },
{ text: 'Multiple', value: 'Multiple' }
];
const valueChange = (args: ChangeEventArgs) => {
(grid as GridComponent).selectionSettings.type = args.value;
}
return (<div>
<label style={{ padding: "30px 17px 0 0" }}>Choose selection
type:</label>
<DropDownListComponent index={0} width={150} dataSource={dropdownData}
change={valueChange}></DropDownListComponent>
<GridComponent ref={g => grid = g} dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
By default, the Grid will be rendered with only the basic features such as Grid rendering and selection.
The default module, including the Selection, is automatically loaded. Therefore, there is no need to
inject the Selection module separately as it will be injected by default.
Selection mode
The selection mode feature allows you to choose between different modes for selecting rows or cells or
both within the Grid based on your specific requirements. This feature is particularly useful when you
want to highlight and manipulate specific rows or cells in the Grid.
To enable selection mode, you can set the selectionSettings.mode property. The Grid component
supports three types of selection modes:
• Row - The row value is set by default. Allows you to select rows only.
• Cell - Allows you to select cells only.
• Both - Allows you to select rows and cells at the same time.
The following example, demonstrates how to dynamically enable and change the
selectionSettings.mode using the DropDownList component:
APP.JSX
import { ChangeEventArgs, DropDownListComponent } from '@syncfusion/ej2-
react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid;
const dropdownData = [
{ text: 'Row', value: 'Row' },
{ text: 'Cell', value: 'Cell' },
{ text: 'Both', value: 'Both' }
];
const valueChange = (args) => {
grid.selectionSettings.mode = args.value;
}
return (<div>
<label style={{ padding: "30px 17px 0 0" }}>Choose selection
mode:</label>
<DropDownListComponent index={0} width={150} dataSource={dropdownData}
change={valueChange}></DropDownListComponent>
<GridComponent ref={g => grid = g} dataSource={data} height={315}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
/>
<ColumnDirective field='ShipName' headerText='Ship Name' width='150'
/>
</ColumnsDirective>
</GridComponent></div>)
};
export default App;
APP.TSX
import { ChangeEventArgs, DropDownListComponent } from '@syncfusion/ej2-
react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const dropdownData: { [key: string]: Object; }[] = [
{ text: 'Row', value: 'Row' },
{ text: 'Cell', value: 'Cell' },
{ text: 'Both', value: 'Both' }
];
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
Touch interaction
The touch interaction feature in Grid allows you to easily interact with the grid on touch screen devices.
This feature is particularly useful for improving the user experience on mobile devices and tablets,
making it easier to navigate and interact with the grid's content using touch gestures.
Single Row Selection
When you tap on a grid row using a touch screen, the tapped row is automatically selected. This
provides a straightforward way to select single rows with a touch interface.
Multi-Row Selection
To select multiple rows in the grid, you can utilize the multi-row selection feature. When you tap on a
row, a popup is displayed, indicating the option for multi-row selection. You can tap on the popup, and
then proceed to tap on the desired rows that you want to select. This allows you to select and interact
with multiple rows simultaneously, as shown in the following image:
Toggle selection
The toggle selection feature in the Grid component allows you to easily select and unselect specific
rows, cells, or columns. With toggle selection enabled, you can easily switch the selection state of an
item by clicking on it. This means that if you click on a selected row, cell, or column, it will become
unselected, and vice versa.
To enable the toggle selection feature, you need to set the selectionSettings.enableToggle property to
true.
The following example demonstrates how to enable the toggle selection for both cells and rows in a Grid
using the selectionSettings.enableToggle property.
APP.JSX
import { DropDownListComponent } from '@syncfusion/ej2-react-dropdowns';
import { SwitchComponent } from '@syncfusion/ej2-react-buttons'
import { ColumnDirective, ColumnsDirective, GridComponent,
SelectionSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
APP.TSX
import { ChangeEventArgs, DropDownListComponent } from '@syncfusion/ej2-
react-dropdowns';
import { SwitchComponent } from '@syncfusion/ej2-react-buttons'
import { ColumnDirective, ColumnsDirective, GridComponent,
SelectionSettingsModel } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const selectionSettings: SelectionSettingsModel = { type: 'Multiple' };
const dropdownData: { [key: string]: Object; }[] = [
{ text: 'Row', value: 'Row' },
{ text: 'Cell', value: 'Cell' },
{ text: 'Both', value: 'Both' }
];
const valueChange = (args: ChangeEventArgs) => {
(grid as GridComponent).selectionSettings.mode = args.value;
}
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
* If multi selection is enabled, then first click on any selected row (without pressing Ctrl key), it will clear
the multi selection and in second click on the same row, it will be unselected.
* Toggle selection is a feature that can be applied to all types of selections. When the checkboxOnly
property is set to true, it restricts the ability to select or deselect rows or cells by clicking on them.
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons'
import { ColumnDirective, ColumnsDirective, GridComponent, Page,
PageSettingsModel, SelectionSettingsModel, Inject } from '@syncfusion/ej2-
react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
let grid: GridComponent | null;
const selectionSettings: SelectionSettingsModel = { mode: 'Both',
allowColumnSelection: true, type: 'Multiple' };
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
In Both mode, if you call clearCellSelection first, it will clear cell selections, and then if you call
clearRowSelection, it will clear row selections. The order of method calls determines which type of
selection is cleared first.
To remove a specific selection in a row, cell, or column, utilize the following methods: clearRowSelection
for clearing row selections, clearCellSelection for clearing cell selections, and clearColumnSelection for
clearing column selections.
Persist selection
Persist selection feature in the Grid allows you to retain the selected items even after data manipulation
or refreshing the grid. This feature is useful when you want to keep track of the selected items across
different grid operations.
To enable persist selection, set the selectionSettings.persistSelection property to true.
* While using persist selection feature, at least one column in your grid should be enabled as a primary
key. This ensures that the grid can identify and persist the selected items correctly.
* The persistSelection feature is not supported for cell selections in the Syncfusion React Grid
component
In the following example, it demonstrates how to enable the persist selection feature for both rows and
columns using the selectionSettings.persistSelection property :
APP.JSX
import { ColumnDirective, ColumnsDirective, GridComponent, Page, Inject }
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const selectionSettings = { mode: 'Both', allowColumnSelection: true, type:
'Multiple', persistSelection: true };
const pageOptions = { pageSize: 5 };
return (<div>
<GridComponent dataSource={data} selectionSettings={selectionSettings}
allowPaging={true} pageSettings={pageOptions}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='100'
/>
<ColumnDirective field='ShipName' headerText='Ship Name' width='150'
/>
</ColumnsDirective>
<Inject services={[Page]} />
</GridComponent></div>)
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Page,
PageSettingsModel, SelectionSettingsModel, Inject } from '@syncfusion/ej2-
react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
• footerTemplate: Use this property to display the aggregate value in the footer cell. You can
define a custom template to format the aggregate value as per your requirements.
• groupFooterTemplate: Use this property to display the aggregate value in the group footer
cell. Similar to the footerTemplate, you can provide a custom template to format the
aggregate value.
• groupCaptionTemplate: Use this property to display the aggregate value in the group caption
cell. You can define a custom template to format the aggregate value.
APP.JSX
import { AggregateColumnDirective, ColumnDirective, ColumnsDirective,
GridComponent, Inject } from '@syncfusion/ej2-react-grids';
import { AggregateColumnsDirective, AggregateDirective, AggregatesDirective }
from '@syncfusion/ej2-react-grids';
import { Aggregate, Group, Page } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const groupOptions = {
columns: ['ShipCountry'],
showDropArea: false
};
const footerSum = (props) => {
return (<span>Sum: {props.Sum}</span>);
};
const footerMax = (props) => {
return (<span>Max: {props.Max}</span>);
};
return (<GridComponent dataSource={data} allowPaging={true}
allowGrouping={true} groupSettings={groupOptions} height={268}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='OrderDate' headerText='OrderDate' format='yMd'
width='150' />
<ColumnDirective field='Freight' headerText='Freight' format='C2'
textAlign='Right' width='150' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
</ColumnsDirective>
<AggregatesDirective>
<AggregateDirective>
<AggregateColumnsDirective>
<AggregateColumnDirective field='Freight' type='Sum' format='C2'
groupFooterTemplate={footerSum} />
</AggregateColumnsDirective>
</AggregateDirective>
<AggregateDirective>
<AggregateColumnsDirective>
<AggregateColumnDirective field='Freight' type='Max' format='C2'
groupCaptionTemplate={footerMax} />
</AggregateColumnsDirective>
</AggregateDirective>
</AggregatesDirective>
<Inject services={[Page, Aggregate, Group]} />
</GridComponent>);
}
export default App;
APP.TSX
import { AggregateColumnDirective, ColumnDirective, ColumnsDirective,
GridComponent, Inject } from '@syncfusion/ej2-react-grids';
import { AggregateColumnsDirective, AggregateDirective, AggregatesDirective }
from '@syncfusion/ej2-react-grids';
import { Aggregate, Group, GroupSettingsModel, Page } from '@syncfusion/ej2-
react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const groupOptions: GroupSettingsModel = {
columns: ['ShipCountry'],
showDropArea: false
};
const footerSum = (props) => {
return (<span>Sum: {props.Sum}</span>)
}
const footerMax = (props) => {
return (<span>Max: {props.Max}</span>)
}
return (<GridComponent dataSource={data} allowPaging={true}
allowGrouping={true}
groupSettings={groupOptions} height={268}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='OrderDate' headerText='OrderDate' format='yMd'
width='150' />
<ColumnDirective field='Freight' headerText='Freight' format='C2'
textAlign='Right' width='150' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
</ColumnsDirective>
<AggregatesDirective>
<AggregateDirective>
<AggregateColumnsDirective>
<AggregateColumnDirective field='Freight' type='Sum' format='C2'
groupFooterTemplate={footerSum} />
</AggregateColumnsDirective>
</AggregateDirective>
<AggregateDirective>
<AggregateColumnsDirective>
<AggregateColumnDirective field='Freight' type='Max' format='C2'
groupCaptionTemplate={footerMax} />
</AggregateColumnsDirective>
</AggregateDirective>
</AggregatesDirective>
<Inject services={[Page, Aggregate, Group]} />
</GridComponent>)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
* When using local data, the total summary is calculated based on the entire dataset available in the
grid. The aggregate values will reflect calculations across all the rows in the grid.
* When working with remote data, the total summary is calculated based on the current page records.
This means that if you have enabled pagination and are displaying data in pages, the aggregate values in
the footer will represent calculations only for the visible page.
Built-in aggregate types
The Syncfusion React Grid component provides several built-in aggregate types that can be specified in
the type property to configure an aggregate column.
The available built-in aggregate types are:
Here is an example that demonstrates how to use built-in aggregates types in the Syncfusion Grid:
APP.JSX
import { AggregateColumnDirective, ColumnDirective, ColumnsDirective,
GridComponent, Group, Inject } from '@syncfusion/ej2-react-grids';
import { AggregateColumnsDirective, AggregateDirective, AggregatesDirective }
from '@syncfusion/ej2-react-grids';
import { Aggregate } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const groupSettings = { showDropArea: false, columns: ['ShipCountry'] };
const freightTemplate = (props) => {
return (<span>Max: {props.Max}</span>)
}
const shippedDateTemplate = (props) => {
return (<span>Max: {(new Date(props.Max)).toLocaleDateString()}</span>)
}
const orderDateTemplate = (props) => {
return (<span>Min:{(new Date(props.Min)).toLocaleDateString()}</span>)
}
const verifiedTemplate = (props) => {
return (<span>TrueCount: {props.TrueCount}</span>)
}
return (<GridComponent dataSource={data} height={315} allowGrouping={true}
groupSettings={groupSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='OrderDate' headerText='Order Date' type='date'
width='150' format='yMd' />
<ColumnDirective field='ShippedDate' headerText='ShippedDate'
type='date' width='150' format='yMd' />
<ColumnDirective field='Freight' headerText='Freight' width='150'
format='C2' />
<ColumnDirective field='isVerified' headerText='Verified' width='150'
type='boolean' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='150' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
</ColumnsDirective>
<AggregatesDirective>
<AggregateDirective>
<AggregateColumnsDirective>
<AggregateColumnDirective field='Freight' type='Max' format='C2'
footerTemplate={freightTemplate} />
<AggregateColumnDirective field='ShippedDate' type='Max'
footerTemplate={shippedDateTemplate} />
APP.TSX
import { AggregateColumnDirective, ColumnDirective, ColumnsDirective,
GridComponent, Group, GroupSettingsModel, Inject } from '@syncfusion/ej2-
react-grids';
import { AggregateColumnsDirective, AggregateDirective, AggregatesDirective }
from '@syncfusion/ej2-react-grids';
import { Aggregate } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const groupSettings: GroupSettingsModel = { showDropArea: false, columns:
['ShipCountry'] };
const freightTemplate = (props) => {
return (<span>Max: {props.Max}</span>)
}
const shippedDateTemplate = (props) => {
return (<span>Max: {(new Date(props.Max)).toLocaleDateString()}</span>)
}
const orderDateTemplate = (props) => {
return (<span>Min:{(new Date(props.Min)).toLocaleDateString()}</span>)
}
const verifiedTemplate = (props) => {
return (<span>TrueCount: {props.TrueCount}</span>)
}
return (<GridComponent dataSource={data} height={315} allowGrouping={true}
groupSettings={groupSettings}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='OrderDate' headerText='Order Date' type='date'
width='150' format='yMd' />
<ColumnDirective field='ShippedDate' headerText='ShippedDate'
type='date' width='150' format='yMd' />
<ColumnDirective field='Freight' headerText='Freight' width='150'
format='C2' />
<ColumnDirective field='isVerified' headerText='Verified' width='150'
type='boolean' />
<ColumnDirective field='ShipCity' headerText='Ship City' width='150' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
</ColumnsDirective>
<AggregatesDirective>
<AggregateDirective>
<AggregateColumnsDirective>
<AggregateColumnDirective field='Freight' type='Max' format='C2'
footerTemplate={freightTemplate} />
<AggregateColumnDirective field='ShippedDate' type='Max'
footerTemplate={shippedDateTemplate} />
<AggregateColumnDirective field='OrderDate' type='Min'
footerTemplate={orderDateTemplate} />
<AggregateColumnDirective field='isVerified' type='TrueCount'
footerTemplate={verifiedTemplate} />
</AggregateColumnsDirective>
</AggregateDirective>
</AggregatesDirective>
<Inject services={[Aggregate, Group]} />
</GridComponent>)
}
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248,
CustomerID: 'VINET',
OrderDate: '1996-07-04T00:00:00.000Z',
ShippedDate: '1996-07-16T00:00:00.000Z',
Freight: 32.38,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: "59 rue de l'Abbaye",
ShipCity: 'Reims',
ShipRegion: null,
isVerified:true,
ShipCountry: 'France',
},
{
OrderID: 10249,
CustomerID: 'TOMSP',
OrderDate: '1996-07-05T00:00:00.000Z',
ShippedDate: '1996-07-10T00:00:00.000Z',
Freight: 11.61,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
isVerified:false,
ShipCountry: 'Germany',
},
{
OrderID: 10250,
CustomerID: 'HANAR',
OrderDate: '1996-07-08T00:00:00.000Z',
ShippedDate: '1996-07-12T00:00:00.000Z',
Freight: 65.83,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
{
OrderID: 10255,
CustomerID: 'RICSU',
OrderDate: '1996-07-12T00:00:00.000Z',
ShippedDate: '1996-07-15T00:00:00.000Z',
Freight: 148.33,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
isVerified:true,
ShipCountry: 'Switzerland',
},
{
OrderID: 10256,
CustomerID: 'WELLI',
OrderDate: '1996-07-15T00:00:00.000Z',
ShippedDate: '1996-07-17T00:00:00.000Z',
Freight: 13.97,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
isVerified:true,
ShipCountry: 'Brazil',
},
{
OrderID: 10257,
CustomerID: 'HILAA',
OrderDate: '1996-07-16T00:00:00.000Z',
ShippedDate: '1996-07-22T00:00:00.000Z',
Freight: 81.91,
isVerified:true,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10258,
CustomerID: 'ERNSH',
OrderDate: '1996-07-17T00:00:00.000Z',
ShippedDate: '1996-07-23T00:00:00.000Z',
Freight: 140.51,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
isVerified:false,
ShipCountry: 'Austria',
},
{
OrderID: 10259,
CustomerID: 'CENTC',
OrderDate: '1996-07-18T00:00:00.000Z',
ShippedDate: '1996-07-25T00:00:00.000Z',
Freight: 3.25,
ShipName: 'Centro comercial Moctezuma',
ShipAddress: 'Sierras de Granada 9993',
ShipCity: 'México D.F.',
ShipRegion: null,
isVerified:true,
ShipCountry: 'Mexico',
},
{
OrderID: 10260,
CustomerID: 'OTTIK',
OrderDate: '1996-07-19T00:00:00.000Z',
ShippedDate: '1996-07-29T00:00:00.000Z',
Freight: 55.09,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
isVerified:false,
ShipCountry: 'Germany',
},
{
OrderID: 10261,
CustomerID: 'QUEDE',
OrderDate: '1996-07-19T00:00:00.000Z',
ShippedDate: '1996-07-30T00:00:00.000Z',
Freight: 3.05,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
isVerified:true,
ShipCountry: 'Brazil',
},
{
OrderID: 10262,
CustomerID: 'RATTC',
OrderDate: '1996-07-22T00:00:00.000Z',
ShippedDate: '1996-07-25T00:00:00.000Z',
Freight: 48.29,
isVerified:true,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
];
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248,
CustomerID: 'VINET',
OrderDate: '1996-07-04T00:00:00.000Z',
ShippedDate: '1996-07-16T00:00:00.000Z',
Freight: 32.38,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: "59 rue de l'Abbaye",
ShipCity: 'Reims',
ShipRegion: null,
isVerified:true,
ShipCountry: 'France',
},
{
OrderID: 10249,
CustomerID: 'TOMSP',
OrderDate: '1996-07-05T00:00:00.000Z',
ShippedDate: '1996-07-10T00:00:00.000Z',
Freight: 11.61,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
isVerified:false,
ShipCountry: 'Germany',
},
{
OrderID: 10250,
CustomerID: 'HANAR',
OrderDate: '1996-07-08T00:00:00.000Z',
ShippedDate: '1996-07-12T00:00:00.000Z',
Freight: 65.83,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
isVerified:true,
ShipCountry: 'Brazil',
},
{
OrderID: 10251,
CustomerID: 'VICTE',
OrderDate: '1996-07-08T00:00:00.000Z',
ShippedDate: '1996-07-15T00:00:00.000Z',
Freight: 41.34,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
isVerified:true,
ShipCountry: 'France',
},
{
OrderID: 10252,
CustomerID: 'SUPRD',
OrderDate: '1996-07-09T00:00:00.000Z',
ShippedDate: '1996-07-11T00:00:00.000Z',
Freight: 51.3,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
isVerified:true,
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10253,
CustomerID: 'HANAR',
OrderDate: '1996-07-10T00:00:00.000Z',
ShippedDate: '1996-07-16T00:00:00.000Z',
Freight: 58.17,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
isVerified:true,
ShipCountry: 'Brazil',
},
{
OrderID: 10254,
CustomerID: 'CHOPS',
OrderDate: '1996-07-11T00:00:00.000Z',
ShippedDate: '1996-07-23T00:00:00.000Z',
Freight: 22.98,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
isVerified:false,
ShipCountry: 'Switzerland',
},
{
OrderID: 10255,
CustomerID: 'RICSU',
OrderDate: '1996-07-12T00:00:00.000Z',
ShippedDate: '1996-07-15T00:00:00.000Z',
Freight: 148.33,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
isVerified:true,
ShipCountry: 'Switzerland',
},
{
OrderID: 10256,
CustomerID: 'WELLI',
OrderDate: '1996-07-15T00:00:00.000Z',
ShippedDate: '1996-07-17T00:00:00.000Z',
Freight: 13.97,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
isVerified:true,
ShipCountry: 'Brazil',
},
{
OrderID: 10257,
CustomerID: 'HILAA',
OrderDate: '1996-07-16T00:00:00.000Z',
ShippedDate: '1996-07-22T00:00:00.000Z',
Freight: 81.91,
isVerified:true,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10258,
CustomerID: 'ERNSH',
OrderDate: '1996-07-17T00:00:00.000Z',
ShippedDate: '1996-07-23T00:00:00.000Z',
Freight: 140.51,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
isVerified:false,
ShipCountry: 'Austria',
},
{
OrderID: 10259,
CustomerID: 'CENTC',
OrderDate: '1996-07-18T00:00:00.000Z',
ShippedDate: '1996-07-25T00:00:00.000Z',
Freight: 3.25,
ShipName: 'Centro comercial Moctezuma',
ShipAddress: 'Sierras de Granada 9993',
ShipCity: 'México D.F.',
ShipRegion: null,
isVerified:true,
ShipCountry: 'Mexico',
},
{
OrderID: 10260,
CustomerID: 'OTTIK',
OrderDate: '1996-07-19T00:00:00.000Z',
ShippedDate: '1996-07-29T00:00:00.000Z',
Freight: 55.09,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
isVerified:false,
ShipCountry: 'Germany',
},
{
OrderID: 10261,
CustomerID: 'QUEDE',
OrderDate: '1996-07-19T00:00:00.000Z',
ShippedDate: '1996-07-30T00:00:00.000Z',
Freight: 3.05,
},]
return (<GridComponent dataSource={data} allowPaging={true} height={315}
aggregates={aggregate}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='Freight' headerText='Freight' width='150'
format='C2' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
</ColumnsDirective>
<Inject services={[Page, Aggregate]} />
</GridComponent>)
}
export default App;
APP.TSX
import { AggregateRowModel, ColumnDirective, ColumnsDirective, GridComponent,
Inject } from '@syncfusion/ej2-react-grids';
import { Aggregate, Page } from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
const aggregate: AggregateRowModel[] = [{
columns: [
{
type: ['Sum', 'Max', 'Min'],
field: 'Freight',
columnName: 'Freight',
format: 'C2',
footerTemplate: 'Sum: ${Sum}, Min:${Min}, Max:${Max}',
},
],
},]
return (<GridComponent dataSource={data} allowPaging={true} height={315}
aggregates={aggregate}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID' width='120'
textAlign='Right' />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='Freight' headerText='Freight' width='150'
format='C2' />
<ColumnDirective field='ShipCountry' headerText='Ship Country'
width='150' />
</ColumnsDirective>
<Inject services={[Page, Aggregate]} />
</GridComponent>)
}
export default App;
DATASOURCE.JSX
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
OrderID: 10257, CustomerID: 'HILAA', EmployeeID: 4, OrderDate: new
Date(8374554e5),
ShipName: 'HILARION-Abastos', ShipCity: 'San Cristóbal', ShipAddress:
'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipRegion: 'Táchira', ShipPostalCode: '5022', ShipCountry:
'Venezuela', Freight: 81.91, Verified: !0
},
{
OrderID: 10258, CustomerID: 'ERNSH', EmployeeID: 1, OrderDate: new
Date(8375418e5),
ShipName: 'Ernst Handel', ShipCity: 'Graz', ShipAddress: 'Kirchgasse
6',
ShipRegion: 'CJ', ShipPostalCode: '8010', ShipCountry: 'Austria',
Freight: 140.51, Verified: !0
},
{
OrderID: 10259, CustomerID: 'CENTC', EmployeeID: 4, OrderDate: new
Date(8376282e5),
ShipName: 'Centro comercial Moctezuma', ShipCity: 'México D.F.',
ShipAddress: 'Sierras de Granada 9993',
ShipRegion: 'CJ', ShipPostalCode: '05022', ShipCountry: 'Mexico',
Freight: 3.25, Verified: !1
},
{
OrderID: 10260, CustomerID: 'OTTIK', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Ottilies Käseladen', ShipCity: 'Köln', ShipAddress:
'Mehrheimerstr. 369',
ShipRegion: 'CJ', ShipPostalCode: '50739', ShipCountry: 'Germany',
Freight: 55.09, Verified: !0
},
{
OrderID: 10261, CustomerID: 'QUEDE', EmployeeID: 4, OrderDate: new
Date(8377146e5),
ShipName: 'Que Delícia', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua da Panificadora, 12',
ShipRegion: 'RJ', ShipPostalCode: '02389-673', ShipCountry: 'Brazil',
Freight: 3.05, Verified: !1
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, Inject, Toolbar}
from '@syncfusion/ej2-react-grids';
import * as React from 'react';
import { data } from './datasource';
function App() {
return (<GridComponent dataSource={data} toolbar={['Print']} height={272}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='120' textAlign='Right'/>
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150'/>
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150'/>
<ColumnDirective field='ShipName' headerText='Ship Name'
width='150'/>
</ColumnsDirective>
<Inject services={[Toolbar]}/>
</GridComponent >)
};
export default App;
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
ShipName: 'Chop-suey Chinese', ShipCity: 'Bern', ShipAddress:
'Hauptstr. 31',
ShipRegion: 'CJ', ShipPostalCode: '3012', ShipCountry: 'Switzerland',
Freight: 22.98, Verified: !1
},
{
OrderID: 10255, CustomerID: 'RICSU', EmployeeID: 9, OrderDate: new
Date(8371098e5),
ShipName: 'Richter Supermarkt', ShipCity: 'Genève', ShipAddress:
'Starenweg 5',
ShipRegion: 'CJ', ShipPostalCode: '1204', ShipCountry: 'Switzerland',
Freight: 148.33, Verified: !0
},
{
OrderID: 10256, CustomerID: 'WELLI', EmployeeID: 3, OrderDate: new
Date(837369e6),
ShipName: 'Wellington Importadora', ShipCity: 'Resende', ShipAddress:
'Rua do Mercado, 12',
ShipRegion: 'SP', ShipPostalCode: '08737-363', ShipCountry: 'Brazil',
Freight: 13.97, Verified: !1
},
{
Page setup
When printing a webpage, some print options, such as layout, paper size, and margin settings, cannot be
configured through JavaScript code. Instead, you need to customize these settings using the browser's
page setup dialog. Below are links to the page setup guides for popular web browsers:
• Chrome
• Firefox
• Safari
• IE
APP.TSX
import { ButtonComponent } from '@syncfusion/ej2-react-buttons';
import { ColumnDirective, ColumnsDirective, Grid, GridComponent } from
'@syncfusion/ej2-react-grids';
import * as React from 'react';
import { employeeData } from './datasource';
function App() {
let grid: Grid | null;
const clickHandler = () => {
if (grid) {
grid.print();
}
}
return (<div>
<ButtonComponent onClick= { clickHandler }>Print</ButtonComponent>
DATASOURCE.JSX
export let employeeData = [{
'EmployeeID': 1,
'LastName': 'Davolio',
'FirstName': 'Nancy',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-664743600000),
'HireDate': new Date(704692800000),
'Address': '507 - 20th Ave. E.\r\nApt. 2A',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98122',
'Country': 'USA',
'HomePhone': '(206) 555-9857',
'Extension': '5467',
'Photo': { 'Length': 21626 },
'Notes': 'Education includes a BA in psychology from Colorado State
University in 1970. She also completed\
\'The Art of the Cold Call.\' Nancy is a member of Toastmasters
International.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 2,
'LastName': 'Fuller',
'FirstName': 'Andrew',
'Title': 'Vice President, Sales',
'TitleOfCourtesy': 'Dr.',
'BirthDate': new Date(-563828400000),
'HireDate': new Date(713764800000),
'Address': '908 W. Capital Way',
'City': 'Tacoma',
'Region': 'WA',
'PostalCode': '98401',
'Country': 'USA',
'HomePhone': '(206) 555-9482',
'Extension': '3457',
'Photo': { 'Length': 21626 },
'PhotoPath': 'http://accweb/emmployees/peacock.bmp'
},
{
'EmployeeID': 5,
'LastName': 'Buchanan',
'FirstName': 'Steven',
'Title': 'Sales Manager',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-468010800000),
'HireDate': new Date(750830400000),
'Address': '14 Garrett Hill',
'City': 'London',
'Region': null,
'PostalCode': 'SW1 8JR',
'Country': 'UK',
'HomePhone': '(71) 555-4848',
'Extension': '3453',
'Photo': { 'Length': 21626 },
'Notes': 'Steven Buchanan graduated from St. Andrews University,
Scotland, with a BSC degree in 1976. Upon joining the company as \
a sales representative in 1992, he spent 6 months in an orientation
program at the Seattle office and then returned to his permanent \
post in London. He was promoted to sales manager in March 1993. Mr.
Buchanan has completed the courses \'Successful \
Telemarketing\' and \'International Sales Management.\' He is fluent in
French.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/buchanan.bmp'
},
{
'EmployeeID': 6,
'LastName': 'Suyama',
'FirstName': 'Michael',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-205185600000),
'HireDate': new Date(750830400000),
'Address': 'Coventry House\r\nMiner Rd.',
'City': 'London',
'Region': null,
'PostalCode': 'EC2 7JR',
'Country': 'UK',
'HomePhone': '(71) 555-7773',
'Extension': '428',
'Photo': { 'Length': 21626 },
'Notes': 'Michael is a graduate of Sussex University (MA, economics,
1983) and the University of California at Los Angeles \
(MBA, marketing, 1986). He has also taken the courses \'Multi-Cultural
Selling\' and \'Time Management for the Sales Professional.\' \
He is fluent in Japanese and can read and write French, Portuguese, and
Spanish.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 7,
'LastName': 'King',
'FirstName': 'Robert',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-302731200000),
'HireDate': new Date(757486800000),
'Address': 'Edgeham Hollow\r\nWinchester Way',
'City': 'London',
'Region': null,
'PostalCode': 'RG1 9SP',
'Country': 'UK',
'HomePhone': '(71) 555-5598',
'Extension': '465',
'Photo': { 'Length': 21626 },
'Notes': 'Robert King served in the Peace Corps and traveled
extensively before completing his degree in English at the \
University of Michigan in 1992, the year he joined the company. After
completing a course entitled \'Selling in Europe,\' \
he was transferred to the London office in March 1993.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 8,
'LastName': 'Callahan',
'FirstName': 'Laura',
'Title': 'Inside Sales Coordinator',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-377982000000),
'HireDate': new Date(762843600000),
'Address': '4726 - 11th Ave. N.E.',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98105',
'Country': 'USA',
'HomePhone': '(206) 555-1189',
'Extension': '2344',
'Photo': { 'Length': 21626 },
'Notes': 'Laura received a BA in psychology from the University of
Washington. She has also completed a course in business \
French. She reads and writes French.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 9,
'LastName': 'Dodsworth',
'FirstName': 'Anne',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-123966000000),
'HireDate': new Date(784875600000),
'Address': '7 Houndstooth Rd.',
'City': 'London',
'Region': null,
'PostalCode': 'WG2 7LT',
'Country': 'UK',
'HomePhone': '(71) 555-4444',
'Extension': '452',
'Photo': { 'Length': 21626 },
'Notes': 'Anne has a BA degree in English from St. Lawrence College.
She is fluent in French and German.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
}];
DATASOURCE.TSX
export let employeeData: Object[] = [{
'EmployeeID': 1,
'LastName': 'Davolio',
'FirstName': 'Nancy',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-664743600000),
'HireDate': new Date(704692800000),
'Address': '507 - 20th Ave. E.\r\nApt. 2A',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98122',
'Country': 'USA',
'HomePhone': '(206) 555-9857',
'Extension': '5467',
'Photo': { 'Length': 21626 },
'Notes': 'Education includes a BA in psychology from Colorado State
University in 1970. She also completed\
\'The Art of the Cold Call.\' Nancy is a member of Toastmasters
International.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 2,
'LastName': 'Fuller',
'FirstName': 'Andrew',
'Title': 'Vice President, Sales',
'TitleOfCourtesy': 'Dr.',
'BirthDate': new Date(-563828400000),
'HireDate': new Date(713764800000),
'Address': '908 W. Capital Way',
'City': 'Tacoma',
'Region': 'WA',
'PostalCode': '98401',
'Country': 'USA',
'HomePhone': '(206) 555-9482',
'Extension': '3457',
'Photo': { 'Length': 21626 },
'Notes': 'Andrew received his BTS commercial in 1974 and a Ph.D. in
international marketing from the University of \
Dallas in 1981. He is fluent in French and Italian and reads German. He
joined the company as a sales representative, \
was promoted to sales manager in January 1992 and to vice president of
sales in March 1993. Andrew is a member of the \
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
}];
APP.TSX
import { ChangeEventArgs, DropDownListComponent } from '@syncfusion/ej2-
react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent, PageSettingsModel,
PrintMode } from '@syncfusion/ej2-react-grids';
import { Inject, Page, Toolbar } from '@syncfusion/ej2-react-grids';
import React, { useState } from 'react';
import { data } from './datasource';
function App() {
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
e.element.ej2_instances[0].getContent().querySelector('tbody').remove();
var tbody = createElement('tbody');
rows = [...rows];
for (var r = 0; r < rows.length; r++) {
tbody.appendChild(rows[r].cloneNode(true));
}
e.elemen.ej2_instances[0].getContentTable().appendChild(tbody);
}
}
return ((<div>
<GridComponent ref={g => grid = g} dataSource={data}
toolbar={['Print']} allowPaging={true} pageSettings={pageOptions}
selectionSettings={selectionSettings} beforePrint={beforePrint}>
<ColumnsDirective>
<ColumnDirective field='OrderID' headerText='Order ID'
width='120' textAlign="Right" />
<ColumnDirective field='CustomerID' headerText='Customer ID'
width='150' />
<ColumnDirective field='ShipCity' headerText='Ship City'
width='150' />
<ColumnDirective field='ShipName' headerText='Ship Name'
width='150' />
</ColumnsDirective>
<Inject services={[Toolbar, Page]} />
</GridComponent ></div>))
};
export default App;
APP.TSX
import { ColumnDirective, ColumnsDirective, GridComponent, PageSettingsModel,
SelectionSettingsModel, PrintEventArgs } from '@syncfusion/ej2-react-grids';
DATASOURCE.JSX
export let data = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
DATASOURCE.TSX
export let data: Object[] = [
{
OrderID: 10248, CustomerID: 'VINET', EmployeeID: 5, OrderDate: new
Date(8364186e5),
ShipName: 'Vins et alcools Chevalier', ShipCity: 'Reims',
ShipAddress: '59 rue de l Abbaye',
ShipRegion: 'CJ', ShipPostalCode: '51100', ShipCountry: 'France',
Freight: 32.38, Verified: !0
},
{
OrderID: 10249, CustomerID: 'TOMSP', EmployeeID: 6, OrderDate: new
Date(836505e6),
ShipName: 'Toms Spezialitäten', ShipCity: 'Münster', ShipAddress:
'Luisenstr. 48',
ShipRegion: 'CJ', ShipPostalCode: '44087', ShipCountry: 'Germany',
Freight: 11.61, Verified: !1
},
{
OrderID: 10250, CustomerID: 'HANAR', EmployeeID: 4, OrderDate: new
Date(8367642e5),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 65.83, Verified: !0
},
{
OrderID: 10251, CustomerID: 'VICTE', EmployeeID: 3, OrderDate: new
Date(8367642e5),
ShipName: 'Victuailles en stock', ShipCity: 'Lyon', ShipAddress: '2,
rue du Commerce',
ShipRegion: 'CJ', ShipPostalCode: '69004', ShipCountry: 'France',
Freight: 41.34, Verified: !0
},
{
OrderID: 10252, CustomerID: 'SUPRD', EmployeeID: 4, OrderDate: new
Date(8368506e5),
ShipName: 'Suprêmes délices', ShipCity: 'Charleroi', ShipAddress:
'Boulevard Tirou, 255',
ShipRegion: 'CJ', ShipPostalCode: 'B-6000', ShipCountry: 'Belgium',
Freight: 51.3, Verified: !0
},
{
OrderID: 10253, CustomerID: 'HANAR', EmployeeID: 3, OrderDate: new
Date(836937e6),
ShipName: 'Hanari Carnes', ShipCity: 'Rio de Janeiro', ShipAddress:
'Rua do Paço, 67',
ShipRegion: 'RJ', ShipPostalCode: '05454-876', ShipCountry: 'Brazil',
Freight: 58.17, Verified: !0
},
{
OrderID: 10254, CustomerID: 'CHOPS', EmployeeID: 5, OrderDate: new
Date(8370234e5),
queryString: 'EmployeeID'
};
const toolbaroptions = ['Print'];
return (<div>
<label style={{ padding: "10px 10px 26px 0" }}><b>Select Mode
</b></label>
<DropDownListComponent index={0} width={200} dataSource={dropdownData}
change={onModeChange}></DropDownListComponent>
<GridComponent toolbar={toolbaroptions}
hierarchyPrintMode={hierarchyPrintMode} dataSource={employeeData}
childGrid={childGridOptions}>
<ColumnsDirective>
<ColumnDirective field='EmployeeID' headerText='Employee ID'
width='120' textAlign="Right" />
<ColumnDirective field='FirstName' headerText='First Name'
width='150' />
<ColumnDirective field='City' headerText='City' width='150' />
<ColumnDirective field='Country' headerText='Country' width='150' />
</ColumnsDirective>
<Inject services={[DetailRow, Toolbar]} />
</GridComponent ></div>)
};
export default App;
APP.TSX
import { ChangeEventArgs, DropDownListComponent } from '@syncfusion/ej2-
react-dropdowns';
import { ColumnDirective, ColumnsDirective, GridComponent,
HierarchyGridPrintMode } from '@syncfusion/ej2-react-grids';
import { DetailRow, GridModel, Inject, Toolbar, ToolbarItems } from
'@syncfusion/ej2-react-grids';
import React, { useState } from 'react';
import { data, employeeData } from './datasource';
function App() {
const dropdownData: string[] = ['All', 'Expanded', 'None'];
const [hierarchyPrintMode, setHierarchyPrintMode] =
useState<HierarchyGridPrintMode>('All');
const onModeChange = (args: ChangeEventArgs) => {
setHierarchyPrintMode(args.value);
}
const childGridOptions: GridModel = {
columns: [
{ field: 'OrderID', headerText: 'Order ID', textAlign: 'Right', width:
120 },
{ field: 'CustomerID', headerText: 'Customer ID', width: 150 },
{ field: 'ShipCity', headerText: 'Ship City', width: 150 },
{ field: 'ShipName', headerText: 'Ship Name', width: 150 }
],
dataSource: data,
queryString: 'EmployeeID'
};
const toolbaroptions: ToolbarItems[] = ['Print'];
return (<div>
<label style={{ padding: "10px 10px 26px 0" }}><b>Select Mode
</b></label>
DATASOURCE.JSX
export let employeeData = [{
'EmployeeID': 1,
'LastName': 'Davolio',
'FirstName': 'Nancy',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-664743600000),
'HireDate': new Date(704692800000),
'Address': '507 - 20th Ave. E.\r\nApt. 2A',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98122',
'Country': 'USA',
'HomePhone': '(206) 555-9857',
'Extension': '5467',
'Photo': { 'Length': 21626 },
'Notes': 'Education includes a BA in psychology from Colorado State
University in 1970. She also completed\
\'The Art of the Cold Call.\' Nancy is a member of Toastmasters
International.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 2,
'LastName': 'Fuller',
'FirstName': 'Andrew',
'Title': 'Vice President, Sales',
'TitleOfCourtesy': 'Dr.',
'BirthDate': new Date(-563828400000),
'HireDate': new Date(713764800000),
'Address': '908 W. Capital Way',
'City': 'Tacoma',
'Region': 'WA',
'PostalCode': '98401',
'Country': 'USA',
Institute of Culinary Arts (1966). She was assigned to the London office
temporarily from July through November 1992.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/peacock.bmp'
},
{
'EmployeeID': 5,
'LastName': 'Buchanan',
'FirstName': 'Steven',
'Title': 'Sales Manager',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-468010800000),
'HireDate': new Date(750830400000),
'Address': '14 Garrett Hill',
'City': 'London',
'Region': null,
'PostalCode': 'SW1 8JR',
'Country': 'UK',
'HomePhone': '(71) 555-4848',
'Extension': '3453',
'Photo': { 'Length': 21626 },
'Notes': 'Steven Buchanan graduated from St. Andrews University,
Scotland, with a BSC degree in 1976. Upon joining the company as \
a sales representative in 1992, he spent 6 months in an orientation
program at the Seattle office and then returned to his permanent \
post in London. He was promoted to sales manager in March 1993. Mr.
Buchanan has completed the courses \'Successful \
Telemarketing\' and \'International Sales Management.\' He is fluent in
French.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/buchanan.bmp'
},
{
'EmployeeID': 6,
'LastName': 'Suyama',
'FirstName': 'Michael',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-205185600000),
'HireDate': new Date(750830400000),
'Address': 'Coventry House\r\nMiner Rd.',
'City': 'London',
'Region': null,
'PostalCode': 'EC2 7JR',
'Country': 'UK',
'HomePhone': '(71) 555-7773',
'Extension': '428',
'Photo': { 'Length': 21626 },
'Notes': 'Michael is a graduate of Sussex University (MA, economics,
1983) and the University of California at Los Angeles \
(MBA, marketing, 1986). He has also taken the courses \'Multi-Cultural
Selling\' and \'Time Management for the Sales Professional.\' \
He is fluent in Japanese and can read and write French, Portuguese, and
Spanish.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 7,
'LastName': 'King',
'FirstName': 'Robert',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-302731200000),
'HireDate': new Date(757486800000),
'Address': 'Edgeham Hollow\r\nWinchester Way',
'City': 'London',
'Region': null,
'PostalCode': 'RG1 9SP',
'Country': 'UK',
'HomePhone': '(71) 555-5598',
'Extension': '465',
'Photo': { 'Length': 21626 },
'Notes': 'Robert King served in the Peace Corps and traveled
extensively before completing his degree in English at the \
University of Michigan in 1992, the year he joined the company. After
completing a course entitled \'Selling in Europe,\' \
he was transferred to the London office in March 1993.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 8,
'LastName': 'Callahan',
'FirstName': 'Laura',
'Title': 'Inside Sales Coordinator',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-377982000000),
'HireDate': new Date(762843600000),
'Address': '4726 - 11th Ave. N.E.',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98105',
'Country': 'USA',
'HomePhone': '(206) 555-1189',
'Extension': '2344',
'Photo': { 'Length': 21626 },
'Notes': 'Laura received a BA in psychology from the University of
Washington. She has also completed a course in business \
French. She reads and writes French.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 9,
'LastName': 'Dodsworth',
'FirstName': 'Anne',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-123966000000),
'HireDate': new Date(784875600000),
'Address': '7 Houndstooth Rd.',
'City': 'London',
'Region': null,
DATASOURCE.TSX
export let employeeData: Object[] = [{
'EmployeeID': 1,
'LastName': 'Davolio',
'FirstName': 'Nancy',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-664743600000),
'HireDate': new Date(704692800000),
'Address': '507 - 20th Ave. E.\r\nApt. 2A',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98122',
'Country': 'USA',
'HomePhone': '(206) 555-9857',
'Extension': '5467',
'Photo': { 'Length': 21626 },
'Notes': 'Education includes a BA in psychology from Colorado State
University in 1970. She also completed\
\'The Art of the Cold Call.\' Nancy is a member of Toastmasters
International.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 2,
'LastName': 'Fuller',
'FirstName': 'Andrew',
'Title': 'Vice President, Sales',
'TitleOfCourtesy': 'Dr.',
'BirthDate': new Date(-563828400000),
'HireDate': new Date(713764800000),
'Address': '908 W. Capital Way',
'City': 'Tacoma',
'Region': 'WA',
'PostalCode': '98401',
'Country': 'USA',
'HomePhone': '(206) 555-9482',
'Extension': '3457',
'Photo': { 'Length': 21626 },
'Notes': 'Andrew received his BTS commercial in 1974 and a Ph.D. in
international marketing from the University of \
Dallas in 1981. He is fluent in French and Italian and reads German. He
joined the company as a sales representative, \
was promoted to sales manager in January 1992 and to vice president of
sales in March 1993. Andrew is a member of the \
Sales Management Roundtable, the Seattle Chamber of Commerce, and the
Pacific Rim Importers Association.',
'ReportsTo': 0,
'PhotoPath': 'http://accweb/emmployees/fuller.bmp'
},
{
'EmployeeID': 3,
'LastName': 'Leverling',
'FirstName': 'Janet',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-200088000000),
'HireDate': new Date(702104400000),
'Address': '722 Moss Bay Blvd.',
'City': 'Kirkland',
'Region': 'WA',
'PostalCode': '98033',
'Country': 'USA',
'HomePhone': '(206) 555-3412',
'Extension': '3355',
'Photo': { 'Length': 21722 },
'Notes': 'Janet has a BS degree in chemistry from Boston College (1984).
\
She has also completed a certificate program in food retailing
management.\
Janet was hired as a sales associate in 1991 and promoted to sales
representative in February 1992.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/leverling.bmp'
},
{
'EmployeeID': 4,
'LastName': 'Peacock',
'FirstName': 'Margaret',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mrs.',
'BirthDate': new Date(-1018814400000),
'HireDate': new Date(736401600000),
'Address': '4110 Old Redmond Rd.',
'City': 'Redmond',
'Region': 'WA',
'PostalCode': '98052',
'Country': 'USA',
'HomePhone': '(206) 555-8122',
'Extension': '5176',
He is fluent in Japanese and can read and write French, Portuguese, and
Spanish.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 7,
'LastName': 'King',
'FirstName': 'Robert',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Mr.',
'BirthDate': new Date(-302731200000),
'HireDate': new Date(757486800000),
'Address': 'Edgeham Hollow\r\nWinchester Way',
'City': 'London',
'Region': null,
'PostalCode': 'RG1 9SP',
'Country': 'UK',
'HomePhone': '(71) 555-5598',
'Extension': '465',
'Photo': { 'Length': 21626 },
'Notes': 'Robert King served in the Peace Corps and traveled extensively
before completing his degree in English at the \
University of Michigan in 1992, the year he joined the company. After
completing a course entitled \'Selling in Europe,\' \
he was transferred to the London office in March 1993.',
'ReportsTo': 5,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 8,
'LastName': 'Callahan',
'FirstName': 'Laura',
'Title': 'Inside Sales Coordinator',
'TitleOfCourtesy': 'Ms.',
'BirthDate': new Date(-377982000000),
'HireDate': new Date(762843600000),
'Address': '4726 - 11th Ave. N.E.',
'City': 'Seattle',
'Region': 'WA',
'PostalCode': '98105',
'Country': 'USA',
'HomePhone': '(206) 555-1189',
'Extension': '2344',
'Photo': { 'Length': 21626 },
'Notes': 'Laura received a BA in psychology from the University of
Washington. She has also completed a course in business \
French. She reads and writes French.',
'ReportsTo': 2,
'PhotoPath': 'http://accweb/emmployees/davolio.bmp'
},
{
'EmployeeID': 9,
'LastName': 'Dodsworth',
'FirstName': 'Anne',
'Title': 'Sales Representative',
'TitleOfCourtesy': 'Ms.',
APP.TSX
import * as React from 'react';
import { GridComponent, ColumnsDirective, ColumnDirective,
RowSelectEventArgs, Selection, Inject, Toolbar, PrintEventArgs, Print } from
'@syncfusion/ej2-react-grids';
import { customerData, data } from './datasource';
function MasterDetail() {
let detailGrid: GridComponent | null;
DATASOURCE.JSX
let stringData = JSON.stringify([
{
OrderID: 10248,
CustomerID: 'VINET',
OrderDate: '1996-07-04T00:00:00.000Z',
ShippedDate: '1996-07-16T00:00:00.000Z',
Freight: 32.38,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: "59 rue de l'Abbaye",
ShipCity: 'Reims',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10249,
CustomerID: 'TOMSP',
OrderDate: '1996-07-05T00:00:00.000Z',
ShippedDate: '1996-07-10T00:00:00.000Z',
Freight: 11.61,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10250,
CustomerID: 'HANAR',
OrderDate: '1996-07-08T00:00:00.000Z',
ShippedDate: '1996-07-12T00:00:00.000Z',
Freight: 65.83,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10251,
CustomerID: 'VICTE',
OrderDate: '1996-07-08T00:00:00.000Z',
ShippedDate: '1996-07-15T00:00:00.000Z',
Freight: 41.34,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10252,
CustomerID: 'SUPRD',
OrderDate: '1996-07-09T00:00:00.000Z',
ShippedDate: '1996-07-11T00:00:00.000Z',
Freight: 51.3,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10253,
CustomerID: 'HANAR',
OrderDate: '1996-07-10T00:00:00.000Z',
ShippedDate: '1996-07-16T00:00:00.000Z',
Freight: 58.17,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10254,
CustomerID: 'CHOPS',
OrderDate: '1996-07-11T00:00:00.000Z',
ShippedDate: '1996-07-23T00:00:00.000Z',
Freight: 22.98,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10255,
CustomerID: 'RICSU',
OrderDate: '1996-07-12T00:00:00.000Z',
ShippedDate: '1996-07-15T00:00:00.000Z',
Freight: 148.33,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10256,
CustomerID: 'WELLI',
OrderDate: '1996-07-15T00:00:00.000Z',
ShippedDate: '1996-07-17T00:00:00.000Z',
Freight: 13.97,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10257,
CustomerID: 'HILAA',
OrderDate: '1996-07-16T00:00:00.000Z',
ShippedDate: '1996-07-22T00:00:00.000Z',
Freight: 81.91,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10258,
CustomerID: 'ERNSH',
OrderDate: '1996-07-17T00:00:00.000Z',
ShippedDate: '1996-07-23T00:00:00.000Z',
Freight: 140.51,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10259,
CustomerID: 'CENTC',
OrderDate: '1996-07-18T00:00:00.000Z',
ShippedDate: '1996-07-25T00:00:00.000Z',
Freight: 3.25,
ShipName: 'Centro comercial Moctezuma',
ShipAddress: 'Sierras de Granada 9993',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10260,
CustomerID: 'OTTIK',
OrderDate: '1996-07-19T00:00:00.000Z',
ShippedDate: '1996-07-29T00:00:00.000Z',
Freight: 55.09,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10261,
CustomerID: 'QUEDE',
OrderDate: '1996-07-19T00:00:00.000Z',
ShippedDate: '1996-07-30T00:00:00.000Z',
Freight: 3.05,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10262,
CustomerID: 'RATTC',
OrderDate: '1996-07-22T00:00:00.000Z',
ShippedDate: '1996-07-25T00:00:00.000Z',
Freight: 48.29,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10263,
CustomerID: 'ERNSH',
OrderDate: '1996-07-23T00:00:00.000Z',
ShippedDate: '1996-07-31T00:00:00.000Z',
Freight: 146.06,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10264,
CustomerID: 'FOLKO',
OrderDate: '1996-07-24T00:00:00.000Z',
ShippedDate: '1996-08-23T00:00:00.000Z',
Freight: 3.67,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
OrderID: 10265,
CustomerID: 'BLONP',
OrderDate: '1996-07-25T00:00:00.000Z',
ShippedDate: '1996-08-12T00:00:00.000Z',
Freight: 55.28,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10266,
CustomerID: 'WARTH',
OrderDate: '1996-07-26T00:00:00.000Z',
ShippedDate: '1996-07-31T00:00:00.000Z',
Freight: 25.73,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10267,
CustomerID: 'FRANK',
OrderDate: '1996-07-29T00:00:00.000Z',
ShippedDate: '1996-08-06T00:00:00.000Z',
Freight: 208.58,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10268,
CustomerID: 'GROSR',
OrderDate: '1996-07-30T00:00:00.000Z',
ShippedDate: '1996-08-02T00:00:00.000Z',
Freight: 66.29,
ShipName: 'GROSELLA-Restaurante',
ShipAddress: '5ª Ave. Los Palos Grandes',
ShipCity: 'Caracas',
ShipRegion: 'DF',
ShipCountry: 'Venezuela',
},
{
OrderID: 10269,
CustomerID: 'WHITC',
OrderDate: '1996-07-31T00:00:00.000Z',
ShippedDate: '1996-08-09T00:00:00.000Z',
Freight: 4.56,
{
OrderID: 10270,
CustomerID: 'WARTH',
OrderDate: '1996-08-01T00:00:00.000Z',
ShippedDate: '1996-08-02T00:00:00.000Z',
Freight: 136.54,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10271,
CustomerID: 'SPLIR',
OrderDate: '1996-08-01T00:00:00.000Z',
ShippedDate: '1996-08-30T00:00:00.000Z',
Freight: 4.54,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10272,
CustomerID: 'RATTC',
OrderDate: '1996-08-02T00:00:00.000Z',
ShippedDate: '1996-08-06T00:00:00.000Z',
Freight: 98.03,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10273,
CustomerID: 'QUICK',
OrderDate: '1996-08-05T00:00:00.000Z',
ShippedDate: '1996-08-12T00:00:00.000Z',
Freight: 76.07,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10274,
CustomerID: 'VINET',
OrderDate: '1996-08-06T00:00:00.000Z',
ShippedDate: '1996-08-16T00:00:00.000Z',
Freight: 6.01,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: "59 rue de l'Abbaye",
ShipCity: 'Reims',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10275,
CustomerID: 'MAGAA',
OrderDate: '1996-08-07T00:00:00.000Z',
ShippedDate: '1996-08-09T00:00:00.000Z',
Freight: 26.93,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10276,
CustomerID: 'TORTU',
OrderDate: '1996-08-08T00:00:00.000Z',
ShippedDate: '1996-08-14T00:00:00.000Z',
Freight: 13.84,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10277,
CustomerID: 'MORGK',
OrderDate: '1996-08-09T00:00:00.000Z',
ShippedDate: '1996-08-13T00:00:00.000Z',
Freight: 125.77,
ShipName: 'Morgenstern Gesundkost',
ShipAddress: 'Heerstr. 22',
ShipCity: 'Leipzig',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10278,
CustomerID: 'BERGS',
OrderDate: '1996-08-12T00:00:00.000Z',
ShippedDate: '1996-08-16T00:00:00.000Z',
Freight: 92.69,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10279,
CustomerID: 'LEHMS',
OrderDate: '1996-08-13T00:00:00.000Z',
ShippedDate: '1996-08-16T00:00:00.000Z',
Freight: 25.83,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10280,
CustomerID: 'BERGS',
OrderDate: '1996-08-14T00:00:00.000Z',
ShippedDate: '1996-09-12T00:00:00.000Z',
Freight: 8.98,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10281,
CustomerID: 'ROMEY',
OrderDate: '1996-08-14T00:00:00.000Z',
ShippedDate: '1996-08-21T00:00:00.000Z',
Freight: 2.94,
ShipName: 'Romero y tomillo',
ShipAddress: 'Gran Vía, 1',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10282,
CustomerID: 'ROMEY',
OrderDate: '1996-08-15T00:00:00.000Z',
ShippedDate: '1996-08-21T00:00:00.000Z',
Freight: 12.69,
ShipName: 'Romero y tomillo',
ShipAddress: 'Gran Vía, 1',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10283,
CustomerID: 'LILAS',
OrderDate: '1996-08-16T00:00:00.000Z',
ShippedDate: '1996-08-23T00:00:00.000Z',
Freight: 84.81,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10284,
CustomerID: 'LEHMS',
OrderDate: '1996-08-19T00:00:00.000Z',
ShippedDate: '1996-08-27T00:00:00.000Z',
Freight: 76.56,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10285,
CustomerID: 'QUICK',
OrderDate: '1996-08-20T00:00:00.000Z',
ShippedDate: '1996-08-26T00:00:00.000Z',
Freight: 76.83,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10286,
CustomerID: 'QUICK',
OrderDate: '1996-08-21T00:00:00.000Z',
ShippedDate: '1996-08-30T00:00:00.000Z',
Freight: 229.24,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10287,
CustomerID: 'RICAR',
OrderDate: '1996-08-22T00:00:00.000Z',
ShippedDate: '1996-08-28T00:00:00.000Z',
Freight: 12.76,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10288,
CustomerID: 'REGGC',
OrderDate: '1996-08-23T00:00:00.000Z',
ShippedDate: '1996-09-03T00:00:00.000Z',
Freight: 7.45,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10289,
CustomerID: 'BSBEV',
OrderDate: '1996-08-26T00:00:00.000Z',
ShippedDate: '1996-08-28T00:00:00.000Z',
Freight: 22.77,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10290,
CustomerID: 'COMMI',
OrderDate: '1996-08-27T00:00:00.000Z',
ShippedDate: '1996-09-03T00:00:00.000Z',
Freight: 79.7,
ShipName: 'Comércio Mineiro',
ShipAddress: 'Av. dos Lusíadas, 23',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10291,
CustomerID: 'QUEDE',
OrderDate: '1996-08-27T00:00:00.000Z',
ShippedDate: '1996-09-04T00:00:00.000Z',
Freight: 6.4,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10292,
CustomerID: 'TRADH',
OrderDate: '1996-08-28T00:00:00.000Z',
ShippedDate: '1996-09-02T00:00:00.000Z',
Freight: 1.35,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10293,
CustomerID: 'TORTU',
OrderDate: '1996-08-29T00:00:00.000Z',
ShippedDate: '1996-09-11T00:00:00.000Z',
Freight: 21.18,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10294,
CustomerID: 'RATTC',
OrderDate: '1996-08-30T00:00:00.000Z',
ShippedDate: '1996-09-05T00:00:00.000Z',
Freight: 147.26,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10295,
CustomerID: 'VINET',
OrderDate: '1996-09-02T00:00:00.000Z',
ShippedDate: '1996-09-10T00:00:00.000Z',
Freight: 1.15,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: "59 rue de l'Abbaye",
ShipCity: 'Reims',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10296,
CustomerID: 'LILAS',
OrderDate: '1996-09-03T00:00:00.000Z',
ShippedDate: '1996-09-11T00:00:00.000Z',
Freight: 0.12,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10297,
CustomerID: 'BLONP',
OrderDate: '1996-09-04T00:00:00.000Z',
ShippedDate: '1996-09-10T00:00:00.000Z',
Freight: 5.74,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10298,
CustomerID: 'HUNGO',
OrderDate: '1996-09-05T00:00:00.000Z',
ShippedDate: '1996-09-11T00:00:00.000Z',
Freight: 168.22,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10299,
CustomerID: 'RICAR',
OrderDate: '1996-09-06T00:00:00.000Z',
ShippedDate: '1996-09-13T00:00:00.000Z',
Freight: 29.76,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10300,
CustomerID: 'MAGAA',
OrderDate: '1996-09-09T00:00:00.000Z',
ShippedDate: '1996-09-18T00:00:00.000Z',
Freight: 17.68,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10301,
CustomerID: 'WANDK',
OrderDate: '1996-09-09T00:00:00.000Z',
ShippedDate: '1996-09-17T00:00:00.000Z',
Freight: 45.08,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10302,
CustomerID: 'SUPRD',
OrderDate: '1996-09-10T00:00:00.000Z',
ShippedDate: '1996-10-09T00:00:00.000Z',
Freight: 6.27,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10303,
CustomerID: 'GODOS',
OrderDate: '1996-09-11T00:00:00.000Z',
ShippedDate: '1996-09-18T00:00:00.000Z',
Freight: 107.83,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10304,
CustomerID: 'TORTU',
OrderDate: '1996-09-12T00:00:00.000Z',
ShippedDate: '1996-09-17T00:00:00.000Z',
Freight: 63.79,
ShipName: 'Tortuga Restaurante',
{
OrderID: 10305,
CustomerID: 'OLDWO',
OrderDate: '1996-09-13T00:00:00.000Z',
ShippedDate: '1996-10-09T00:00:00.000Z',
Freight: 257.62,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10306,
CustomerID: 'ROMEY',
OrderDate: '1996-09-16T00:00:00.000Z',
ShippedDate: '1996-09-23T00:00:00.000Z',
Freight: 7.56,
ShipName: 'Romero y tomillo',
ShipAddress: 'Gran Vía, 1',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10307,
CustomerID: 'LONEP',
OrderDate: '1996-09-17T00:00:00.000Z',
ShippedDate: '1996-09-25T00:00:00.000Z',
Freight: 0.56,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10308,
CustomerID: 'ANATR',
OrderDate: '1996-09-18T00:00:00.000Z',
ShippedDate: '1996-09-24T00:00:00.000Z',
Freight: 1.61,
ShipName: 'Ana Trujillo Emparedados y helados',
ShipAddress: 'Avda. de la Constitución 2222',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10309,
CustomerID: 'HUNGO',
OrderDate: '1996-09-19T00:00:00.000Z',
ShippedDate: '1996-10-23T00:00:00.000Z',
Freight: 47.3,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10310,
CustomerID: 'THEBI',
OrderDate: '1996-09-20T00:00:00.000Z',
ShippedDate: '1996-09-27T00:00:00.000Z',
Freight: 17.52,
ShipName: 'The Big Cheese',
ShipAddress: '89 Jefferson Way Suite 2',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10311,
CustomerID: 'DUMON',
OrderDate: '1996-09-20T00:00:00.000Z',
ShippedDate: '1996-09-26T00:00:00.000Z',
Freight: 24.69,
ShipName: 'Du monde entier',
ShipAddress: '67, rue des Cinquante Otages',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10312,
CustomerID: 'WANDK',
OrderDate: '1996-09-23T00:00:00.000Z',
ShippedDate: '1996-10-03T00:00:00.000Z',
Freight: 40.26,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10313,
CustomerID: 'QUICK',
OrderDate: '1996-09-24T00:00:00.000Z',
ShippedDate: '1996-10-04T00:00:00.000Z',
Freight: 1.96,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10314,
CustomerID: 'RATTC',
OrderDate: '1996-09-25T00:00:00.000Z',
ShippedDate: '1996-10-04T00:00:00.000Z',
Freight: 74.16,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10315,
CustomerID: 'ISLAT',
OrderDate: '1996-09-26T00:00:00.000Z',
ShippedDate: '1996-10-03T00:00:00.000Z',
Freight: 41.76,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10316,
CustomerID: 'RATTC',
OrderDate: '1996-09-27T00:00:00.000Z',
ShippedDate: '1996-10-08T00:00:00.000Z',
Freight: 150.15,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10317,
CustomerID: 'LONEP',
OrderDate: '1996-09-30T00:00:00.000Z',
ShippedDate: '1996-10-10T00:00:00.000Z',
Freight: 12.69,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10318,
CustomerID: 'ISLAT',
OrderDate: '1996-10-01T00:00:00.000Z',
ShippedDate: '1996-10-04T00:00:00.000Z',
Freight: 4.73,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10319,
CustomerID: 'TORTU',
OrderDate: '1996-10-02T00:00:00.000Z',
ShippedDate: '1996-10-11T00:00:00.000Z',
Freight: 64.5,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10320,
CustomerID: 'WARTH',
OrderDate: '1996-10-03T00:00:00.000Z',
ShippedDate: '1996-10-18T00:00:00.000Z',
Freight: 34.57,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10321,
CustomerID: 'ISLAT',
OrderDate: '1996-10-03T00:00:00.000Z',
ShippedDate: '1996-10-11T00:00:00.000Z',
Freight: 3.43,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
OrderID: 10322,
CustomerID: 'PERIC',
OrderDate: '1996-10-04T00:00:00.000Z',
ShippedDate: '1996-10-23T00:00:00.000Z',
Freight: 0.4,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10323,
CustomerID: 'KOENE',
OrderDate: '1996-10-07T00:00:00.000Z',
ShippedDate: '1996-10-14T00:00:00.000Z',
Freight: 4.88,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10324,
CustomerID: 'SAVEA',
OrderDate: '1996-10-08T00:00:00.000Z',
ShippedDate: '1996-10-10T00:00:00.000Z',
Freight: 214.27,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10325,
CustomerID: 'KOENE',
OrderDate: '1996-10-09T00:00:00.000Z',
ShippedDate: '1996-10-14T00:00:00.000Z',
Freight: 64.86,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10326,
CustomerID: 'BOLID',
OrderDate: '1996-10-10T00:00:00.000Z',
ShippedDate: '1996-10-14T00:00:00.000Z',
Freight: 77.92,
{
OrderID: 10327,
CustomerID: 'FOLKO',
OrderDate: '1996-10-11T00:00:00.000Z',
ShippedDate: '1996-10-14T00:00:00.000Z',
Freight: 63.36,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10328,
CustomerID: 'FURIB',
OrderDate: '1996-10-14T00:00:00.000Z',
ShippedDate: '1996-10-17T00:00:00.000Z',
Freight: 87.03,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10329,
CustomerID: 'SPLIR',
OrderDate: '1996-10-15T00:00:00.000Z',
ShippedDate: '1996-10-23T00:00:00.000Z',
Freight: 191.67,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10330,
CustomerID: 'LILAS',
OrderDate: '1996-10-16T00:00:00.000Z',
ShippedDate: '1996-10-28T00:00:00.000Z',
Freight: 12.75,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10331,
CustomerID: 'BONAP',
OrderDate: '1996-10-16T00:00:00.000Z',
ShippedDate: '1996-10-21T00:00:00.000Z',
Freight: 10.19,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10332,
CustomerID: 'MEREP',
OrderDate: '1996-10-17T00:00:00.000Z',
ShippedDate: '1996-10-21T00:00:00.000Z',
Freight: 52.84,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10333,
CustomerID: 'WARTH',
OrderDate: '1996-10-18T00:00:00.000Z',
ShippedDate: '1996-10-25T00:00:00.000Z',
Freight: 0.59,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10334,
CustomerID: 'VICTE',
OrderDate: '1996-10-21T00:00:00.000Z',
ShippedDate: '1996-10-28T00:00:00.000Z',
Freight: 8.56,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10335,
CustomerID: 'HUNGO',
OrderDate: '1996-10-22T00:00:00.000Z',
ShippedDate: '1996-10-24T00:00:00.000Z',
Freight: 42.11,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10336,
CustomerID: 'PRINI',
OrderDate: '1996-10-23T00:00:00.000Z',
ShippedDate: '1996-10-25T00:00:00.000Z',
Freight: 15.51,
ShipName: 'Princesa Isabel Vinhos',
ShipAddress: 'Estrada da saúde n. 58',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10337,
CustomerID: 'FRANK',
OrderDate: '1996-10-24T00:00:00.000Z',
ShippedDate: '1996-10-29T00:00:00.000Z',
Freight: 108.26,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10338,
CustomerID: 'OLDWO',
OrderDate: '1996-10-25T00:00:00.000Z',
ShippedDate: '1996-10-29T00:00:00.000Z',
Freight: 84.21,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10339,
CustomerID: 'MEREP',
OrderDate: '1996-10-28T00:00:00.000Z',
ShippedDate: '1996-11-04T00:00:00.000Z',
Freight: 15.66,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10340,
CustomerID: 'BONAP',
OrderDate: '1996-10-29T00:00:00.000Z',
ShippedDate: '1996-11-08T00:00:00.000Z',
Freight: 166.31,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10341,
CustomerID: 'SIMOB',
OrderDate: '1996-10-29T00:00:00.000Z',
ShippedDate: '1996-11-05T00:00:00.000Z',
Freight: 26.78,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10342,
CustomerID: 'FRANK',
OrderDate: '1996-10-30T00:00:00.000Z',
ShippedDate: '1996-11-04T00:00:00.000Z',
Freight: 54.83,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10343,
CustomerID: 'LEHMS',
OrderDate: '1996-10-31T00:00:00.000Z',
ShippedDate: '1996-11-06T00:00:00.000Z',
Freight: 110.37,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10344,
CustomerID: 'WHITC',
OrderDate: '1996-11-01T00:00:00.000Z',
ShippedDate: '1996-11-05T00:00:00.000Z',
Freight: 23.29,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10345,
CustomerID: 'QUICK',
OrderDate: '1996-11-04T00:00:00.000Z',
ShippedDate: '1996-11-11T00:00:00.000Z',
Freight: 249.06,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10346,
CustomerID: 'RATTC',
OrderDate: '1996-11-05T00:00:00.000Z',
ShippedDate: '1996-11-08T00:00:00.000Z',
Freight: 142.08,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10347,
CustomerID: 'FAMIA',
OrderDate: '1996-11-06T00:00:00.000Z',
ShippedDate: '1996-11-08T00:00:00.000Z',
Freight: 3.1,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10348,
CustomerID: 'WANDK',
OrderDate: '1996-11-07T00:00:00.000Z',
ShippedDate: '1996-11-15T00:00:00.000Z',
Freight: 0.78,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10349,
CustomerID: 'SPLIR',
OrderDate: '1996-11-08T00:00:00.000Z',
ShippedDate: '1996-11-15T00:00:00.000Z',
Freight: 8.63,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10350,
CustomerID: 'LAMAI',
OrderDate: '1996-11-11T00:00:00.000Z',
ShippedDate: '1996-12-03T00:00:00.000Z',
Freight: 64.19,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10351,
CustomerID: 'ERNSH',
OrderDate: '1996-11-11T00:00:00.000Z',
ShippedDate: '1996-11-20T00:00:00.000Z',
Freight: 162.33,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10352,
CustomerID: 'FURIB',
OrderDate: '1996-11-12T00:00:00.000Z',
ShippedDate: '1996-11-18T00:00:00.000Z',
Freight: 1.3,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10353,
CustomerID: 'PICCO',
OrderDate: '1996-11-13T00:00:00.000Z',
ShippedDate: '1996-11-25T00:00:00.000Z',
Freight: 360.63,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10354,
CustomerID: 'PERIC',
OrderDate: '1996-11-14T00:00:00.000Z',
ShippedDate: '1996-11-20T00:00:00.000Z',
Freight: 53.8,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10355,
CustomerID: 'AROUT',
OrderDate: '1996-11-15T00:00:00.000Z',
ShippedDate: '1996-11-20T00:00:00.000Z',
Freight: 41.95,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10356,
CustomerID: 'WANDK',
OrderDate: '1996-11-18T00:00:00.000Z',
ShippedDate: '1996-11-27T00:00:00.000Z',
Freight: 36.71,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10357,
CustomerID: 'LILAS',
OrderDate: '1996-11-19T00:00:00.000Z',
ShippedDate: '1996-12-02T00:00:00.000Z',
Freight: 34.88,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10358,
CustomerID: 'LAMAI',
OrderDate: '1996-11-20T00:00:00.000Z',
ShippedDate: '1996-11-27T00:00:00.000Z',
Freight: 19.64,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10359,
CustomerID: 'SEVES',
OrderDate: '1996-11-21T00:00:00.000Z',
ShippedDate: '1996-11-26T00:00:00.000Z',
Freight: 288.43,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10360,
CustomerID: 'BLONP',
OrderDate: '1996-11-22T00:00:00.000Z',
ShippedDate: '1996-12-02T00:00:00.000Z',
Freight: 131.7,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10361,
CustomerID: 'QUICK',
OrderDate: '1996-11-22T00:00:00.000Z',
ShippedDate: '1996-12-03T00:00:00.000Z',
Freight: 183.17,
ShipName: 'QUICK-Stop',
{
OrderID: 10362,
CustomerID: 'BONAP',
OrderDate: '1996-11-25T00:00:00.000Z',
ShippedDate: '1996-11-28T00:00:00.000Z',
Freight: 96.04,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10363,
CustomerID: 'DRACD',
OrderDate: '1996-11-26T00:00:00.000Z',
ShippedDate: '1996-12-04T00:00:00.000Z',
Freight: 30.54,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10364,
CustomerID: 'EASTC',
OrderDate: '1996-11-26T00:00:00.000Z',
ShippedDate: '1996-12-04T00:00:00.000Z',
Freight: 71.97,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10365,
CustomerID: 'ANTON',
OrderDate: '1996-11-27T00:00:00.000Z',
ShippedDate: '1996-12-02T00:00:00.000Z',
Freight: 22,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10366,
CustomerID: 'GALED',
OrderDate: '1996-11-28T00:00:00.000Z',
ShippedDate: '1996-12-30T00:00:00.000Z',
Freight: 10.14,
ShipName: 'Galería del gastronómo',
ShipAddress: 'Rambla de Cataluña, 23',
ShipCity: 'Barcelona',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10367,
CustomerID: 'VAFFE',
OrderDate: '1996-11-28T00:00:00.000Z',
ShippedDate: '1996-12-02T00:00:00.000Z',
Freight: 13.55,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10368,
CustomerID: 'ERNSH',
OrderDate: '1996-11-29T00:00:00.000Z',
ShippedDate: '1996-12-02T00:00:00.000Z',
Freight: 101.95,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10369,
CustomerID: 'SPLIR',
OrderDate: '1996-12-02T00:00:00.000Z',
ShippedDate: '1996-12-09T00:00:00.000Z',
Freight: 195.68,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10370,
CustomerID: 'CHOPS',
OrderDate: '1996-12-03T00:00:00.000Z',
ShippedDate: '1996-12-27T00:00:00.000Z',
Freight: 1.17,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10371,
CustomerID: 'LAMAI',
OrderDate: '1996-12-03T00:00:00.000Z',
ShippedDate: '1996-12-24T00:00:00.000Z',
Freight: 0.45,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10372,
CustomerID: 'QUEEN',
OrderDate: '1996-12-04T00:00:00.000Z',
ShippedDate: '1996-12-09T00:00:00.000Z',
Freight: 890.78,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10373,
CustomerID: 'HUNGO',
OrderDate: '1996-12-05T00:00:00.000Z',
ShippedDate: '1996-12-11T00:00:00.000Z',
Freight: 124.12,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10374,
CustomerID: 'WOLZA',
OrderDate: '1996-12-05T00:00:00.000Z',
ShippedDate: '1996-12-09T00:00:00.000Z',
Freight: 3.94,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10375,
CustomerID: 'HUNGC',
OrderDate: '1996-12-06T00:00:00.000Z',
ShippedDate: '1996-12-09T00:00:00.000Z',
Freight: 20.12,
ShipName: 'Hungry Coyote Import Store',
ShipAddress: 'City Center Plaza 516 Main St.',
ShipCity: 'Elgin',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10376,
CustomerID: 'MEREP',
OrderDate: '1996-12-09T00:00:00.000Z',
ShippedDate: '1996-12-13T00:00:00.000Z',
Freight: 20.39,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10377,
CustomerID: 'SEVES',
OrderDate: '1996-12-09T00:00:00.000Z',
ShippedDate: '1996-12-13T00:00:00.000Z',
Freight: 22.21,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10378,
CustomerID: 'FOLKO',
OrderDate: '1996-12-10T00:00:00.000Z',
ShippedDate: '1996-12-19T00:00:00.000Z',
Freight: 5.44,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
OrderID: 10379,
CustomerID: 'QUEDE',
OrderDate: '1996-12-11T00:00:00.000Z',
ShippedDate: '1996-12-13T00:00:00.000Z',
Freight: 45.03,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10380,
CustomerID: 'HUNGO',
OrderDate: '1996-12-12T00:00:00.000Z',
ShippedDate: '1997-01-16T00:00:00.000Z',
Freight: 35.03,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10381,
CustomerID: 'LILAS',
OrderDate: '1996-12-12T00:00:00.000Z',
ShippedDate: '1996-12-13T00:00:00.000Z',
Freight: 7.99,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10382,
CustomerID: 'ERNSH',
OrderDate: '1996-12-13T00:00:00.000Z',
ShippedDate: '1996-12-16T00:00:00.000Z',
Freight: 94.77,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10383,
CustomerID: 'AROUT',
OrderDate: '1996-12-16T00:00:00.000Z',
ShippedDate: '1996-12-18T00:00:00.000Z',
Freight: 34.24,
{
OrderID: 10384,
CustomerID: 'BERGS',
OrderDate: '1996-12-16T00:00:00.000Z',
ShippedDate: '1996-12-20T00:00:00.000Z',
Freight: 168.64,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10385,
CustomerID: 'SPLIR',
OrderDate: '1996-12-17T00:00:00.000Z',
ShippedDate: '1996-12-23T00:00:00.000Z',
Freight: 30.96,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10386,
CustomerID: 'FAMIA',
OrderDate: '1996-12-18T00:00:00.000Z',
ShippedDate: '1996-12-25T00:00:00.000Z',
Freight: 13.99,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10387,
CustomerID: 'SANTG',
OrderDate: '1996-12-18T00:00:00.000Z',
ShippedDate: '1996-12-20T00:00:00.000Z',
Freight: 93.63,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 10388,
CustomerID: 'SEVES',
OrderDate: '1996-12-19T00:00:00.000Z',
ShippedDate: '1996-12-20T00:00:00.000Z',
Freight: 34.86,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10389,
CustomerID: 'BOTTM',
OrderDate: '1996-12-20T00:00:00.000Z',
ShippedDate: '1996-12-24T00:00:00.000Z',
Freight: 47.42,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10390,
CustomerID: 'ERNSH',
OrderDate: '1996-12-23T00:00:00.000Z',
ShippedDate: '1996-12-26T00:00:00.000Z',
Freight: 126.38,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10391,
CustomerID: 'DRACD',
OrderDate: '1996-12-23T00:00:00.000Z',
ShippedDate: '1996-12-31T00:00:00.000Z',
Freight: 5.45,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10392,
CustomerID: 'PICCO',
OrderDate: '1996-12-24T00:00:00.000Z',
ShippedDate: '1997-01-01T00:00:00.000Z',
Freight: 122.46,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10393,
CustomerID: 'SAVEA',
OrderDate: '1996-12-25T00:00:00.000Z',
ShippedDate: '1997-01-03T00:00:00.000Z',
Freight: 126.56,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10394,
CustomerID: 'HUNGC',
OrderDate: '1996-12-25T00:00:00.000Z',
ShippedDate: '1997-01-03T00:00:00.000Z',
Freight: 30.34,
ShipName: 'Hungry Coyote Import Store',
ShipAddress: 'City Center Plaza 516 Main St.',
ShipCity: 'Elgin',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10395,
CustomerID: 'HILAA',
OrderDate: '1996-12-26T00:00:00.000Z',
ShippedDate: '1997-01-03T00:00:00.000Z',
Freight: 184.41,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10396,
CustomerID: 'FRANK',
OrderDate: '1996-12-27T00:00:00.000Z',
ShippedDate: '1997-01-06T00:00:00.000Z',
Freight: 135.35,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10397,
CustomerID: 'PRINI',
OrderDate: '1996-12-27T00:00:00.000Z',
ShippedDate: '1997-01-02T00:00:00.000Z',
Freight: 60.26,
ShipName: 'Princesa Isabel Vinhos',
ShipAddress: 'Estrada da saúde n. 58',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10398,
CustomerID: 'SAVEA',
OrderDate: '1996-12-30T00:00:00.000Z',
ShippedDate: '1997-01-09T00:00:00.000Z',
Freight: 89.16,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10399,
CustomerID: 'VAFFE',
OrderDate: '1996-12-31T00:00:00.000Z',
ShippedDate: '1997-01-08T00:00:00.000Z',
Freight: 27.36,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10400,
CustomerID: 'EASTC',
OrderDate: '1997-01-01T00:00:00.000Z',
ShippedDate: '1997-01-16T00:00:00.000Z',
Freight: 83.93,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10401,
CustomerID: 'RATTC',
OrderDate: '1997-01-01T00:00:00.000Z',
ShippedDate: '1997-01-10T00:00:00.000Z',
Freight: 12.51,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10402,
CustomerID: 'ERNSH',
OrderDate: '1997-01-02T00:00:00.000Z',
ShippedDate: '1997-01-10T00:00:00.000Z',
Freight: 67.88,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10403,
CustomerID: 'ERNSH',
OrderDate: '1997-01-03T00:00:00.000Z',
ShippedDate: '1997-01-09T00:00:00.000Z',
Freight: 73.79,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10404,
CustomerID: 'MAGAA',
OrderDate: '1997-01-03T00:00:00.000Z',
ShippedDate: '1997-01-08T00:00:00.000Z',
Freight: 155.97,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10405,
CustomerID: 'LINOD',
OrderDate: '1997-01-06T00:00:00.000Z',
ShippedDate: '1997-01-22T00:00:00.000Z',
Freight: 34.82,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10406,
CustomerID: 'QUEEN',
OrderDate: '1997-01-07T00:00:00.000Z',
ShippedDate: '1997-01-13T00:00:00.000Z',
Freight: 108.04,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10407,
CustomerID: 'OTTIK',
OrderDate: '1997-01-07T00:00:00.000Z',
ShippedDate: '1997-01-30T00:00:00.000Z',
Freight: 91.48,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10408,
CustomerID: 'FOLIG',
OrderDate: '1997-01-08T00:00:00.000Z',
ShippedDate: '1997-01-14T00:00:00.000Z',
Freight: 11.26,
ShipName: 'Folies gourmandes',
ShipAddress: '184, chaussée de Tournai',
ShipCity: 'Lille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10409,
CustomerID: 'OCEAN',
OrderDate: '1997-01-09T00:00:00.000Z',
ShippedDate: '1997-01-14T00:00:00.000Z',
Freight: 29.83,
ShipName: 'Océano Atlántico Ltda.',
ShipAddress: 'Ing. Gustavo Moncada 8585 Piso 20-A',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10410,
CustomerID: 'BOTTM',
OrderDate: '1997-01-10T00:00:00.000Z',
ShippedDate: '1997-01-15T00:00:00.000Z',
Freight: 2.4,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10411,
CustomerID: 'BOTTM',
OrderDate: '1997-01-10T00:00:00.000Z',
ShippedDate: '1997-01-21T00:00:00.000Z',
Freight: 23.65,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10412,
CustomerID: 'WARTH',
OrderDate: '1997-01-13T00:00:00.000Z',
ShippedDate: '1997-01-15T00:00:00.000Z',
Freight: 3.77,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10413,
CustomerID: 'LAMAI',
OrderDate: '1997-01-14T00:00:00.000Z',
ShippedDate: '1997-01-16T00:00:00.000Z',
Freight: 95.66,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10414,
CustomerID: 'FAMIA',
OrderDate: '1997-01-14T00:00:00.000Z',
ShippedDate: '1997-01-17T00:00:00.000Z',
Freight: 21.48,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10415,
CustomerID: 'HUNGC',
OrderDate: '1997-01-15T00:00:00.000Z',
ShippedDate: '1997-01-24T00:00:00.000Z',
Freight: 0.2,
ShipName: 'Hungry Coyote Import Store',
ShipAddress: 'City Center Plaza 516 Main St.',
ShipCity: 'Elgin',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10416,
CustomerID: 'WARTH',
OrderDate: '1997-01-16T00:00:00.000Z',
ShippedDate: '1997-01-27T00:00:00.000Z',
Freight: 22.72,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10417,
CustomerID: 'SIMOB',
OrderDate: '1997-01-16T00:00:00.000Z',
ShippedDate: '1997-01-28T00:00:00.000Z',
Freight: 70.29,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10418,
CustomerID: 'QUICK',
OrderDate: '1997-01-17T00:00:00.000Z',
ShippedDate: '1997-01-24T00:00:00.000Z',
Freight: 17.55,
ShipName: 'QUICK-Stop',
{
OrderID: 10419,
CustomerID: 'RICSU',
OrderDate: '1997-01-20T00:00:00.000Z',
ShippedDate: '1997-01-30T00:00:00.000Z',
Freight: 137.35,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10420,
CustomerID: 'WELLI',
OrderDate: '1997-01-21T00:00:00.000Z',
ShippedDate: '1997-01-27T00:00:00.000Z',
Freight: 44.12,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10421,
CustomerID: 'QUEDE',
OrderDate: '1997-01-21T00:00:00.000Z',
ShippedDate: '1997-01-27T00:00:00.000Z',
Freight: 99.23,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10422,
CustomerID: 'FRANS',
OrderDate: '1997-01-22T00:00:00.000Z',
ShippedDate: '1997-01-31T00:00:00.000Z',
Freight: 3.02,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10423,
CustomerID: 'GOURL',
OrderDate: '1997-01-23T00:00:00.000Z',
ShippedDate: '1997-02-24T00:00:00.000Z',
Freight: 24.5,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10424,
CustomerID: 'MEREP',
OrderDate: '1997-01-23T00:00:00.000Z',
ShippedDate: '1997-01-27T00:00:00.000Z',
Freight: 370.61,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10425,
CustomerID: 'LAMAI',
OrderDate: '1997-01-24T00:00:00.000Z',
ShippedDate: '1997-02-14T00:00:00.000Z',
Freight: 7.93,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10426,
CustomerID: 'GALED',
OrderDate: '1997-01-27T00:00:00.000Z',
ShippedDate: '1997-02-06T00:00:00.000Z',
Freight: 18.69,
ShipName: 'Galería del gastronómo',
ShipAddress: 'Rambla de Cataluña, 23',
ShipCity: 'Barcelona',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10427,
CustomerID: 'PICCO',
OrderDate: '1997-01-27T00:00:00.000Z',
ShippedDate: '1997-03-03T00:00:00.000Z',
Freight: 31.29,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10428,
CustomerID: 'REGGC',
OrderDate: '1997-01-28T00:00:00.000Z',
ShippedDate: '1997-02-04T00:00:00.000Z',
Freight: 11.09,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10429,
CustomerID: 'HUNGO',
OrderDate: '1997-01-29T00:00:00.000Z',
ShippedDate: '1997-02-07T00:00:00.000Z',
Freight: 56.63,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10430,
CustomerID: 'ERNSH',
OrderDate: '1997-01-30T00:00:00.000Z',
ShippedDate: '1997-02-03T00:00:00.000Z',
Freight: 458.78,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10431,
CustomerID: 'BOTTM',
OrderDate: '1997-01-30T00:00:00.000Z',
ShippedDate: '1997-02-07T00:00:00.000Z',
Freight: 44.17,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10432,
CustomerID: 'SPLIR',
OrderDate: '1997-01-31T00:00:00.000Z',
ShippedDate: '1997-02-07T00:00:00.000Z',
Freight: 4.34,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10433,
CustomerID: 'PRINI',
OrderDate: '1997-02-03T00:00:00.000Z',
ShippedDate: '1997-03-04T00:00:00.000Z',
Freight: 73.83,
ShipName: 'Princesa Isabel Vinhos',
ShipAddress: 'Estrada da saúde n. 58',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10434,
CustomerID: 'FOLKO',
OrderDate: '1997-02-03T00:00:00.000Z',
ShippedDate: '1997-02-13T00:00:00.000Z',
Freight: 17.92,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10435,
CustomerID: 'CONSH',
OrderDate: '1997-02-04T00:00:00.000Z',
ShippedDate: '1997-02-07T00:00:00.000Z',
Freight: 9.21,
ShipName: 'Consolidated Holdings',
ShipAddress: 'Berkeley Gardens 12 Brewery',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
OrderID: 10436,
CustomerID: 'BLONP',
OrderDate: '1997-02-05T00:00:00.000Z',
ShippedDate: '1997-02-11T00:00:00.000Z',
Freight: 156.66,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10437,
CustomerID: 'WARTH',
OrderDate: '1997-02-05T00:00:00.000Z',
ShippedDate: '1997-02-12T00:00:00.000Z',
Freight: 19.97,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10438,
CustomerID: 'TOMSP',
OrderDate: '1997-02-06T00:00:00.000Z',
ShippedDate: '1997-02-14T00:00:00.000Z',
Freight: 8.24,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10439,
CustomerID: 'MEREP',
OrderDate: '1997-02-07T00:00:00.000Z',
ShippedDate: '1997-02-10T00:00:00.000Z',
Freight: 4.07,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10440,
CustomerID: 'SAVEA',
OrderDate: '1997-02-10T00:00:00.000Z',
ShippedDate: '1997-02-28T00:00:00.000Z',
Freight: 86.53,
{
OrderID: 10441,
CustomerID: 'OLDWO',
OrderDate: '1997-02-10T00:00:00.000Z',
ShippedDate: '1997-03-14T00:00:00.000Z',
Freight: 73.02,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10442,
CustomerID: 'ERNSH',
OrderDate: '1997-02-11T00:00:00.000Z',
ShippedDate: '1997-02-18T00:00:00.000Z',
Freight: 47.94,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10443,
CustomerID: 'REGGC',
OrderDate: '1997-02-12T00:00:00.000Z',
ShippedDate: '1997-02-14T00:00:00.000Z',
Freight: 13.95,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10444,
CustomerID: 'BERGS',
OrderDate: '1997-02-12T00:00:00.000Z',
ShippedDate: '1997-02-21T00:00:00.000Z',
Freight: 3.5,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10445,
CustomerID: 'BERGS',
OrderDate: '1997-02-13T00:00:00.000Z',
ShippedDate: '1997-02-20T00:00:00.000Z',
Freight: 9.3,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10446,
CustomerID: 'TOMSP',
OrderDate: '1997-02-14T00:00:00.000Z',
ShippedDate: '1997-02-19T00:00:00.000Z',
Freight: 14.68,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10447,
CustomerID: 'RICAR',
OrderDate: '1997-02-14T00:00:00.000Z',
ShippedDate: '1997-03-07T00:00:00.000Z',
Freight: 68.66,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10448,
CustomerID: 'RANCH',
OrderDate: '1997-02-17T00:00:00.000Z',
ShippedDate: '1997-02-24T00:00:00.000Z',
Freight: 38.82,
ShipName: 'Rancho grande',
ShipAddress: 'Av. del Libertador 900',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10449,
CustomerID: 'BLONP',
OrderDate: '1997-02-18T00:00:00.000Z',
ShippedDate: '1997-02-27T00:00:00.000Z',
Freight: 53.3,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10450,
CustomerID: 'VICTE',
OrderDate: '1997-02-19T00:00:00.000Z',
ShippedDate: '1997-03-11T00:00:00.000Z',
Freight: 7.23,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10451,
CustomerID: 'QUICK',
OrderDate: '1997-02-19T00:00:00.000Z',
ShippedDate: '1997-03-12T00:00:00.000Z',
Freight: 189.09,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10452,
CustomerID: 'SAVEA',
OrderDate: '1997-02-20T00:00:00.000Z',
ShippedDate: '1997-02-26T00:00:00.000Z',
Freight: 140.26,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10453,
CustomerID: 'AROUT',
OrderDate: '1997-02-21T00:00:00.000Z',
ShippedDate: '1997-02-26T00:00:00.000Z',
Freight: 25.36,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10454,
CustomerID: 'LAMAI',
OrderDate: '1997-02-21T00:00:00.000Z',
ShippedDate: '1997-02-25T00:00:00.000Z',
Freight: 2.74,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10455,
CustomerID: 'WARTH',
OrderDate: '1997-02-24T00:00:00.000Z',
ShippedDate: '1997-03-03T00:00:00.000Z',
Freight: 180.45,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10456,
CustomerID: 'KOENE',
OrderDate: '1997-02-25T00:00:00.000Z',
ShippedDate: '1997-02-28T00:00:00.000Z',
Freight: 8.12,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10457,
CustomerID: 'KOENE',
OrderDate: '1997-02-25T00:00:00.000Z',
ShippedDate: '1997-03-03T00:00:00.000Z',
Freight: 11.57,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10458,
CustomerID: 'SUPRD',
OrderDate: '1997-02-26T00:00:00.000Z',
ShippedDate: '1997-03-04T00:00:00.000Z',
Freight: 147.06,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10459,
CustomerID: 'VICTE',
OrderDate: '1997-02-27T00:00:00.000Z',
ShippedDate: '1997-02-28T00:00:00.000Z',
Freight: 25.09,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10460,
CustomerID: 'FOLKO',
OrderDate: '1997-02-28T00:00:00.000Z',
ShippedDate: '1997-03-03T00:00:00.000Z',
Freight: 16.27,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10461,
CustomerID: 'LILAS',
OrderDate: '1997-02-28T00:00:00.000Z',
ShippedDate: '1997-03-05T00:00:00.000Z',
Freight: 148.61,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10462,
CustomerID: 'CONSH',
OrderDate: '1997-03-03T00:00:00.000Z',
ShippedDate: '1997-03-18T00:00:00.000Z',
Freight: 6.17,
ShipName: 'Consolidated Holdings',
ShipAddress: 'Berkeley Gardens 12 Brewery',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10463,
CustomerID: 'SUPRD',
OrderDate: '1997-03-04T00:00:00.000Z',
ShippedDate: '1997-03-06T00:00:00.000Z',
Freight: 14.78,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10464,
CustomerID: 'FURIB',
OrderDate: '1997-03-04T00:00:00.000Z',
ShippedDate: '1997-03-14T00:00:00.000Z',
Freight: 89,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10465,
CustomerID: 'VAFFE',
OrderDate: '1997-03-05T00:00:00.000Z',
ShippedDate: '1997-03-14T00:00:00.000Z',
Freight: 145.04,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10466,
CustomerID: 'COMMI',
OrderDate: '1997-03-06T00:00:00.000Z',
ShippedDate: '1997-03-13T00:00:00.000Z',
Freight: 11.93,
ShipName: 'Comércio Mineiro',
ShipAddress: 'Av. dos Lusíadas, 23',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10467,
CustomerID: 'MAGAA',
OrderDate: '1997-03-06T00:00:00.000Z',
ShippedDate: '1997-03-11T00:00:00.000Z',
Freight: 4.93,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10468,
CustomerID: 'KOENE',
OrderDate: '1997-03-07T00:00:00.000Z',
ShippedDate: '1997-03-12T00:00:00.000Z',
Freight: 44.12,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10469,
CustomerID: 'WHITC',
OrderDate: '1997-03-10T00:00:00.000Z',
ShippedDate: '1997-03-14T00:00:00.000Z',
Freight: 60.18,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10470,
CustomerID: 'BONAP',
OrderDate: '1997-03-11T00:00:00.000Z',
ShippedDate: '1997-03-14T00:00:00.000Z',
Freight: 64.56,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10471,
CustomerID: 'BSBEV',
OrderDate: '1997-03-11T00:00:00.000Z',
ShippedDate: '1997-03-18T00:00:00.000Z',
Freight: 45.59,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10472,
CustomerID: 'SEVES',
OrderDate: '1997-03-12T00:00:00.000Z',
ShippedDate: '1997-03-19T00:00:00.000Z',
Freight: 4.2,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10473,
CustomerID: 'ISLAT',
OrderDate: '1997-03-13T00:00:00.000Z',
ShippedDate: '1997-03-21T00:00:00.000Z',
Freight: 16.37,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10474,
CustomerID: 'PERIC',
OrderDate: '1997-03-13T00:00:00.000Z',
ShippedDate: '1997-03-21T00:00:00.000Z',
Freight: 83.49,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10475,
CustomerID: 'SUPRD',
OrderDate: '1997-03-14T00:00:00.000Z',
ShippedDate: '1997-04-04T00:00:00.000Z',
Freight: 68.52,
ShipName: 'Suprêmes délices',
{
OrderID: 10476,
CustomerID: 'HILAA',
OrderDate: '1997-03-17T00:00:00.000Z',
ShippedDate: '1997-03-24T00:00:00.000Z',
Freight: 4.41,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10477,
CustomerID: 'PRINI',
OrderDate: '1997-03-17T00:00:00.000Z',
ShippedDate: '1997-03-25T00:00:00.000Z',
Freight: 13.02,
ShipName: 'Princesa Isabel Vinhos',
ShipAddress: 'Estrada da saúde n. 58',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10478,
CustomerID: 'VICTE',
OrderDate: '1997-03-18T00:00:00.000Z',
ShippedDate: '1997-03-26T00:00:00.000Z',
Freight: 4.81,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10479,
CustomerID: 'RATTC',
OrderDate: '1997-03-19T00:00:00.000Z',
ShippedDate: '1997-03-21T00:00:00.000Z',
Freight: 708.95,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10480,
CustomerID: 'FOLIG',
OrderDate: '1997-03-20T00:00:00.000Z',
ShippedDate: '1997-03-24T00:00:00.000Z',
Freight: 1.35,
ShipName: 'Folies gourmandes',
ShipAddress: '184, chaussée de Tournai',
ShipCity: 'Lille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10481,
CustomerID: 'RICAR',
OrderDate: '1997-03-20T00:00:00.000Z',
ShippedDate: '1997-03-25T00:00:00.000Z',
Freight: 64.33,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10482,
CustomerID: 'LAZYK',
OrderDate: '1997-03-21T00:00:00.000Z',
ShippedDate: '1997-04-10T00:00:00.000Z',
Freight: 7.48,
ShipName: 'Lazy K Kountry Store',
ShipAddress: '12 Orchestra Terrace',
ShipCity: 'Walla Walla',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10483,
CustomerID: 'WHITC',
OrderDate: '1997-03-24T00:00:00.000Z',
ShippedDate: '1997-04-25T00:00:00.000Z',
Freight: 15.28,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10484,
CustomerID: 'BSBEV',
OrderDate: '1997-03-24T00:00:00.000Z',
ShippedDate: '1997-04-01T00:00:00.000Z',
Freight: 6.88,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10485,
CustomerID: 'LINOD',
OrderDate: '1997-03-25T00:00:00.000Z',
ShippedDate: '1997-03-31T00:00:00.000Z',
Freight: 64.45,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10486,
CustomerID: 'HILAA',
OrderDate: '1997-03-26T00:00:00.000Z',
ShippedDate: '1997-04-02T00:00:00.000Z',
Freight: 30.53,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10487,
CustomerID: 'QUEEN',
OrderDate: '1997-03-26T00:00:00.000Z',
ShippedDate: '1997-03-28T00:00:00.000Z',
Freight: 71.07,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10488,
CustomerID: 'FRANK',
OrderDate: '1997-03-27T00:00:00.000Z',
ShippedDate: '1997-04-02T00:00:00.000Z',
Freight: 4.93,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10489,
CustomerID: 'PICCO',
OrderDate: '1997-03-28T00:00:00.000Z',
ShippedDate: '1997-04-09T00:00:00.000Z',
Freight: 5.29,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10490,
CustomerID: 'HILAA',
OrderDate: '1997-03-31T00:00:00.000Z',
ShippedDate: '1997-04-03T00:00:00.000Z',
Freight: 210.19,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10491,
CustomerID: 'FURIB',
OrderDate: '1997-03-31T00:00:00.000Z',
ShippedDate: '1997-04-08T00:00:00.000Z',
Freight: 16.96,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10492,
CustomerID: 'BOTTM',
OrderDate: '1997-04-01T00:00:00.000Z',
ShippedDate: '1997-04-11T00:00:00.000Z',
Freight: 62.89,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
OrderID: 10493,
CustomerID: 'LAMAI',
OrderDate: '1997-04-02T00:00:00.000Z',
ShippedDate: '1997-04-10T00:00:00.000Z',
Freight: 10.64,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10494,
CustomerID: 'COMMI',
OrderDate: '1997-04-02T00:00:00.000Z',
ShippedDate: '1997-04-09T00:00:00.000Z',
Freight: 65.99,
ShipName: 'Comércio Mineiro',
ShipAddress: 'Av. dos Lusíadas, 23',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10495,
CustomerID: 'LAUGB',
OrderDate: '1997-04-03T00:00:00.000Z',
ShippedDate: '1997-04-11T00:00:00.000Z',
Freight: 4.65,
ShipName: 'Laughing Bacchus Wine Cellars',
ShipAddress: '2319 Elm St.',
ShipCity: 'Vancouver',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10496,
CustomerID: 'TRADH',
OrderDate: '1997-04-04T00:00:00.000Z',
ShippedDate: '1997-04-07T00:00:00.000Z',
Freight: 46.77,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10497,
CustomerID: 'LEHMS',
OrderDate: '1997-04-04T00:00:00.000Z',
ShippedDate: '1997-04-07T00:00:00.000Z',
Freight: 36.21,
{
OrderID: 10498,
CustomerID: 'HILAA',
OrderDate: '1997-04-07T00:00:00.000Z',
ShippedDate: '1997-04-11T00:00:00.000Z',
Freight: 29.75,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10499,
CustomerID: 'LILAS',
OrderDate: '1997-04-08T00:00:00.000Z',
ShippedDate: '1997-04-16T00:00:00.000Z',
Freight: 102.02,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10500,
CustomerID: 'LAMAI',
OrderDate: '1997-04-09T00:00:00.000Z',
ShippedDate: '1997-04-17T00:00:00.000Z',
Freight: 42.68,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10501,
CustomerID: 'BLAUS',
OrderDate: '1997-04-09T00:00:00.000Z',
ShippedDate: '1997-04-16T00:00:00.000Z',
Freight: 8.85,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10502,
CustomerID: 'PERIC',
OrderDate: '1997-04-10T00:00:00.000Z',
ShippedDate: '1997-04-29T00:00:00.000Z',
Freight: 69.32,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10503,
CustomerID: 'HUNGO',
OrderDate: '1997-04-11T00:00:00.000Z',
ShippedDate: '1997-04-16T00:00:00.000Z',
Freight: 16.74,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10504,
CustomerID: 'WHITC',
OrderDate: '1997-04-11T00:00:00.000Z',
ShippedDate: '1997-04-18T00:00:00.000Z',
Freight: 59.13,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10505,
CustomerID: 'MEREP',
OrderDate: '1997-04-14T00:00:00.000Z',
ShippedDate: '1997-04-21T00:00:00.000Z',
Freight: 7.13,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10506,
CustomerID: 'KOENE',
OrderDate: '1997-04-15T00:00:00.000Z',
ShippedDate: '1997-05-02T00:00:00.000Z',
Freight: 21.19,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10507,
CustomerID: 'ANTON',
OrderDate: '1997-04-15T00:00:00.000Z',
ShippedDate: '1997-04-22T00:00:00.000Z',
Freight: 47.45,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10508,
CustomerID: 'OTTIK',
OrderDate: '1997-04-16T00:00:00.000Z',
ShippedDate: '1997-05-13T00:00:00.000Z',
Freight: 4.99,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10509,
CustomerID: 'BLAUS',
OrderDate: '1997-04-17T00:00:00.000Z',
ShippedDate: '1997-04-29T00:00:00.000Z',
Freight: 0.15,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10510,
CustomerID: 'SAVEA',
OrderDate: '1997-04-18T00:00:00.000Z',
ShippedDate: '1997-04-28T00:00:00.000Z',
Freight: 367.63,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10511,
CustomerID: 'BONAP',
OrderDate: '1997-04-18T00:00:00.000Z',
ShippedDate: '1997-04-21T00:00:00.000Z',
Freight: 350.64,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10512,
CustomerID: 'FAMIA',
OrderDate: '1997-04-21T00:00:00.000Z',
ShippedDate: '1997-04-24T00:00:00.000Z',
Freight: 3.53,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10513,
CustomerID: 'WANDK',
OrderDate: '1997-04-22T00:00:00.000Z',
ShippedDate: '1997-04-28T00:00:00.000Z',
Freight: 105.65,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10514,
CustomerID: 'ERNSH',
OrderDate: '1997-04-22T00:00:00.000Z',
ShippedDate: '1997-05-16T00:00:00.000Z',
Freight: 789.95,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10515,
CustomerID: 'QUICK',
OrderDate: '1997-04-23T00:00:00.000Z',
ShippedDate: '1997-05-23T00:00:00.000Z',
Freight: 204.47,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10516,
CustomerID: 'HUNGO',
OrderDate: '1997-04-24T00:00:00.000Z',
ShippedDate: '1997-05-01T00:00:00.000Z',
Freight: 62.78,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10517,
CustomerID: 'NORTS',
OrderDate: '1997-04-24T00:00:00.000Z',
ShippedDate: '1997-04-29T00:00:00.000Z',
Freight: 32.07,
ShipName: 'North/South',
ShipAddress: 'South House 300 Queensbridge',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10518,
CustomerID: 'TORTU',
OrderDate: '1997-04-25T00:00:00.000Z',
ShippedDate: '1997-05-05T00:00:00.000Z',
Freight: 218.15,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10519,
CustomerID: 'CHOPS',
OrderDate: '1997-04-28T00:00:00.000Z',
ShippedDate: '1997-05-01T00:00:00.000Z',
Freight: 91.76,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10520,
CustomerID: 'SANTG',
OrderDate: '1997-04-29T00:00:00.000Z',
ShippedDate: '1997-05-01T00:00:00.000Z',
Freight: 13.37,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 10521,
CustomerID: 'CACTU',
OrderDate: '1997-04-29T00:00:00.000Z',
ShippedDate: '1997-05-02T00:00:00.000Z',
Freight: 17.22,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10522,
CustomerID: 'LEHMS',
OrderDate: '1997-04-30T00:00:00.000Z',
ShippedDate: '1997-05-06T00:00:00.000Z',
Freight: 45.33,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10523,
CustomerID: 'SEVES',
OrderDate: '1997-05-01T00:00:00.000Z',
ShippedDate: '1997-05-30T00:00:00.000Z',
Freight: 77.63,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10524,
CustomerID: 'BERGS',
OrderDate: '1997-05-01T00:00:00.000Z',
ShippedDate: '1997-05-07T00:00:00.000Z',
Freight: 244.79,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10525,
CustomerID: 'BONAP',
OrderDate: '1997-05-02T00:00:00.000Z',
ShippedDate: '1997-05-23T00:00:00.000Z',
Freight: 11.06,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10526,
CustomerID: 'WARTH',
OrderDate: '1997-05-05T00:00:00.000Z',
ShippedDate: '1997-05-15T00:00:00.000Z',
Freight: 58.59,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10527,
CustomerID: 'QUICK',
OrderDate: '1997-05-05T00:00:00.000Z',
ShippedDate: '1997-05-07T00:00:00.000Z',
Freight: 41.9,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10528,
CustomerID: 'GREAL',
OrderDate: '1997-05-06T00:00:00.000Z',
ShippedDate: '1997-05-09T00:00:00.000Z',
Freight: 3.35,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10529,
CustomerID: 'MAISD',
OrderDate: '1997-05-07T00:00:00.000Z',
ShippedDate: '1997-05-09T00:00:00.000Z',
Freight: 66.69,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10530,
CustomerID: 'PICCO',
OrderDate: '1997-05-08T00:00:00.000Z',
ShippedDate: '1997-05-12T00:00:00.000Z',
Freight: 339.22,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10531,
CustomerID: 'OCEAN',
OrderDate: '1997-05-08T00:00:00.000Z',
ShippedDate: '1997-05-19T00:00:00.000Z',
Freight: 8.12,
ShipName: 'Océano Atlántico Ltda.',
ShipAddress: 'Ing. Gustavo Moncada 8585 Piso 20-A',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10532,
CustomerID: 'EASTC',
OrderDate: '1997-05-09T00:00:00.000Z',
ShippedDate: '1997-05-12T00:00:00.000Z',
Freight: 74.46,
ShipName: 'Eastern Connection',
{
OrderID: 10533,
CustomerID: 'FOLKO',
OrderDate: '1997-05-12T00:00:00.000Z',
ShippedDate: '1997-05-22T00:00:00.000Z',
Freight: 188.04,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10534,
CustomerID: 'LEHMS',
OrderDate: '1997-05-12T00:00:00.000Z',
ShippedDate: '1997-05-14T00:00:00.000Z',
Freight: 27.94,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10535,
CustomerID: 'ANTON',
OrderDate: '1997-05-13T00:00:00.000Z',
ShippedDate: '1997-05-21T00:00:00.000Z',
Freight: 15.64,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10536,
CustomerID: 'LEHMS',
OrderDate: '1997-05-14T00:00:00.000Z',
ShippedDate: '1997-06-06T00:00:00.000Z',
Freight: 58.88,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10537,
CustomerID: 'RICSU',
OrderDate: '1997-05-14T00:00:00.000Z',
ShippedDate: '1997-05-19T00:00:00.000Z',
Freight: 78.85,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10538,
CustomerID: 'BSBEV',
OrderDate: '1997-05-15T00:00:00.000Z',
ShippedDate: '1997-05-16T00:00:00.000Z',
Freight: 4.87,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10539,
CustomerID: 'BSBEV',
OrderDate: '1997-05-16T00:00:00.000Z',
ShippedDate: '1997-05-23T00:00:00.000Z',
Freight: 12.36,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10540,
CustomerID: 'QUICK',
OrderDate: '1997-05-19T00:00:00.000Z',
ShippedDate: '1997-06-13T00:00:00.000Z',
Freight: 1007.64,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10541,
CustomerID: 'HANAR',
OrderDate: '1997-05-19T00:00:00.000Z',
ShippedDate: '1997-05-29T00:00:00.000Z',
Freight: 68.65,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10542,
CustomerID: 'KOENE',
OrderDate: '1997-05-20T00:00:00.000Z',
ShippedDate: '1997-05-26T00:00:00.000Z',
Freight: 10.95,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10543,
CustomerID: 'LILAS',
OrderDate: '1997-05-21T00:00:00.000Z',
ShippedDate: '1997-05-23T00:00:00.000Z',
Freight: 48.17,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10544,
CustomerID: 'LONEP',
OrderDate: '1997-05-21T00:00:00.000Z',
ShippedDate: '1997-05-30T00:00:00.000Z',
Freight: 24.91,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10545,
CustomerID: 'LAZYK',
OrderDate: '1997-05-22T00:00:00.000Z',
ShippedDate: '1997-06-26T00:00:00.000Z',
Freight: 11.92,
ShipName: 'Lazy K Kountry Store',
ShipAddress: '12 Orchestra Terrace',
ShipCity: 'Walla Walla',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10546,
CustomerID: 'VICTE',
OrderDate: '1997-05-23T00:00:00.000Z',
ShippedDate: '1997-05-27T00:00:00.000Z',
Freight: 194.72,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10547,
CustomerID: 'SEVES',
OrderDate: '1997-05-23T00:00:00.000Z',
ShippedDate: '1997-06-02T00:00:00.000Z',
Freight: 178.43,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10548,
CustomerID: 'TOMSP',
OrderDate: '1997-05-26T00:00:00.000Z',
ShippedDate: '1997-06-02T00:00:00.000Z',
Freight: 1.43,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10549,
CustomerID: 'QUICK',
OrderDate: '1997-05-27T00:00:00.000Z',
ShippedDate: '1997-05-30T00:00:00.000Z',
Freight: 171.24,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
OrderID: 10550,
CustomerID: 'GODOS',
OrderDate: '1997-05-28T00:00:00.000Z',
ShippedDate: '1997-06-06T00:00:00.000Z',
Freight: 4.32,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10551,
CustomerID: 'FURIB',
OrderDate: '1997-05-28T00:00:00.000Z',
ShippedDate: '1997-06-06T00:00:00.000Z',
Freight: 72.95,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10552,
CustomerID: 'HILAA',
OrderDate: '1997-05-29T00:00:00.000Z',
ShippedDate: '1997-06-05T00:00:00.000Z',
Freight: 83.22,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10553,
CustomerID: 'WARTH',
OrderDate: '1997-05-30T00:00:00.000Z',
ShippedDate: '1997-06-03T00:00:00.000Z',
Freight: 149.49,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10554,
CustomerID: 'OTTIK',
OrderDate: '1997-05-30T00:00:00.000Z',
ShippedDate: '1997-06-05T00:00:00.000Z',
Freight: 120.97,
{
OrderID: 10555,
CustomerID: 'SAVEA',
OrderDate: '1997-06-02T00:00:00.000Z',
ShippedDate: '1997-06-04T00:00:00.000Z',
Freight: 252.49,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10556,
CustomerID: 'SIMOB',
OrderDate: '1997-06-03T00:00:00.000Z',
ShippedDate: '1997-06-13T00:00:00.000Z',
Freight: 9.8,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10557,
CustomerID: 'LEHMS',
OrderDate: '1997-06-03T00:00:00.000Z',
ShippedDate: '1997-06-06T00:00:00.000Z',
Freight: 96.72,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10558,
CustomerID: 'AROUT',
OrderDate: '1997-06-04T00:00:00.000Z',
ShippedDate: '1997-06-10T00:00:00.000Z',
Freight: 72.97,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10559,
CustomerID: 'BLONP',
OrderDate: '1997-06-05T00:00:00.000Z',
ShippedDate: '1997-06-13T00:00:00.000Z',
Freight: 8.05,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10560,
CustomerID: 'FRANK',
OrderDate: '1997-06-06T00:00:00.000Z',
ShippedDate: '1997-06-09T00:00:00.000Z',
Freight: 36.65,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10561,
CustomerID: 'FOLKO',
OrderDate: '1997-06-06T00:00:00.000Z',
ShippedDate: '1997-06-09T00:00:00.000Z',
Freight: 242.21,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10562,
CustomerID: 'REGGC',
OrderDate: '1997-06-09T00:00:00.000Z',
ShippedDate: '1997-06-12T00:00:00.000Z',
Freight: 22.95,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10563,
CustomerID: 'RICAR',
OrderDate: '1997-06-10T00:00:00.000Z',
ShippedDate: '1997-06-24T00:00:00.000Z',
Freight: 60.43,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10564,
CustomerID: 'RATTC',
OrderDate: '1997-06-10T00:00:00.000Z',
ShippedDate: '1997-06-16T00:00:00.000Z',
Freight: 13.75,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10565,
CustomerID: 'MEREP',
OrderDate: '1997-06-11T00:00:00.000Z',
ShippedDate: '1997-06-18T00:00:00.000Z',
Freight: 7.15,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10566,
CustomerID: 'BLONP',
OrderDate: '1997-06-12T00:00:00.000Z',
ShippedDate: '1997-06-18T00:00:00.000Z',
Freight: 88.4,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10567,
CustomerID: 'HUNGO',
OrderDate: '1997-06-12T00:00:00.000Z',
ShippedDate: '1997-06-17T00:00:00.000Z',
Freight: 33.97,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10568,
CustomerID: 'GALED',
OrderDate: '1997-06-13T00:00:00.000Z',
ShippedDate: '1997-07-09T00:00:00.000Z',
Freight: 6.54,
ShipName: 'Galería del gastronómo',
ShipAddress: 'Rambla de Cataluña, 23',
ShipCity: 'Barcelona',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10569,
CustomerID: 'RATTC',
OrderDate: '1997-06-16T00:00:00.000Z',
ShippedDate: '1997-07-11T00:00:00.000Z',
Freight: 58.98,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10570,
CustomerID: 'MEREP',
OrderDate: '1997-06-17T00:00:00.000Z',
ShippedDate: '1997-06-19T00:00:00.000Z',
Freight: 188.99,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10571,
CustomerID: 'ERNSH',
OrderDate: '1997-06-17T00:00:00.000Z',
ShippedDate: '1997-07-04T00:00:00.000Z',
Freight: 26.06,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10572,
CustomerID: 'BERGS',
OrderDate: '1997-06-18T00:00:00.000Z',
ShippedDate: '1997-06-25T00:00:00.000Z',
Freight: 116.43,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10573,
CustomerID: 'ANTON',
OrderDate: '1997-06-19T00:00:00.000Z',
ShippedDate: '1997-06-20T00:00:00.000Z',
Freight: 84.84,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10574,
CustomerID: 'TRAIH',
OrderDate: '1997-06-19T00:00:00.000Z',
ShippedDate: '1997-06-30T00:00:00.000Z',
Freight: 37.6,
ShipName: "Trail' Head Gourmet Provisioners",
ShipAddress: '722 DaVinci Blvd.',
ShipCity: 'Kirkland',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10575,
CustomerID: 'MORGK',
OrderDate: '1997-06-20T00:00:00.000Z',
ShippedDate: '1997-06-30T00:00:00.000Z',
Freight: 127.34,
ShipName: 'Morgenstern Gesundkost',
ShipAddress: 'Heerstr. 22',
ShipCity: 'Leipzig',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10576,
CustomerID: 'TORTU',
OrderDate: '1997-06-23T00:00:00.000Z',
ShippedDate: '1997-06-30T00:00:00.000Z',
Freight: 18.56,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10577,
CustomerID: 'TRAIH',
OrderDate: '1997-06-23T00:00:00.000Z',
ShippedDate: '1997-06-30T00:00:00.000Z',
Freight: 25.41,
ShipName: "Trail' Head Gourmet Provisioners",
ShipAddress: '722 DaVinci Blvd.',
ShipCity: 'Kirkland',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10578,
CustomerID: 'BSBEV',
OrderDate: '1997-06-24T00:00:00.000Z',
ShippedDate: '1997-07-25T00:00:00.000Z',
Freight: 29.6,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10579,
CustomerID: 'LETSS',
OrderDate: '1997-06-25T00:00:00.000Z',
ShippedDate: '1997-07-04T00:00:00.000Z',
Freight: 13.73,
ShipName: "Let' Stop N Shop",
ShipAddress: '87 Polk St. Suite 5',
ShipCity: 'San Francisco',
ShipRegion: 'CA',
ShipCountry: 'USA',
},
{
OrderID: 10580,
CustomerID: 'OTTIK',
OrderDate: '1997-06-26T00:00:00.000Z',
ShippedDate: '1997-07-01T00:00:00.000Z',
Freight: 75.89,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10581,
CustomerID: 'FAMIA',
OrderDate: '1997-06-26T00:00:00.000Z',
ShippedDate: '1997-07-02T00:00:00.000Z',
Freight: 3.01,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10582,
CustomerID: 'BLAUS',
OrderDate: '1997-06-27T00:00:00.000Z',
ShippedDate: '1997-07-14T00:00:00.000Z',
Freight: 27.71,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10583,
CustomerID: 'WARTH',
OrderDate: '1997-06-30T00:00:00.000Z',
ShippedDate: '1997-07-04T00:00:00.000Z',
Freight: 7.28,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10584,
CustomerID: 'BLONP',
OrderDate: '1997-06-30T00:00:00.000Z',
ShippedDate: '1997-07-04T00:00:00.000Z',
Freight: 59.14,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10585,
CustomerID: 'WELLI',
OrderDate: '1997-07-01T00:00:00.000Z',
ShippedDate: '1997-07-10T00:00:00.000Z',
Freight: 13.41,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10586,
CustomerID: 'REGGC',
OrderDate: '1997-07-02T00:00:00.000Z',
ShippedDate: '1997-07-09T00:00:00.000Z',
Freight: 0.48,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10587,
CustomerID: 'QUEDE',
OrderDate: '1997-07-02T00:00:00.000Z',
ShippedDate: '1997-07-09T00:00:00.000Z',
Freight: 62.52,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10588,
CustomerID: 'QUICK',
OrderDate: '1997-07-03T00:00:00.000Z',
ShippedDate: '1997-07-10T00:00:00.000Z',
Freight: 194.67,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10589,
CustomerID: 'GREAL',
OrderDate: '1997-07-04T00:00:00.000Z',
ShippedDate: '1997-07-14T00:00:00.000Z',
Freight: 4.42,
ShipName: 'Great Lakes Food Market',
{
OrderID: 10590,
CustomerID: 'MEREP',
OrderDate: '1997-07-07T00:00:00.000Z',
ShippedDate: '1997-07-14T00:00:00.000Z',
Freight: 44.77,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10591,
CustomerID: 'VAFFE',
OrderDate: '1997-07-07T00:00:00.000Z',
ShippedDate: '1997-07-16T00:00:00.000Z',
Freight: 55.92,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10592,
CustomerID: 'LEHMS',
OrderDate: '1997-07-08T00:00:00.000Z',
ShippedDate: '1997-07-16T00:00:00.000Z',
Freight: 32.1,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10593,
CustomerID: 'LEHMS',
OrderDate: '1997-07-09T00:00:00.000Z',
ShippedDate: '1997-08-13T00:00:00.000Z',
Freight: 174.2,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10594,
CustomerID: 'OLDWO',
OrderDate: '1997-07-09T00:00:00.000Z',
ShippedDate: '1997-07-16T00:00:00.000Z',
Freight: 5.24,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10595,
CustomerID: 'ERNSH',
OrderDate: '1997-07-10T00:00:00.000Z',
ShippedDate: '1997-07-14T00:00:00.000Z',
Freight: 96.78,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10596,
CustomerID: 'WHITC',
OrderDate: '1997-07-11T00:00:00.000Z',
ShippedDate: '1997-08-12T00:00:00.000Z',
Freight: 16.34,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10597,
CustomerID: 'PICCO',
OrderDate: '1997-07-11T00:00:00.000Z',
ShippedDate: '1997-07-18T00:00:00.000Z',
Freight: 35.12,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10598,
CustomerID: 'RATTC',
OrderDate: '1997-07-14T00:00:00.000Z',
ShippedDate: '1997-07-18T00:00:00.000Z',
Freight: 44.42,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10599,
CustomerID: 'BSBEV',
OrderDate: '1997-07-15T00:00:00.000Z',
ShippedDate: '1997-07-21T00:00:00.000Z',
Freight: 29.98,
ShipName: 'B Beverages',
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10600,
CustomerID: 'HUNGC',
OrderDate: '1997-07-16T00:00:00.000Z',
ShippedDate: '1997-07-21T00:00:00.000Z',
Freight: 45.13,
ShipName: 'Hungry Coyote Import Store',
ShipAddress: 'City Center Plaza 516 Main St.',
ShipCity: 'Elgin',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10601,
CustomerID: 'HILAA',
OrderDate: '1997-07-16T00:00:00.000Z',
ShippedDate: '1997-07-22T00:00:00.000Z',
Freight: 58.3,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10602,
CustomerID: 'VAFFE',
OrderDate: '1997-07-17T00:00:00.000Z',
ShippedDate: '1997-07-22T00:00:00.000Z',
Freight: 2.92,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10603,
CustomerID: 'SAVEA',
OrderDate: '1997-07-18T00:00:00.000Z',
ShippedDate: '1997-08-08T00:00:00.000Z',
Freight: 48.77,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10604,
CustomerID: 'FURIB',
OrderDate: '1997-07-18T00:00:00.000Z',
ShippedDate: '1997-07-29T00:00:00.000Z',
Freight: 7.46,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10605,
CustomerID: 'MEREP',
OrderDate: '1997-07-21T00:00:00.000Z',
ShippedDate: '1997-07-29T00:00:00.000Z',
Freight: 379.13,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10606,
CustomerID: 'TRADH',
OrderDate: '1997-07-22T00:00:00.000Z',
ShippedDate: '1997-07-31T00:00:00.000Z',
Freight: 79.4,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
OrderID: 10607,
CustomerID: 'SAVEA',
OrderDate: '1997-07-22T00:00:00.000Z',
ShippedDate: '1997-07-25T00:00:00.000Z',
Freight: 200.24,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10608,
CustomerID: 'TOMSP',
OrderDate: '1997-07-23T00:00:00.000Z',
ShippedDate: '1997-08-01T00:00:00.000Z',
Freight: 27.79,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10609,
CustomerID: 'DUMON',
OrderDate: '1997-07-24T00:00:00.000Z',
ShippedDate: '1997-07-30T00:00:00.000Z',
Freight: 1.85,
ShipName: 'Du monde entier',
ShipAddress: '67, rue des Cinquante Otages',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10610,
CustomerID: 'LAMAI',
OrderDate: '1997-07-25T00:00:00.000Z',
ShippedDate: '1997-08-06T00:00:00.000Z',
Freight: 26.78,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10611,
CustomerID: 'WOLZA',
OrderDate: '1997-07-25T00:00:00.000Z',
ShippedDate: '1997-08-01T00:00:00.000Z',
Freight: 80.65,
{
OrderID: 10612,
CustomerID: 'SAVEA',
OrderDate: '1997-07-28T00:00:00.000Z',
ShippedDate: '1997-08-01T00:00:00.000Z',
Freight: 544.08,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10613,
CustomerID: 'HILAA',
OrderDate: '1997-07-29T00:00:00.000Z',
ShippedDate: '1997-08-01T00:00:00.000Z',
Freight: 8.11,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10614,
CustomerID: 'BLAUS',
OrderDate: '1997-07-29T00:00:00.000Z',
ShippedDate: '1997-08-01T00:00:00.000Z',
Freight: 1.93,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10615,
CustomerID: 'WILMK',
OrderDate: '1997-07-30T00:00:00.000Z',
ShippedDate: '1997-08-06T00:00:00.000Z',
Freight: 0.75,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10616,
CustomerID: 'GREAL',
OrderDate: '1997-07-31T00:00:00.000Z',
ShippedDate: '1997-08-05T00:00:00.000Z',
Freight: 116.53,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10617,
CustomerID: 'GREAL',
OrderDate: '1997-07-31T00:00:00.000Z',
ShippedDate: '1997-08-04T00:00:00.000Z',
Freight: 18.53,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10618,
CustomerID: 'MEREP',
OrderDate: '1997-08-01T00:00:00.000Z',
ShippedDate: '1997-08-08T00:00:00.000Z',
Freight: 154.68,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10619,
CustomerID: 'MEREP',
OrderDate: '1997-08-04T00:00:00.000Z',
ShippedDate: '1997-08-07T00:00:00.000Z',
Freight: 91.05,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10620,
CustomerID: 'LAUGB',
OrderDate: '1997-08-05T00:00:00.000Z',
ShippedDate: '1997-08-14T00:00:00.000Z',
Freight: 0.94,
ShipName: 'Laughing Bacchus Wine Cellars',
ShipAddress: '2319 Elm St.',
ShipCity: 'Vancouver',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10621,
CustomerID: 'ISLAT',
OrderDate: '1997-08-05T00:00:00.000Z',
ShippedDate: '1997-08-11T00:00:00.000Z',
Freight: 23.73,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10622,
CustomerID: 'RICAR',
OrderDate: '1997-08-06T00:00:00.000Z',
ShippedDate: '1997-08-11T00:00:00.000Z',
Freight: 50.97,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10623,
CustomerID: 'FRANK',
OrderDate: '1997-08-07T00:00:00.000Z',
ShippedDate: '1997-08-12T00:00:00.000Z',
Freight: 97.18,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10624,
CustomerID: 'THECR',
OrderDate: '1997-08-07T00:00:00.000Z',
ShippedDate: '1997-08-19T00:00:00.000Z',
Freight: 94.8,
ShipName: 'The Cracker Box',
ShipAddress: '55 Grizzly Peak Rd.',
ShipCity: 'Butte',
ShipRegion: 'MT',
ShipCountry: 'USA',
},
{
OrderID: 10625,
CustomerID: 'ANATR',
OrderDate: '1997-08-08T00:00:00.000Z',
ShippedDate: '1997-08-14T00:00:00.000Z',
Freight: 43.9,
ShipName: 'Ana Trujillo Emparedados y helados',
ShipAddress: 'Avda. de la Constitución 2222',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10626,
CustomerID: 'BERGS',
OrderDate: '1997-08-11T00:00:00.000Z',
ShippedDate: '1997-08-20T00:00:00.000Z',
Freight: 138.69,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10627,
CustomerID: 'SAVEA',
OrderDate: '1997-08-11T00:00:00.000Z',
ShippedDate: '1997-08-21T00:00:00.000Z',
Freight: 107.46,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10628,
CustomerID: 'BLONP',
OrderDate: '1997-08-12T00:00:00.000Z',
ShippedDate: '1997-08-20T00:00:00.000Z',
Freight: 30.36,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10629,
CustomerID: 'GODOS',
OrderDate: '1997-08-12T00:00:00.000Z',
ShippedDate: '1997-08-20T00:00:00.000Z',
Freight: 85.46,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10630,
CustomerID: 'KOENE',
OrderDate: '1997-08-13T00:00:00.000Z',
ShippedDate: '1997-08-19T00:00:00.000Z',
Freight: 32.35,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10631,
CustomerID: 'LAMAI',
OrderDate: '1997-08-14T00:00:00.000Z',
ShippedDate: '1997-08-15T00:00:00.000Z',
Freight: 0.87,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10632,
CustomerID: 'WANDK',
OrderDate: '1997-08-14T00:00:00.000Z',
ShippedDate: '1997-08-19T00:00:00.000Z',
Freight: 41.38,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10633,
CustomerID: 'ERNSH',
OrderDate: '1997-08-15T00:00:00.000Z',
ShippedDate: '1997-08-18T00:00:00.000Z',
Freight: 477.9,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10634,
CustomerID: 'FOLIG',
OrderDate: '1997-08-15T00:00:00.000Z',
ShippedDate: '1997-08-21T00:00:00.000Z',
Freight: 487.38,
ShipName: 'Folies gourmandes',
ShipAddress: '184, chaussée de Tournai',
ShipCity: 'Lille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10635,
CustomerID: 'MAGAA',
OrderDate: '1997-08-18T00:00:00.000Z',
ShippedDate: '1997-08-21T00:00:00.000Z',
Freight: 47.46,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10636,
CustomerID: 'WARTH',
OrderDate: '1997-08-19T00:00:00.000Z',
ShippedDate: '1997-08-26T00:00:00.000Z',
Freight: 1.15,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10637,
CustomerID: 'QUEEN',
OrderDate: '1997-08-19T00:00:00.000Z',
ShippedDate: '1997-08-26T00:00:00.000Z',
Freight: 201.29,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10638,
CustomerID: 'LINOD',
OrderDate: '1997-08-20T00:00:00.000Z',
ShippedDate: '1997-09-01T00:00:00.000Z',
Freight: 158.44,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10639,
CustomerID: 'SANTG',
OrderDate: '1997-08-20T00:00:00.000Z',
ShippedDate: '1997-08-27T00:00:00.000Z',
Freight: 38.64,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 10640,
CustomerID: 'WANDK',
OrderDate: '1997-08-21T00:00:00.000Z',
ShippedDate: '1997-08-28T00:00:00.000Z',
Freight: 23.55,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10641,
CustomerID: 'HILAA',
OrderDate: '1997-08-22T00:00:00.000Z',
ShippedDate: '1997-08-26T00:00:00.000Z',
Freight: 179.61,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10642,
CustomerID: 'SIMOB',
OrderDate: '1997-08-22T00:00:00.000Z',
ShippedDate: '1997-09-05T00:00:00.000Z',
Freight: 41.89,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10643,
CustomerID: 'ALFKI',
OrderDate: '1997-08-25T00:00:00.000Z',
ShippedDate: '1997-09-02T00:00:00.000Z',
Freight: 29.46,
ShipName: 'Alfreds Futterkiste',
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10644,
CustomerID: 'WELLI',
OrderDate: '1997-08-25T00:00:00.000Z',
ShippedDate: '1997-09-01T00:00:00.000Z',
Freight: 0.14,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10645,
CustomerID: 'HANAR',
OrderDate: '1997-08-26T00:00:00.000Z',
ShippedDate: '1997-09-02T00:00:00.000Z',
Freight: 12.41,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10646,
CustomerID: 'HUNGO',
OrderDate: '1997-08-27T00:00:00.000Z',
ShippedDate: '1997-09-03T00:00:00.000Z',
Freight: 142.33,
ShipName: 'Hungry Owl All-Night Grocers',
{
OrderID: 10647,
CustomerID: 'QUEDE',
OrderDate: '1997-08-27T00:00:00.000Z',
ShippedDate: '1997-09-03T00:00:00.000Z',
Freight: 45.54,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10648,
CustomerID: 'RICAR',
OrderDate: '1997-08-28T00:00:00.000Z',
ShippedDate: '1997-09-09T00:00:00.000Z',
Freight: 14.25,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10649,
CustomerID: 'MAISD',
OrderDate: '1997-08-28T00:00:00.000Z',
ShippedDate: '1997-08-29T00:00:00.000Z',
Freight: 6.2,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10650,
CustomerID: 'FAMIA',
OrderDate: '1997-08-29T00:00:00.000Z',
ShippedDate: '1997-09-03T00:00:00.000Z',
Freight: 176.81,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10651,
CustomerID: 'WANDK',
OrderDate: '1997-09-01T00:00:00.000Z',
ShippedDate: '1997-09-11T00:00:00.000Z',
Freight: 20.6,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10652,
CustomerID: 'GOURL',
OrderDate: '1997-09-01T00:00:00.000Z',
ShippedDate: '1997-09-08T00:00:00.000Z',
Freight: 7.14,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10653,
CustomerID: 'FRANK',
OrderDate: '1997-09-02T00:00:00.000Z',
ShippedDate: '1997-09-19T00:00:00.000Z',
Freight: 93.25,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10654,
CustomerID: 'BERGS',
OrderDate: '1997-09-02T00:00:00.000Z',
ShippedDate: '1997-09-11T00:00:00.000Z',
Freight: 55.26,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10655,
CustomerID: 'REGGC',
OrderDate: '1997-09-03T00:00:00.000Z',
ShippedDate: '1997-09-11T00:00:00.000Z',
Freight: 4.41,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10656,
CustomerID: 'GREAL',
OrderDate: '1997-09-04T00:00:00.000Z',
ShippedDate: '1997-09-10T00:00:00.000Z',
Freight: 57.15,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10657,
CustomerID: 'SAVEA',
OrderDate: '1997-09-04T00:00:00.000Z',
ShippedDate: '1997-09-15T00:00:00.000Z',
Freight: 352.69,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10658,
CustomerID: 'QUICK',
OrderDate: '1997-09-05T00:00:00.000Z',
ShippedDate: '1997-09-08T00:00:00.000Z',
Freight: 364.15,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10659,
CustomerID: 'QUEEN',
OrderDate: '1997-09-05T00:00:00.000Z',
ShippedDate: '1997-09-10T00:00:00.000Z',
Freight: 105.81,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10660,
CustomerID: 'HUNGC',
OrderDate: '1997-09-08T00:00:00.000Z',
ShippedDate: '1997-10-15T00:00:00.000Z',
Freight: 111.29,
ShipName: 'Hungry Coyote Import Store',
ShipAddress: 'City Center Plaza 516 Main St.',
ShipCity: 'Elgin',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10661,
CustomerID: 'HUNGO',
OrderDate: '1997-09-09T00:00:00.000Z',
ShippedDate: '1997-09-15T00:00:00.000Z',
Freight: 17.55,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10662,
CustomerID: 'LONEP',
OrderDate: '1997-09-09T00:00:00.000Z',
ShippedDate: '1997-09-18T00:00:00.000Z',
Freight: 1.28,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10663,
CustomerID: 'BONAP',
OrderDate: '1997-09-10T00:00:00.000Z',
ShippedDate: '1997-10-03T00:00:00.000Z',
Freight: 113.15,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
OrderID: 10664,
CustomerID: 'FURIB',
OrderDate: '1997-09-10T00:00:00.000Z',
ShippedDate: '1997-09-19T00:00:00.000Z',
Freight: 1.27,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10665,
CustomerID: 'LONEP',
OrderDate: '1997-09-11T00:00:00.000Z',
ShippedDate: '1997-09-17T00:00:00.000Z',
Freight: 26.31,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10666,
CustomerID: 'RICSU',
OrderDate: '1997-09-12T00:00:00.000Z',
ShippedDate: '1997-09-22T00:00:00.000Z',
Freight: 232.42,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10667,
CustomerID: 'ERNSH',
OrderDate: '1997-09-12T00:00:00.000Z',
ShippedDate: '1997-09-19T00:00:00.000Z',
Freight: 78.09,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10668,
CustomerID: 'WANDK',
OrderDate: '1997-09-15T00:00:00.000Z',
ShippedDate: '1997-09-23T00:00:00.000Z',
Freight: 47.22,
{
OrderID: 10669,
CustomerID: 'SIMOB',
OrderDate: '1997-09-15T00:00:00.000Z',
ShippedDate: '1997-09-22T00:00:00.000Z',
Freight: 24.39,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10670,
CustomerID: 'FRANK',
OrderDate: '1997-09-16T00:00:00.000Z',
ShippedDate: '1997-09-18T00:00:00.000Z',
Freight: 203.48,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10671,
CustomerID: 'FRANR',
OrderDate: '1997-09-17T00:00:00.000Z',
ShippedDate: '1997-09-24T00:00:00.000Z',
Freight: 30.34,
ShipName: 'France restauration',
ShipAddress: '54, rue Royale',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10672,
CustomerID: 'BERGS',
OrderDate: '1997-09-17T00:00:00.000Z',
ShippedDate: '1997-09-26T00:00:00.000Z',
Freight: 95.75,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10673,
CustomerID: 'WILMK',
OrderDate: '1997-09-18T00:00:00.000Z',
ShippedDate: '1997-09-19T00:00:00.000Z',
Freight: 22.76,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10674,
CustomerID: 'ISLAT',
OrderDate: '1997-09-18T00:00:00.000Z',
ShippedDate: '1997-09-30T00:00:00.000Z',
Freight: 0.9,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10675,
CustomerID: 'FRANK',
OrderDate: '1997-09-19T00:00:00.000Z',
ShippedDate: '1997-09-23T00:00:00.000Z',
Freight: 31.85,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10676,
CustomerID: 'TORTU',
OrderDate: '1997-09-22T00:00:00.000Z',
ShippedDate: '1997-09-29T00:00:00.000Z',
Freight: 2.01,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10677,
CustomerID: 'ANTON',
OrderDate: '1997-09-22T00:00:00.000Z',
ShippedDate: '1997-09-26T00:00:00.000Z',
Freight: 4.03,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10678,
CustomerID: 'SAVEA',
OrderDate: '1997-09-23T00:00:00.000Z',
ShippedDate: '1997-10-16T00:00:00.000Z',
Freight: 388.98,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10679,
CustomerID: 'BLONP',
OrderDate: '1997-09-23T00:00:00.000Z',
ShippedDate: '1997-09-30T00:00:00.000Z',
Freight: 27.94,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10680,
CustomerID: 'OLDWO',
OrderDate: '1997-09-24T00:00:00.000Z',
ShippedDate: '1997-09-26T00:00:00.000Z',
Freight: 26.61,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10681,
CustomerID: 'GREAL',
OrderDate: '1997-09-25T00:00:00.000Z',
ShippedDate: '1997-09-30T00:00:00.000Z',
Freight: 76.13,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10682,
CustomerID: 'ANTON',
OrderDate: '1997-09-25T00:00:00.000Z',
ShippedDate: '1997-10-01T00:00:00.000Z',
Freight: 36.13,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10683,
CustomerID: 'DUMON',
OrderDate: '1997-09-26T00:00:00.000Z',
ShippedDate: '1997-10-01T00:00:00.000Z',
Freight: 4.4,
ShipName: 'Du monde entier',
ShipAddress: '67, rue des Cinquante Otages',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10684,
CustomerID: 'OTTIK',
OrderDate: '1997-09-26T00:00:00.000Z',
ShippedDate: '1997-09-30T00:00:00.000Z',
Freight: 145.63,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10685,
CustomerID: 'GOURL',
OrderDate: '1997-09-29T00:00:00.000Z',
ShippedDate: '1997-10-03T00:00:00.000Z',
Freight: 33.75,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10686,
CustomerID: 'PICCO',
OrderDate: '1997-09-30T00:00:00.000Z',
ShippedDate: '1997-10-08T00:00:00.000Z',
Freight: 96.5,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10687,
CustomerID: 'HUNGO',
OrderDate: '1997-09-30T00:00:00.000Z',
ShippedDate: '1997-10-30T00:00:00.000Z',
Freight: 296.43,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10688,
CustomerID: 'VAFFE',
OrderDate: '1997-10-01T00:00:00.000Z',
ShippedDate: '1997-10-07T00:00:00.000Z',
Freight: 299.09,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10689,
CustomerID: 'BERGS',
OrderDate: '1997-10-01T00:00:00.000Z',
ShippedDate: '1997-10-07T00:00:00.000Z',
Freight: 13.42,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10690,
CustomerID: 'HANAR',
OrderDate: '1997-10-02T00:00:00.000Z',
ShippedDate: '1997-10-03T00:00:00.000Z',
Freight: 15.8,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10691,
CustomerID: 'QUICK',
OrderDate: '1997-10-03T00:00:00.000Z',
ShippedDate: '1997-10-22T00:00:00.000Z',
Freight: 810.05,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10692,
CustomerID: 'ALFKI',
OrderDate: '1997-10-03T00:00:00.000Z',
ShippedDate: '1997-10-13T00:00:00.000Z',
Freight: 61.02,
ShipName: "Alfred' Futterkiste",
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10693,
CustomerID: 'WHITC',
OrderDate: '1997-10-06T00:00:00.000Z',
ShippedDate: '1997-10-10T00:00:00.000Z',
Freight: 139.34,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10694,
CustomerID: 'QUICK',
OrderDate: '1997-10-06T00:00:00.000Z',
ShippedDate: '1997-10-09T00:00:00.000Z',
Freight: 398.36,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10695,
CustomerID: 'WILMK',
OrderDate: '1997-10-07T00:00:00.000Z',
ShippedDate: '1997-10-14T00:00:00.000Z',
Freight: 16.72,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10696,
CustomerID: 'WHITC',
OrderDate: '1997-10-08T00:00:00.000Z',
ShippedDate: '1997-10-14T00:00:00.000Z',
Freight: 102.55,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10697,
CustomerID: 'LINOD',
OrderDate: '1997-10-08T00:00:00.000Z',
ShippedDate: '1997-10-14T00:00:00.000Z',
Freight: 45.52,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10698,
CustomerID: 'ERNSH',
OrderDate: '1997-10-09T00:00:00.000Z',
ShippedDate: '1997-10-17T00:00:00.000Z',
Freight: 272.47,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10699,
CustomerID: 'MORGK',
OrderDate: '1997-10-09T00:00:00.000Z',
ShippedDate: '1997-10-13T00:00:00.000Z',
Freight: 0.58,
ShipName: 'Morgenstern Gesundkost',
ShipAddress: 'Heerstr. 22',
ShipCity: 'Leipzig',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10700,
CustomerID: 'SAVEA',
OrderDate: '1997-10-10T00:00:00.000Z',
ShippedDate: '1997-10-16T00:00:00.000Z',
Freight: 65.1,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10701,
CustomerID: 'HUNGO',
OrderDate: '1997-10-13T00:00:00.000Z',
ShippedDate: '1997-10-15T00:00:00.000Z',
Freight: 220.31,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10702,
CustomerID: 'ALFKI',
OrderDate: '1997-10-13T00:00:00.000Z',
ShippedDate: '1997-10-21T00:00:00.000Z',
Freight: 23.94,
ShipName: "Alfred' Futterkiste",
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10703,
CustomerID: 'FOLKO',
OrderDate: '1997-10-14T00:00:00.000Z',
ShippedDate: '1997-10-20T00:00:00.000Z',
Freight: 152.3,
ShipName: 'Folk och fä HB',
{
OrderID: 10704,
CustomerID: 'QUEEN',
OrderDate: '1997-10-14T00:00:00.000Z',
ShippedDate: '1997-11-07T00:00:00.000Z',
Freight: 4.78,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10705,
CustomerID: 'HILAA',
OrderDate: '1997-10-15T00:00:00.000Z',
ShippedDate: '1997-11-18T00:00:00.000Z',
Freight: 3.52,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10706,
CustomerID: 'OLDWO',
OrderDate: '1997-10-16T00:00:00.000Z',
ShippedDate: '1997-10-21T00:00:00.000Z',
Freight: 135.63,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10707,
CustomerID: 'AROUT',
OrderDate: '1997-10-16T00:00:00.000Z',
ShippedDate: '1997-10-23T00:00:00.000Z',
Freight: 21.74,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10708,
CustomerID: 'THEBI',
OrderDate: '1997-10-17T00:00:00.000Z',
ShippedDate: '1997-11-05T00:00:00.000Z',
Freight: 2.96,
ShipName: 'The Big Cheese',
ShipAddress: '89 Jefferson Way Suite 2',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10709,
CustomerID: 'GOURL',
OrderDate: '1997-10-17T00:00:00.000Z',
ShippedDate: '1997-11-20T00:00:00.000Z',
Freight: 210.8,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10710,
CustomerID: 'FRANS',
OrderDate: '1997-10-20T00:00:00.000Z',
ShippedDate: '1997-10-23T00:00:00.000Z',
Freight: 4.98,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10711,
CustomerID: 'SAVEA',
OrderDate: '1997-10-21T00:00:00.000Z',
ShippedDate: '1997-10-29T00:00:00.000Z',
Freight: 52.41,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10712,
CustomerID: 'HUNGO',
OrderDate: '1997-10-21T00:00:00.000Z',
ShippedDate: '1997-10-31T00:00:00.000Z',
Freight: 89.93,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10713,
CustomerID: 'SAVEA',
OrderDate: '1997-10-22T00:00:00.000Z',
ShippedDate: '1997-10-24T00:00:00.000Z',
Freight: 167.05,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10714,
CustomerID: 'SAVEA',
OrderDate: '1997-10-22T00:00:00.000Z',
ShippedDate: '1997-10-27T00:00:00.000Z',
Freight: 24.49,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10715,
CustomerID: 'BONAP',
OrderDate: '1997-10-23T00:00:00.000Z',
ShippedDate: '1997-10-29T00:00:00.000Z',
Freight: 63.2,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10716,
CustomerID: 'RANCH',
OrderDate: '1997-10-24T00:00:00.000Z',
ShippedDate: '1997-10-27T00:00:00.000Z',
Freight: 22.57,
ShipName: 'Rancho grande',
ShipAddress: 'Av. del Libertador 900',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10717,
CustomerID: 'FRANK',
OrderDate: '1997-10-24T00:00:00.000Z',
ShippedDate: '1997-10-29T00:00:00.000Z',
Freight: 59.25,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10718,
CustomerID: 'KOENE',
OrderDate: '1997-10-27T00:00:00.000Z',
ShippedDate: '1997-10-29T00:00:00.000Z',
Freight: 170.88,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10719,
CustomerID: 'LETSS',
OrderDate: '1997-10-27T00:00:00.000Z',
ShippedDate: '1997-11-05T00:00:00.000Z',
Freight: 51.44,
ShipName: "Let' Stop N Shop",
ShipAddress: '87 Polk St. Suite 5',
ShipCity: 'San Francisco',
ShipRegion: 'CA',
ShipCountry: 'USA',
},
{
OrderID: 10720,
CustomerID: 'QUEDE',
OrderDate: '1997-10-28T00:00:00.000Z',
ShippedDate: '1997-11-05T00:00:00.000Z',
Freight: 9.53,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
OrderID: 10721,
CustomerID: 'QUICK',
OrderDate: '1997-10-29T00:00:00.000Z',
ShippedDate: '1997-10-31T00:00:00.000Z',
Freight: 48.92,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10722,
CustomerID: 'SAVEA',
OrderDate: '1997-10-29T00:00:00.000Z',
ShippedDate: '1997-11-04T00:00:00.000Z',
Freight: 74.58,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10723,
CustomerID: 'WHITC',
OrderDate: '1997-10-30T00:00:00.000Z',
ShippedDate: '1997-11-25T00:00:00.000Z',
Freight: 21.72,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10724,
CustomerID: 'MEREP',
OrderDate: '1997-10-30T00:00:00.000Z',
ShippedDate: '1997-11-05T00:00:00.000Z',
Freight: 57.75,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10725,
CustomerID: 'FAMIA',
OrderDate: '1997-10-31T00:00:00.000Z',
ShippedDate: '1997-11-05T00:00:00.000Z',
Freight: 10.83,
{
OrderID: 10726,
CustomerID: 'EASTC',
OrderDate: '1997-11-03T00:00:00.000Z',
ShippedDate: '1997-12-05T00:00:00.000Z',
Freight: 16.56,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10727,
CustomerID: 'REGGC',
OrderDate: '1997-11-03T00:00:00.000Z',
ShippedDate: '1997-12-05T00:00:00.000Z',
Freight: 89.9,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10728,
CustomerID: 'QUEEN',
OrderDate: '1997-11-04T00:00:00.000Z',
ShippedDate: '1997-11-11T00:00:00.000Z',
Freight: 58.33,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10729,
CustomerID: 'LINOD',
OrderDate: '1997-11-04T00:00:00.000Z',
ShippedDate: '1997-11-14T00:00:00.000Z',
Freight: 141.06,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10730,
CustomerID: 'BONAP',
OrderDate: '1997-11-05T00:00:00.000Z',
ShippedDate: '1997-11-14T00:00:00.000Z',
Freight: 20.12,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10731,
CustomerID: 'CHOPS',
OrderDate: '1997-11-06T00:00:00.000Z',
ShippedDate: '1997-11-14T00:00:00.000Z',
Freight: 96.65,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10732,
CustomerID: 'BONAP',
OrderDate: '1997-11-06T00:00:00.000Z',
ShippedDate: '1997-11-07T00:00:00.000Z',
Freight: 16.97,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10733,
CustomerID: 'BERGS',
OrderDate: '1997-11-07T00:00:00.000Z',
ShippedDate: '1997-11-10T00:00:00.000Z',
Freight: 110.11,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10734,
CustomerID: 'GOURL',
OrderDate: '1997-11-07T00:00:00.000Z',
ShippedDate: '1997-11-12T00:00:00.000Z',
Freight: 1.63,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10735,
CustomerID: 'LETSS',
OrderDate: '1997-11-10T00:00:00.000Z',
ShippedDate: '1997-11-21T00:00:00.000Z',
Freight: 45.97,
ShipName: "Let' Stop N Shop",
ShipAddress: '87 Polk St. Suite 5',
ShipCity: 'San Francisco',
ShipRegion: 'CA',
ShipCountry: 'USA',
},
{
OrderID: 10736,
CustomerID: 'HUNGO',
OrderDate: '1997-11-11T00:00:00.000Z',
ShippedDate: '1997-11-21T00:00:00.000Z',
Freight: 44.1,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10737,
CustomerID: 'VINET',
OrderDate: '1997-11-11T00:00:00.000Z',
ShippedDate: '1997-11-18T00:00:00.000Z',
Freight: 7.79,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: "59 rue de l'Abbaye",
ShipCity: 'Reims',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10738,
CustomerID: 'SPECD',
OrderDate: '1997-11-12T00:00:00.000Z',
ShippedDate: '1997-11-18T00:00:00.000Z',
Freight: 2.91,
ShipName: 'Spécialités du monde',
ShipAddress: '25, rue Lauriston',
ShipCity: 'Paris',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10739,
CustomerID: 'VINET',
OrderDate: '1997-11-12T00:00:00.000Z',
ShippedDate: '1997-11-17T00:00:00.000Z',
Freight: 11.08,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: '59 rue de lAbbaye',
ShipCity: 'Reims',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10740,
CustomerID: 'WHITC',
OrderDate: '1997-11-13T00:00:00.000Z',
ShippedDate: '1997-11-25T00:00:00.000Z',
Freight: 81.88,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10741,
CustomerID: 'AROUT',
OrderDate: '1997-11-14T00:00:00.000Z',
ShippedDate: '1997-11-18T00:00:00.000Z',
Freight: 10.96,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10742,
CustomerID: 'BOTTM',
OrderDate: '1997-11-14T00:00:00.000Z',
ShippedDate: '1997-11-18T00:00:00.000Z',
Freight: 243.73,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10743,
CustomerID: 'AROUT',
OrderDate: '1997-11-17T00:00:00.000Z',
ShippedDate: '1997-11-21T00:00:00.000Z',
Freight: 23.72,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10744,
CustomerID: 'VAFFE',
OrderDate: '1997-11-17T00:00:00.000Z',
ShippedDate: '1997-11-24T00:00:00.000Z',
Freight: 69.19,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10745,
CustomerID: 'QUICK',
OrderDate: '1997-11-18T00:00:00.000Z',
ShippedDate: '1997-11-27T00:00:00.000Z',
Freight: 3.52,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10746,
CustomerID: 'CHOPS',
OrderDate: '1997-11-19T00:00:00.000Z',
ShippedDate: '1997-11-21T00:00:00.000Z',
Freight: 31.43,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10747,
CustomerID: 'PICCO',
OrderDate: '1997-11-19T00:00:00.000Z',
ShippedDate: '1997-11-26T00:00:00.000Z',
Freight: 117.33,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10748,
CustomerID: 'SAVEA',
OrderDate: '1997-11-20T00:00:00.000Z',
ShippedDate: '1997-11-28T00:00:00.000Z',
Freight: 232.55,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10749,
CustomerID: 'ISLAT',
OrderDate: '1997-11-20T00:00:00.000Z',
ShippedDate: '1997-12-19T00:00:00.000Z',
Freight: 61.53,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10750,
CustomerID: 'WARTH',
OrderDate: '1997-11-21T00:00:00.000Z',
ShippedDate: '1997-11-24T00:00:00.000Z',
Freight: 79.3,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10751,
CustomerID: 'RICSU',
OrderDate: '1997-11-24T00:00:00.000Z',
ShippedDate: '1997-12-03T00:00:00.000Z',
Freight: 130.79,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10752,
CustomerID: 'NORTS',
OrderDate: '1997-11-24T00:00:00.000Z',
ShippedDate: '1997-11-28T00:00:00.000Z',
Freight: 1.39,
ShipName: 'North/South',
ShipAddress: 'South House 300 Queensbridge',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10753,
CustomerID: 'FRANS',
OrderDate: '1997-11-25T00:00:00.000Z',
ShippedDate: '1997-11-27T00:00:00.000Z',
Freight: 7.7,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10754,
CustomerID: 'MAGAA',
OrderDate: '1997-11-25T00:00:00.000Z',
ShippedDate: '1997-11-27T00:00:00.000Z',
Freight: 2.38,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10755,
CustomerID: 'BONAP',
OrderDate: '1997-11-26T00:00:00.000Z',
ShippedDate: '1997-11-28T00:00:00.000Z',
Freight: 16.71,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10756,
CustomerID: 'SPLIR',
OrderDate: '1997-11-27T00:00:00.000Z',
ShippedDate: '1997-12-02T00:00:00.000Z',
Freight: 73.21,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10757,
CustomerID: 'SAVEA',
OrderDate: '1997-11-27T00:00:00.000Z',
ShippedDate: '1997-12-15T00:00:00.000Z',
Freight: 8.19,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10758,
CustomerID: 'RICSU',
OrderDate: '1997-11-28T00:00:00.000Z',
ShippedDate: '1997-12-04T00:00:00.000Z',
Freight: 138.17,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10759,
CustomerID: 'ANATR',
OrderDate: '1997-11-28T00:00:00.000Z',
ShippedDate: '1997-12-12T00:00:00.000Z',
Freight: 11.99,
ShipName: 'Ana Trujillo Emparedados y helados',
ShipAddress: 'Avda. de la Constitución 2222',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10760,
CustomerID: 'MAISD',
OrderDate: '1997-12-01T00:00:00.000Z',
ShippedDate: '1997-12-10T00:00:00.000Z',
Freight: 155.64,
ShipName: 'Maison Dewey',
{
OrderID: 10761,
CustomerID: 'RATTC',
OrderDate: '1997-12-02T00:00:00.000Z',
ShippedDate: '1997-12-08T00:00:00.000Z',
Freight: 18.66,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10762,
CustomerID: 'FOLKO',
OrderDate: '1997-12-02T00:00:00.000Z',
ShippedDate: '1997-12-09T00:00:00.000Z',
Freight: 328.74,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10763,
CustomerID: 'FOLIG',
OrderDate: '1997-12-03T00:00:00.000Z',
ShippedDate: '1997-12-08T00:00:00.000Z',
Freight: 37.35,
ShipName: 'Folies gourmandes',
ShipAddress: '184, chaussée de Tournai',
ShipCity: 'Lille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10764,
CustomerID: 'ERNSH',
OrderDate: '1997-12-03T00:00:00.000Z',
ShippedDate: '1997-12-08T00:00:00.000Z',
Freight: 145.45,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10765,
CustomerID: 'QUICK',
OrderDate: '1997-12-04T00:00:00.000Z',
ShippedDate: '1997-12-09T00:00:00.000Z',
Freight: 42.74,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10766,
CustomerID: 'OTTIK',
OrderDate: '1997-12-05T00:00:00.000Z',
ShippedDate: '1997-12-09T00:00:00.000Z',
Freight: 157.55,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10767,
CustomerID: 'SUPRD',
OrderDate: '1997-12-05T00:00:00.000Z',
ShippedDate: '1997-12-15T00:00:00.000Z',
Freight: 1.59,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10768,
CustomerID: 'AROUT',
OrderDate: '1997-12-08T00:00:00.000Z',
ShippedDate: '1997-12-15T00:00:00.000Z',
Freight: 146.32,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10769,
CustomerID: 'VAFFE',
OrderDate: '1997-12-08T00:00:00.000Z',
ShippedDate: '1997-12-12T00:00:00.000Z',
Freight: 65.06,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10770,
CustomerID: 'HANAR',
OrderDate: '1997-12-09T00:00:00.000Z',
ShippedDate: '1997-12-17T00:00:00.000Z',
Freight: 5.32,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10771,
CustomerID: 'ERNSH',
OrderDate: '1997-12-10T00:00:00.000Z',
ShippedDate: '1998-01-02T00:00:00.000Z',
Freight: 11.19,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10772,
CustomerID: 'LEHMS',
OrderDate: '1997-12-10T00:00:00.000Z',
ShippedDate: '1997-12-19T00:00:00.000Z',
Freight: 91.28,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10773,
CustomerID: 'ERNSH',
OrderDate: '1997-12-11T00:00:00.000Z',
ShippedDate: '1997-12-16T00:00:00.000Z',
Freight: 96.43,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10774,
CustomerID: 'FOLKO',
OrderDate: '1997-12-11T00:00:00.000Z',
ShippedDate: '1997-12-12T00:00:00.000Z',
Freight: 48.2,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10775,
CustomerID: 'THECR',
OrderDate: '1997-12-12T00:00:00.000Z',
ShippedDate: '1997-12-26T00:00:00.000Z',
Freight: 20.25,
ShipName: 'The Cracker Box',
ShipAddress: '55 Grizzly Peak Rd.',
ShipCity: 'Butte',
ShipRegion: 'MT',
ShipCountry: 'USA',
},
{
OrderID: 10776,
CustomerID: 'ERNSH',
OrderDate: '1997-12-15T00:00:00.000Z',
ShippedDate: '1997-12-18T00:00:00.000Z',
Freight: 351.53,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10777,
CustomerID: 'GOURL',
OrderDate: '1997-12-15T00:00:00.000Z',
ShippedDate: '1998-01-21T00:00:00.000Z',
Freight: 3.01,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
OrderID: 10778,
CustomerID: 'BERGS',
OrderDate: '1997-12-16T00:00:00.000Z',
ShippedDate: '1997-12-24T00:00:00.000Z',
Freight: 6.79,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10779,
CustomerID: 'MORGK',
OrderDate: '1997-12-16T00:00:00.000Z',
ShippedDate: '1998-01-14T00:00:00.000Z',
Freight: 58.13,
ShipName: 'Morgenstern Gesundkost',
ShipAddress: 'Heerstr. 22',
ShipCity: 'Leipzig',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10780,
CustomerID: 'LILAS',
OrderDate: '1997-12-16T00:00:00.000Z',
ShippedDate: '1997-12-25T00:00:00.000Z',
Freight: 42.13,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10781,
CustomerID: 'WARTH',
OrderDate: '1997-12-17T00:00:00.000Z',
ShippedDate: '1997-12-19T00:00:00.000Z',
Freight: 73.16,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10782,
CustomerID: 'CACTU',
OrderDate: '1997-12-17T00:00:00.000Z',
ShippedDate: '1997-12-22T00:00:00.000Z',
Freight: 1.1,
{
OrderID: 10783,
CustomerID: 'HANAR',
OrderDate: '1997-12-18T00:00:00.000Z',
ShippedDate: '1997-12-19T00:00:00.000Z',
Freight: 124.98,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10784,
CustomerID: 'MAGAA',
OrderDate: '1997-12-18T00:00:00.000Z',
ShippedDate: '1997-12-22T00:00:00.000Z',
Freight: 70.09,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10785,
CustomerID: 'GROSR',
OrderDate: '1997-12-18T00:00:00.000Z',
ShippedDate: '1997-12-24T00:00:00.000Z',
Freight: 1.51,
ShipName: 'GROSELLA-Restaurante',
ShipAddress: '5ª Ave. Los Palos Grandes',
ShipCity: 'Caracas',
ShipRegion: 'DF',
ShipCountry: 'Venezuela',
},
{
OrderID: 10786,
CustomerID: 'QUEEN',
OrderDate: '1997-12-19T00:00:00.000Z',
ShippedDate: '1997-12-23T00:00:00.000Z',
Freight: 110.87,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10787,
CustomerID: 'LAMAI',
OrderDate: '1997-12-19T00:00:00.000Z',
ShippedDate: '1997-12-26T00:00:00.000Z',
Freight: 249.93,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10788,
CustomerID: 'QUICK',
OrderDate: '1997-12-22T00:00:00.000Z',
ShippedDate: '1998-01-19T00:00:00.000Z',
Freight: 42.7,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10789,
CustomerID: 'FOLIG',
OrderDate: '1997-12-22T00:00:00.000Z',
ShippedDate: '1997-12-31T00:00:00.000Z',
Freight: 100.6,
ShipName: 'Folies gourmandes',
ShipAddress: '184, chaussée de Tournai',
ShipCity: 'Lille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10790,
CustomerID: 'GOURL',
OrderDate: '1997-12-22T00:00:00.000Z',
ShippedDate: '1997-12-26T00:00:00.000Z',
Freight: 28.23,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10791,
CustomerID: 'FRANK',
OrderDate: '1997-12-23T00:00:00.000Z',
ShippedDate: '1998-01-01T00:00:00.000Z',
Freight: 16.85,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10792,
CustomerID: 'WOLZA',
OrderDate: '1997-12-23T00:00:00.000Z',
ShippedDate: '1997-12-31T00:00:00.000Z',
Freight: 23.79,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10793,
CustomerID: 'AROUT',
OrderDate: '1997-12-24T00:00:00.000Z',
ShippedDate: '1998-01-08T00:00:00.000Z',
Freight: 4.52,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10794,
CustomerID: 'QUEDE',
OrderDate: '1997-12-24T00:00:00.000Z',
ShippedDate: '1998-01-02T00:00:00.000Z',
Freight: 21.49,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10795,
CustomerID: 'ERNSH',
OrderDate: '1997-12-24T00:00:00.000Z',
ShippedDate: '1998-01-20T00:00:00.000Z',
Freight: 126.66,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10796,
CustomerID: 'HILAA',
OrderDate: '1997-12-25T00:00:00.000Z',
ShippedDate: '1998-01-14T00:00:00.000Z',
Freight: 26.52,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10797,
CustomerID: 'DRACD',
OrderDate: '1997-12-25T00:00:00.000Z',
ShippedDate: '1998-01-05T00:00:00.000Z',
Freight: 33.35,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10798,
CustomerID: 'ISLAT',
OrderDate: '1997-12-26T00:00:00.000Z',
ShippedDate: '1998-01-05T00:00:00.000Z',
Freight: 2.33,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10799,
CustomerID: 'KOENE',
OrderDate: '1997-12-26T00:00:00.000Z',
ShippedDate: '1998-01-05T00:00:00.000Z',
Freight: 30.76,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10800,
CustomerID: 'SEVES',
OrderDate: '1997-12-26T00:00:00.000Z',
ShippedDate: '1998-01-05T00:00:00.000Z',
Freight: 137.44,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10801,
CustomerID: 'BOLID',
OrderDate: '1997-12-29T00:00:00.000Z',
ShippedDate: '1997-12-31T00:00:00.000Z',
Freight: 97.09,
ShipName: 'Bólido Comidas preparadas',
ShipAddress: 'C/ Araquil, 67',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10802,
CustomerID: 'SIMOB',
OrderDate: '1997-12-29T00:00:00.000Z',
ShippedDate: '1998-01-02T00:00:00.000Z',
Freight: 257.26,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10803,
CustomerID: 'WELLI',
OrderDate: '1997-12-30T00:00:00.000Z',
ShippedDate: '1998-01-06T00:00:00.000Z',
Freight: 55.23,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10804,
CustomerID: 'SEVES',
OrderDate: '1997-12-30T00:00:00.000Z',
ShippedDate: '1998-01-07T00:00:00.000Z',
Freight: 27.33,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10805,
CustomerID: 'THEBI',
OrderDate: '1997-12-30T00:00:00.000Z',
ShippedDate: '1998-01-09T00:00:00.000Z',
Freight: 237.34,
ShipName: 'The Big Cheese',
ShipAddress: '89 Jefferson Way Suite 2',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10806,
CustomerID: 'VICTE',
OrderDate: '1997-12-31T00:00:00.000Z',
ShippedDate: '1998-01-05T00:00:00.000Z',
Freight: 22.11,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10807,
CustomerID: 'FRANS',
OrderDate: '1997-12-31T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 1.36,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10808,
CustomerID: 'OLDWO',
OrderDate: '1998-01-01T00:00:00.000Z',
ShippedDate: '1998-01-09T00:00:00.000Z',
Freight: 45.53,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10809,
CustomerID: 'WELLI',
OrderDate: '1998-01-01T00:00:00.000Z',
ShippedDate: '1998-01-07T00:00:00.000Z',
Freight: 4.87,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10810,
CustomerID: 'LAUGB',
OrderDate: '1998-01-01T00:00:00.000Z',
ShippedDate: '1998-01-07T00:00:00.000Z',
Freight: 4.33,
ShipName: 'Laughing Bacchus Wine Cellars',
ShipAddress: '2319 Elm St.',
ShipCity: 'Vancouver',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10811,
CustomerID: 'LINOD',
OrderDate: '1998-01-02T00:00:00.000Z',
ShippedDate: '1998-01-08T00:00:00.000Z',
Freight: 31.22,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10812,
CustomerID: 'REGGC',
OrderDate: '1998-01-02T00:00:00.000Z',
ShippedDate: '1998-01-12T00:00:00.000Z',
Freight: 59.78,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10813,
CustomerID: 'RICAR',
OrderDate: '1998-01-05T00:00:00.000Z',
ShippedDate: '1998-01-09T00:00:00.000Z',
Freight: 47.38,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10814,
CustomerID: 'VICTE',
OrderDate: '1998-01-05T00:00:00.000Z',
ShippedDate: '1998-01-14T00:00:00.000Z',
Freight: 130.94,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10815,
CustomerID: 'SAVEA',
OrderDate: '1998-01-05T00:00:00.000Z',
ShippedDate: '1998-01-14T00:00:00.000Z',
Freight: 14.62,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10816,
CustomerID: 'GREAL',
OrderDate: '1998-01-06T00:00:00.000Z',
ShippedDate: '1998-02-04T00:00:00.000Z',
Freight: 719.78,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10817,
CustomerID: 'KOENE',
OrderDate: '1998-01-06T00:00:00.000Z',
ShippedDate: '1998-01-13T00:00:00.000Z',
Freight: 306.07,
ShipName: 'Königlich Essen',
{
OrderID: 10818,
CustomerID: 'MAGAA',
OrderDate: '1998-01-07T00:00:00.000Z',
ShippedDate: '1998-01-12T00:00:00.000Z',
Freight: 65.48,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10819,
CustomerID: 'CACTU',
OrderDate: '1998-01-07T00:00:00.000Z',
ShippedDate: '1998-01-16T00:00:00.000Z',
Freight: 19.76,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10820,
CustomerID: 'RATTC',
OrderDate: '1998-01-07T00:00:00.000Z',
ShippedDate: '1998-01-13T00:00:00.000Z',
Freight: 37.52,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10821,
CustomerID: 'SPLIR',
OrderDate: '1998-01-08T00:00:00.000Z',
ShippedDate: '1998-01-15T00:00:00.000Z',
Freight: 36.68,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10822,
CustomerID: 'TRAIH',
OrderDate: '1998-01-08T00:00:00.000Z',
ShippedDate: '1998-01-16T00:00:00.000Z',
Freight: 7,
ShipName: "Trail' Head Gourmet Provisioners",
ShipAddress: '722 DaVinci Blvd.',
ShipCity: 'Kirkland',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10823,
CustomerID: 'LILAS',
OrderDate: '1998-01-09T00:00:00.000Z',
ShippedDate: '1998-01-13T00:00:00.000Z',
Freight: 163.97,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10824,
CustomerID: 'FOLKO',
OrderDate: '1998-01-09T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 1.23,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10825,
CustomerID: 'DRACD',
OrderDate: '1998-01-09T00:00:00.000Z',
ShippedDate: '1998-01-14T00:00:00.000Z',
Freight: 79.25,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10826,
CustomerID: 'BLONP',
OrderDate: '1998-01-12T00:00:00.000Z',
ShippedDate: '1998-02-06T00:00:00.000Z',
Freight: 7.09,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10827,
CustomerID: 'BONAP',
OrderDate: '1998-01-12T00:00:00.000Z',
ShippedDate: '1998-02-06T00:00:00.000Z',
Freight: 63.54,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10828,
CustomerID: 'RANCH',
OrderDate: '1998-01-13T00:00:00.000Z',
ShippedDate: '1998-02-04T00:00:00.000Z',
Freight: 90.85,
ShipName: 'Rancho grande',
ShipAddress: 'Av. del Libertador 900',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10829,
CustomerID: 'ISLAT',
OrderDate: '1998-01-13T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 154.72,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10830,
CustomerID: 'TRADH',
OrderDate: '1998-01-13T00:00:00.000Z',
ShippedDate: '1998-01-21T00:00:00.000Z',
Freight: 81.83,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10831,
CustomerID: 'SANTG',
OrderDate: '1998-01-14T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 72.19,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 10832,
CustomerID: 'LAMAI',
OrderDate: '1998-01-14T00:00:00.000Z',
ShippedDate: '1998-01-19T00:00:00.000Z',
Freight: 43.26,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10833,
CustomerID: 'OTTIK',
OrderDate: '1998-01-15T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 71.49,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10834,
CustomerID: 'TRADH',
OrderDate: '1998-01-15T00:00:00.000Z',
ShippedDate: '1998-01-19T00:00:00.000Z',
Freight: 29.78,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
OrderID: 10835,
CustomerID: 'ALFKI',
OrderDate: '1998-01-15T00:00:00.000Z',
ShippedDate: '1998-01-21T00:00:00.000Z',
Freight: 69.53,
ShipName: "Alfred' Futterkiste",
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10836,
CustomerID: 'ERNSH',
OrderDate: '1998-01-16T00:00:00.000Z',
ShippedDate: '1998-01-21T00:00:00.000Z',
Freight: 411.88,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10837,
CustomerID: 'BERGS',
OrderDate: '1998-01-16T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 13.32,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10838,
CustomerID: 'LINOD',
OrderDate: '1998-01-19T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 59.28,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10839,
CustomerID: 'TRADH',
OrderDate: '1998-01-19T00:00:00.000Z',
ShippedDate: '1998-01-22T00:00:00.000Z',
Freight: 35.43,
{
OrderID: 10840,
CustomerID: 'LINOD',
OrderDate: '1998-01-19T00:00:00.000Z',
ShippedDate: '1998-02-16T00:00:00.000Z',
Freight: 2.71,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10841,
CustomerID: 'SUPRD',
OrderDate: '1998-01-20T00:00:00.000Z',
ShippedDate: '1998-01-29T00:00:00.000Z',
Freight: 424.3,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10842,
CustomerID: 'TORTU',
OrderDate: '1998-01-20T00:00:00.000Z',
ShippedDate: '1998-01-29T00:00:00.000Z',
Freight: 54.42,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10843,
CustomerID: 'VICTE',
OrderDate: '1998-01-21T00:00:00.000Z',
ShippedDate: '1998-01-26T00:00:00.000Z',
Freight: 9.26,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10844,
CustomerID: 'PICCO',
OrderDate: '1998-01-21T00:00:00.000Z',
ShippedDate: '1998-01-26T00:00:00.000Z',
Freight: 25.22,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10845,
CustomerID: 'QUICK',
OrderDate: '1998-01-21T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 212.98,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10846,
CustomerID: 'SUPRD',
OrderDate: '1998-01-22T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 56.46,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10847,
CustomerID: 'SAVEA',
OrderDate: '1998-01-22T00:00:00.000Z',
ShippedDate: '1998-02-10T00:00:00.000Z',
Freight: 487.57,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10848,
CustomerID: 'CONSH',
OrderDate: '1998-01-23T00:00:00.000Z',
ShippedDate: '1998-01-29T00:00:00.000Z',
Freight: 38.24,
ShipName: 'Consolidated Holdings',
ShipAddress: 'Berkeley Gardens 12 Brewery',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10849,
CustomerID: 'KOENE',
OrderDate: '1998-01-23T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 0.56,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10850,
CustomerID: 'VICTE',
OrderDate: '1998-01-23T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 49.19,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10851,
CustomerID: 'RICAR',
OrderDate: '1998-01-26T00:00:00.000Z',
ShippedDate: '1998-02-02T00:00:00.000Z',
Freight: 160.55,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10852,
CustomerID: 'RATTC',
OrderDate: '1998-01-26T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 174.05,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10853,
CustomerID: 'BLAUS',
OrderDate: '1998-01-27T00:00:00.000Z',
ShippedDate: '1998-02-03T00:00:00.000Z',
Freight: 53.83,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10854,
CustomerID: 'ERNSH',
OrderDate: '1998-01-27T00:00:00.000Z',
ShippedDate: '1998-02-05T00:00:00.000Z',
Freight: 100.22,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10855,
CustomerID: 'OLDWO',
OrderDate: '1998-01-27T00:00:00.000Z',
ShippedDate: '1998-02-04T00:00:00.000Z',
Freight: 170.97,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10856,
CustomerID: 'ANTON',
OrderDate: '1998-01-28T00:00:00.000Z',
ShippedDate: '1998-02-10T00:00:00.000Z',
Freight: 58.43,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10857,
CustomerID: 'BERGS',
OrderDate: '1998-01-28T00:00:00.000Z',
ShippedDate: '1998-02-06T00:00:00.000Z',
Freight: 188.85,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10858,
CustomerID: 'LACOR',
OrderDate: '1998-01-29T00:00:00.000Z',
ShippedDate: '1998-02-03T00:00:00.000Z',
Freight: 52.51,
ShipName: "La corne d'abondance",
ShipAddress: "67, avenue de l'Europe",
ShipCity: 'Versailles',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10859,
CustomerID: 'FRANK',
OrderDate: '1998-01-29T00:00:00.000Z',
ShippedDate: '1998-02-02T00:00:00.000Z',
Freight: 76.1,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10860,
CustomerID: 'FRANR',
OrderDate: '1998-01-29T00:00:00.000Z',
ShippedDate: '1998-02-04T00:00:00.000Z',
Freight: 19.26,
ShipName: 'France restauration',
ShipAddress: '54, rue Royale',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10861,
CustomerID: 'WHITC',
OrderDate: '1998-01-30T00:00:00.000Z',
ShippedDate: '1998-02-17T00:00:00.000Z',
Freight: 14.93,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10862,
CustomerID: 'LEHMS',
OrderDate: '1998-01-30T00:00:00.000Z',
ShippedDate: '1998-02-02T00:00:00.000Z',
Freight: 53.23,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10863,
CustomerID: 'HILAA',
OrderDate: '1998-02-02T00:00:00.000Z',
ShippedDate: '1998-02-17T00:00:00.000Z',
Freight: 30.26,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10864,
CustomerID: 'AROUT',
OrderDate: '1998-02-02T00:00:00.000Z',
ShippedDate: '1998-02-09T00:00:00.000Z',
Freight: 3.04,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10865,
CustomerID: 'QUICK',
OrderDate: '1998-02-02T00:00:00.000Z',
ShippedDate: '1998-02-12T00:00:00.000Z',
Freight: 348.14,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10866,
CustomerID: 'BERGS',
OrderDate: '1998-02-03T00:00:00.000Z',
ShippedDate: '1998-02-12T00:00:00.000Z',
Freight: 109.11,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10867,
CustomerID: 'LONEP',
OrderDate: '1998-02-03T00:00:00.000Z',
ShippedDate: '1998-02-11T00:00:00.000Z',
Freight: 1.93,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10868,
CustomerID: 'QUEEN',
OrderDate: '1998-02-04T00:00:00.000Z',
ShippedDate: '1998-02-23T00:00:00.000Z',
Freight: 191.27,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10869,
CustomerID: 'SEVES',
OrderDate: '1998-02-04T00:00:00.000Z',
ShippedDate: '1998-02-09T00:00:00.000Z',
Freight: 143.28,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10870,
CustomerID: 'WOLZA',
OrderDate: '1998-02-04T00:00:00.000Z',
ShippedDate: '1998-02-13T00:00:00.000Z',
Freight: 12.04,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10871,
CustomerID: 'BONAP',
OrderDate: '1998-02-05T00:00:00.000Z',
ShippedDate: '1998-02-10T00:00:00.000Z',
Freight: 112.27,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10872,
CustomerID: 'GODOS',
OrderDate: '1998-02-05T00:00:00.000Z',
ShippedDate: '1998-02-09T00:00:00.000Z',
Freight: 175.32,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10873,
CustomerID: 'WILMK',
OrderDate: '1998-02-06T00:00:00.000Z',
ShippedDate: '1998-02-09T00:00:00.000Z',
Freight: 0.82,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10874,
CustomerID: 'GODOS',
OrderDate: '1998-02-06T00:00:00.000Z',
ShippedDate: '1998-02-11T00:00:00.000Z',
Freight: 19.58,
ShipName: 'Godos Cocina Típica',
{
OrderID: 10875,
CustomerID: 'BERGS',
OrderDate: '1998-02-06T00:00:00.000Z',
ShippedDate: '1998-03-03T00:00:00.000Z',
Freight: 32.37,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10876,
CustomerID: 'BONAP',
OrderDate: '1998-02-09T00:00:00.000Z',
ShippedDate: '1998-02-12T00:00:00.000Z',
Freight: 60.42,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10877,
CustomerID: 'RICAR',
OrderDate: '1998-02-09T00:00:00.000Z',
ShippedDate: '1998-02-19T00:00:00.000Z',
Freight: 38.06,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10878,
CustomerID: 'QUICK',
OrderDate: '1998-02-10T00:00:00.000Z',
ShippedDate: '1998-02-12T00:00:00.000Z',
Freight: 46.69,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10879,
CustomerID: 'WILMK',
OrderDate: '1998-02-10T00:00:00.000Z',
ShippedDate: '1998-02-12T00:00:00.000Z',
Freight: 8.5,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10880,
CustomerID: 'FOLKO',
OrderDate: '1998-02-10T00:00:00.000Z',
ShippedDate: '1998-02-18T00:00:00.000Z',
Freight: 88.01,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10881,
CustomerID: 'CACTU',
OrderDate: '1998-02-11T00:00:00.000Z',
ShippedDate: '1998-02-18T00:00:00.000Z',
Freight: 2.84,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10882,
CustomerID: 'SAVEA',
OrderDate: '1998-02-11T00:00:00.000Z',
ShippedDate: '1998-02-20T00:00:00.000Z',
Freight: 23.1,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10883,
CustomerID: 'LONEP',
OrderDate: '1998-02-12T00:00:00.000Z',
ShippedDate: '1998-02-20T00:00:00.000Z',
Freight: 0.53,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10884,
CustomerID: 'LETSS',
OrderDate: '1998-02-12T00:00:00.000Z',
ShippedDate: '1998-02-13T00:00:00.000Z',
Freight: 90.97,
ShipName: "Let' Stop N Shop",
ShipAddress: '87 Polk St. Suite 5',
ShipCity: 'San Francisco',
ShipRegion: 'CA',
ShipCountry: 'USA',
},
{
OrderID: 10885,
CustomerID: 'SUPRD',
OrderDate: '1998-02-12T00:00:00.000Z',
ShippedDate: '1998-02-18T00:00:00.000Z',
Freight: 5.64,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10886,
CustomerID: 'HANAR',
OrderDate: '1998-02-13T00:00:00.000Z',
ShippedDate: '1998-03-02T00:00:00.000Z',
Freight: 4.99,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10887,
CustomerID: 'GALED',
OrderDate: '1998-02-13T00:00:00.000Z',
ShippedDate: '1998-02-16T00:00:00.000Z',
Freight: 1.25,
ShipName: 'Galería del gastronómo',
ShipAddress: 'Rambla de Cataluña, 23',
ShipCity: 'Barcelona',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10888,
CustomerID: 'GODOS',
OrderDate: '1998-02-16T00:00:00.000Z',
ShippedDate: '1998-02-23T00:00:00.000Z',
Freight: 51.87,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10889,
CustomerID: 'RATTC',
OrderDate: '1998-02-16T00:00:00.000Z',
ShippedDate: '1998-02-23T00:00:00.000Z',
Freight: 280.61,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10890,
CustomerID: 'DUMON',
OrderDate: '1998-02-16T00:00:00.000Z',
ShippedDate: '1998-02-18T00:00:00.000Z',
Freight: 32.76,
ShipName: 'Du monde entier',
ShipAddress: '67, rue des Cinquante Otages',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10891,
CustomerID: 'LEHMS',
OrderDate: '1998-02-17T00:00:00.000Z',
ShippedDate: '1998-02-19T00:00:00.000Z',
Freight: 20.37,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
OrderID: 10892,
CustomerID: 'MAISD',
OrderDate: '1998-02-17T00:00:00.000Z',
ShippedDate: '1998-02-19T00:00:00.000Z',
Freight: 120.27,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10893,
CustomerID: 'KOENE',
OrderDate: '1998-02-18T00:00:00.000Z',
ShippedDate: '1998-02-20T00:00:00.000Z',
Freight: 77.78,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10894,
CustomerID: 'SAVEA',
OrderDate: '1998-02-18T00:00:00.000Z',
ShippedDate: '1998-02-20T00:00:00.000Z',
Freight: 116.13,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10895,
CustomerID: 'ERNSH',
OrderDate: '1998-02-18T00:00:00.000Z',
ShippedDate: '1998-02-23T00:00:00.000Z',
Freight: 162.75,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10896,
CustomerID: 'MAISD',
OrderDate: '1998-02-19T00:00:00.000Z',
ShippedDate: '1998-02-27T00:00:00.000Z',
Freight: 32.45,
{
OrderID: 10897,
CustomerID: 'HUNGO',
OrderDate: '1998-02-19T00:00:00.000Z',
ShippedDate: '1998-02-25T00:00:00.000Z',
Freight: 603.54,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10898,
CustomerID: 'OCEAN',
OrderDate: '1998-02-20T00:00:00.000Z',
ShippedDate: '1998-03-06T00:00:00.000Z',
Freight: 1.27,
ShipName: 'Océano Atlántico Ltda.',
ShipAddress: 'Ing. Gustavo Moncada 8585 Piso 20-A',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10899,
CustomerID: 'LILAS',
OrderDate: '1998-02-20T00:00:00.000Z',
ShippedDate: '1998-02-26T00:00:00.000Z',
Freight: 1.21,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10900,
CustomerID: 'WELLI',
OrderDate: '1998-02-20T00:00:00.000Z',
ShippedDate: '1998-03-04T00:00:00.000Z',
Freight: 1.66,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10901,
CustomerID: 'HILAA',
OrderDate: '1998-02-23T00:00:00.000Z',
ShippedDate: '1998-02-26T00:00:00.000Z',
Freight: 62.09,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10902,
CustomerID: 'FOLKO',
OrderDate: '1998-02-23T00:00:00.000Z',
ShippedDate: '1998-03-03T00:00:00.000Z',
Freight: 44.15,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10903,
CustomerID: 'HANAR',
OrderDate: '1998-02-24T00:00:00.000Z',
ShippedDate: '1998-03-04T00:00:00.000Z',
Freight: 36.71,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10904,
CustomerID: 'WHITC',
OrderDate: '1998-02-24T00:00:00.000Z',
ShippedDate: '1998-02-27T00:00:00.000Z',
Freight: 162.95,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10905,
CustomerID: 'WELLI',
OrderDate: '1998-02-24T00:00:00.000Z',
ShippedDate: '1998-03-06T00:00:00.000Z',
Freight: 13.72,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10906,
CustomerID: 'WOLZA',
OrderDate: '1998-02-25T00:00:00.000Z',
ShippedDate: '1998-03-03T00:00:00.000Z',
Freight: 26.29,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10907,
CustomerID: 'SPECD',
OrderDate: '1998-02-25T00:00:00.000Z',
ShippedDate: '1998-02-27T00:00:00.000Z',
Freight: 9.19,
ShipName: 'Spécialités du monde',
ShipAddress: '25, rue Lauriston',
ShipCity: 'Paris',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10908,
CustomerID: 'REGGC',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-06T00:00:00.000Z',
Freight: 32.96,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10909,
CustomerID: 'SANTG',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-10T00:00:00.000Z',
Freight: 53.05,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 10910,
CustomerID: 'WILMK',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-04T00:00:00.000Z',
Freight: 38.11,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10911,
CustomerID: 'GODOS',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-05T00:00:00.000Z',
Freight: 38.19,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10912,
CustomerID: 'HUNGO',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 580.91,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10913,
CustomerID: 'QUEEN',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-04T00:00:00.000Z',
Freight: 33.05,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10914,
CustomerID: 'QUEEN',
OrderDate: '1998-02-27T00:00:00.000Z',
ShippedDate: '1998-03-02T00:00:00.000Z',
Freight: 21.19,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10915,
CustomerID: 'TORTU',
OrderDate: '1998-02-27T00:00:00.000Z',
ShippedDate: '1998-03-02T00:00:00.000Z',
Freight: 3.51,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10916,
CustomerID: 'RANCH',
OrderDate: '1998-02-27T00:00:00.000Z',
ShippedDate: '1998-03-09T00:00:00.000Z',
Freight: 63.77,
ShipName: 'Rancho grande',
ShipAddress: 'Av. del Libertador 900',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10917,
CustomerID: 'ROMEY',
OrderDate: '1998-03-02T00:00:00.000Z',
ShippedDate: '1998-03-11T00:00:00.000Z',
Freight: 8.29,
ShipName: 'Romero y tomillo',
ShipAddress: 'Gran Vía, 1',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10918,
CustomerID: 'BOTTM',
OrderDate: '1998-03-02T00:00:00.000Z',
ShippedDate: '1998-03-11T00:00:00.000Z',
Freight: 48.83,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10919,
CustomerID: 'LINOD',
OrderDate: '1998-03-02T00:00:00.000Z',
ShippedDate: '1998-03-04T00:00:00.000Z',
Freight: 19.8,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10920,
CustomerID: 'AROUT',
OrderDate: '1998-03-03T00:00:00.000Z',
ShippedDate: '1998-03-09T00:00:00.000Z',
Freight: 29.61,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10921,
CustomerID: 'VAFFE',
OrderDate: '1998-03-03T00:00:00.000Z',
ShippedDate: '1998-03-09T00:00:00.000Z',
Freight: 176.48,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10922,
CustomerID: 'HANAR',
OrderDate: '1998-03-03T00:00:00.000Z',
ShippedDate: '1998-03-05T00:00:00.000Z',
Freight: 62.74,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10923,
CustomerID: 'LAMAI',
OrderDate: '1998-03-03T00:00:00.000Z',
ShippedDate: '1998-03-13T00:00:00.000Z',
Freight: 68.26,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10924,
CustomerID: 'BERGS',
OrderDate: '1998-03-04T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 151.52,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10925,
CustomerID: 'HANAR',
OrderDate: '1998-03-04T00:00:00.000Z',
ShippedDate: '1998-03-13T00:00:00.000Z',
Freight: 2.27,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10926,
CustomerID: 'ANATR',
OrderDate: '1998-03-04T00:00:00.000Z',
ShippedDate: '1998-03-11T00:00:00.000Z',
Freight: 39.92,
ShipName: 'Ana Trujillo Emparedados y helados',
ShipAddress: 'Avda. de la Constitución 2222',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10927,
CustomerID: 'LACOR',
OrderDate: '1998-03-05T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 19.79,
ShipName: "La corne d'abondance",
ShipAddress: "67, avenue de l'Europe",
ShipCity: 'Versailles',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10928,
CustomerID: 'GALED',
OrderDate: '1998-03-05T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 1.36,
ShipName: 'Galería del gastronómo',
ShipAddress: 'Rambla de Cataluña, 23',
ShipCity: 'Barcelona',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10929,
CustomerID: 'FRANK',
OrderDate: '1998-03-05T00:00:00.000Z',
ShippedDate: '1998-03-12T00:00:00.000Z',
Freight: 33.93,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10930,
CustomerID: 'SUPRD',
OrderDate: '1998-03-06T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 15.55,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10931,
CustomerID: 'RICSU',
OrderDate: '1998-03-06T00:00:00.000Z',
ShippedDate: '1998-03-19T00:00:00.000Z',
Freight: 13.6,
ShipName: 'Richter Supermarkt',
{
OrderID: 10932,
CustomerID: 'BONAP',
OrderDate: '1998-03-06T00:00:00.000Z',
ShippedDate: '1998-03-24T00:00:00.000Z',
Freight: 134.64,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10933,
CustomerID: 'ISLAT',
OrderDate: '1998-03-06T00:00:00.000Z',
ShippedDate: '1998-03-16T00:00:00.000Z',
Freight: 54.15,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10934,
CustomerID: 'LEHMS',
OrderDate: '1998-03-09T00:00:00.000Z',
ShippedDate: '1998-03-12T00:00:00.000Z',
Freight: 32.01,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10935,
CustomerID: 'WELLI',
OrderDate: '1998-03-09T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 47.59,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10936,
CustomerID: 'GREAL',
OrderDate: '1998-03-09T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 33.68,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10937,
CustomerID: 'CACTU',
OrderDate: '1998-03-10T00:00:00.000Z',
ShippedDate: '1998-03-13T00:00:00.000Z',
Freight: 31.51,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10938,
CustomerID: 'QUICK',
OrderDate: '1998-03-10T00:00:00.000Z',
ShippedDate: '1998-03-16T00:00:00.000Z',
Freight: 31.89,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10939,
CustomerID: 'MAGAA',
OrderDate: '1998-03-10T00:00:00.000Z',
ShippedDate: '1998-03-13T00:00:00.000Z',
Freight: 76.33,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10940,
CustomerID: 'BONAP',
OrderDate: '1998-03-11T00:00:00.000Z',
ShippedDate: '1998-03-23T00:00:00.000Z',
Freight: 19.77,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10941,
CustomerID: 'SAVEA',
OrderDate: '1998-03-11T00:00:00.000Z',
ShippedDate: '1998-03-20T00:00:00.000Z',
Freight: 400.81,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10942,
CustomerID: 'REGGC',
OrderDate: '1998-03-11T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 17.95,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10943,
CustomerID: 'BSBEV',
OrderDate: '1998-03-11T00:00:00.000Z',
ShippedDate: '1998-03-19T00:00:00.000Z',
Freight: 2.17,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10944,
CustomerID: 'BOTTM',
OrderDate: '1998-03-12T00:00:00.000Z',
ShippedDate: '1998-03-13T00:00:00.000Z',
Freight: 52.92,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10945,
CustomerID: 'MORGK',
OrderDate: '1998-03-12T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 10.22,
ShipName: 'Morgenstern Gesundkost',
ShipAddress: 'Heerstr. 22',
ShipCity: 'Leipzig',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10946,
CustomerID: 'VAFFE',
OrderDate: '1998-03-12T00:00:00.000Z',
ShippedDate: '1998-03-19T00:00:00.000Z',
Freight: 27.2,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10947,
CustomerID: 'BSBEV',
OrderDate: '1998-03-13T00:00:00.000Z',
ShippedDate: '1998-03-16T00:00:00.000Z',
Freight: 3.26,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10948,
CustomerID: 'GODOS',
OrderDate: '1998-03-13T00:00:00.000Z',
ShippedDate: '1998-03-19T00:00:00.000Z',
Freight: 23.39,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
OrderID: 10949,
CustomerID: 'BOTTM',
OrderDate: '1998-03-13T00:00:00.000Z',
ShippedDate: '1998-03-17T00:00:00.000Z',
Freight: 74.44,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10950,
CustomerID: 'MAGAA',
OrderDate: '1998-03-16T00:00:00.000Z',
ShippedDate: '1998-03-23T00:00:00.000Z',
Freight: 2.5,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10951,
CustomerID: 'RICSU',
OrderDate: '1998-03-16T00:00:00.000Z',
ShippedDate: '1998-04-07T00:00:00.000Z',
Freight: 30.85,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10952,
CustomerID: 'ALFKI',
OrderDate: '1998-03-16T00:00:00.000Z',
ShippedDate: '1998-03-24T00:00:00.000Z',
Freight: 40.42,
ShipName: "Alfred' Futterkiste",
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10953,
CustomerID: 'AROUT',
OrderDate: '1998-03-16T00:00:00.000Z',
ShippedDate: '1998-03-25T00:00:00.000Z',
Freight: 23.72,
{
OrderID: 10954,
CustomerID: 'LINOD',
OrderDate: '1998-03-17T00:00:00.000Z',
ShippedDate: '1998-03-20T00:00:00.000Z',
Freight: 27.91,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10955,
CustomerID: 'FOLKO',
OrderDate: '1998-03-17T00:00:00.000Z',
ShippedDate: '1998-03-20T00:00:00.000Z',
Freight: 3.26,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10956,
CustomerID: 'BLAUS',
OrderDate: '1998-03-17T00:00:00.000Z',
ShippedDate: '1998-03-20T00:00:00.000Z',
Freight: 44.65,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10957,
CustomerID: 'HILAA',
OrderDate: '1998-03-18T00:00:00.000Z',
ShippedDate: '1998-03-27T00:00:00.000Z',
Freight: 105.36,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10958,
CustomerID: 'OCEAN',
OrderDate: '1998-03-18T00:00:00.000Z',
ShippedDate: '1998-03-27T00:00:00.000Z',
Freight: 49.56,
ShipName: 'Océano Atlántico Ltda.',
ShipAddress: 'Ing. Gustavo Moncada 8585 Piso 20-A',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10959,
CustomerID: 'GOURL',
OrderDate: '1998-03-18T00:00:00.000Z',
ShippedDate: '1998-03-23T00:00:00.000Z',
Freight: 4.98,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10960,
CustomerID: 'HILAA',
OrderDate: '1998-03-19T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 2.08,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10961,
CustomerID: 'QUEEN',
OrderDate: '1998-03-19T00:00:00.000Z',
ShippedDate: '1998-03-30T00:00:00.000Z',
Freight: 104.47,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10962,
CustomerID: 'QUICK',
OrderDate: '1998-03-19T00:00:00.000Z',
ShippedDate: '1998-03-23T00:00:00.000Z',
Freight: 275.79,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10963,
CustomerID: 'FURIB',
OrderDate: '1998-03-19T00:00:00.000Z',
ShippedDate: '1998-03-26T00:00:00.000Z',
Freight: 2.7,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10964,
CustomerID: 'SPECD',
OrderDate: '1998-03-20T00:00:00.000Z',
ShippedDate: '1998-03-24T00:00:00.000Z',
Freight: 87.38,
ShipName: 'Spécialités du monde',
ShipAddress: '25, rue Lauriston',
ShipCity: 'Paris',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10965,
CustomerID: 'OLDWO',
OrderDate: '1998-03-20T00:00:00.000Z',
ShippedDate: '1998-03-30T00:00:00.000Z',
Freight: 144.38,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10966,
CustomerID: 'CHOPS',
OrderDate: '1998-03-20T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 27.19,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10967,
CustomerID: 'TOMSP',
OrderDate: '1998-03-23T00:00:00.000Z',
ShippedDate: '1998-04-02T00:00:00.000Z',
Freight: 62.22,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10968,
CustomerID: 'ERNSH',
OrderDate: '1998-03-23T00:00:00.000Z',
ShippedDate: '1998-04-01T00:00:00.000Z',
Freight: 74.6,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10969,
CustomerID: 'COMMI',
OrderDate: '1998-03-23T00:00:00.000Z',
ShippedDate: '1998-03-30T00:00:00.000Z',
Freight: 0.21,
ShipName: 'Comércio Mineiro',
ShipAddress: 'Av. dos Lusíadas, 23',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10970,
CustomerID: 'BOLID',
OrderDate: '1998-03-24T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 16.16,
ShipName: 'Bólido Comidas preparadas',
ShipAddress: 'C/ Araquil, 67',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10971,
CustomerID: 'FRANR',
OrderDate: '1998-03-24T00:00:00.000Z',
ShippedDate: '1998-04-02T00:00:00.000Z',
Freight: 121.82,
ShipName: 'France restauration',
ShipAddress: '54, rue Royale',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10972,
CustomerID: 'LACOR',
OrderDate: '1998-03-24T00:00:00.000Z',
ShippedDate: '1998-03-26T00:00:00.000Z',
Freight: 0.02,
ShipName: "La corne d'abondance",
ShipAddress: "67, avenue de l'Europe",
ShipCity: 'Versailles',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10973,
CustomerID: 'LACOR',
OrderDate: '1998-03-24T00:00:00.000Z',
ShippedDate: '1998-03-27T00:00:00.000Z',
Freight: 15.17,
ShipName: "La corne d'abondance",
ShipAddress: "67, avenue de l'Europe",
ShipCity: 'Versailles',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10974,
CustomerID: 'SPLIR',
OrderDate: '1998-03-25T00:00:00.000Z',
ShippedDate: '1998-04-03T00:00:00.000Z',
Freight: 12.96,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10975,
CustomerID: 'BOTTM',
OrderDate: '1998-03-25T00:00:00.000Z',
ShippedDate: '1998-03-27T00:00:00.000Z',
Freight: 32.27,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10976,
CustomerID: 'HILAA',
OrderDate: '1998-03-25T00:00:00.000Z',
ShippedDate: '1998-04-03T00:00:00.000Z',
Freight: 37.97,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10977,
CustomerID: 'FOLKO',
OrderDate: '1998-03-26T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 208.5,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10978,
CustomerID: 'MAISD',
OrderDate: '1998-03-26T00:00:00.000Z',
ShippedDate: '1998-04-23T00:00:00.000Z',
Freight: 32.82,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10979,
CustomerID: 'ERNSH',
OrderDate: '1998-03-26T00:00:00.000Z',
ShippedDate: '1998-03-31T00:00:00.000Z',
Freight: 353.07,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10980,
CustomerID: 'FOLKO',
OrderDate: '1998-03-27T00:00:00.000Z',
ShippedDate: '1998-04-17T00:00:00.000Z',
Freight: 1.26,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10981,
CustomerID: 'HANAR',
OrderDate: '1998-03-27T00:00:00.000Z',
ShippedDate: '1998-04-02T00:00:00.000Z',
Freight: 193.37,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10982,
CustomerID: 'BOTTM',
OrderDate: '1998-03-27T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 14.01,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10983,
CustomerID: 'SAVEA',
OrderDate: '1998-03-27T00:00:00.000Z',
ShippedDate: '1998-04-06T00:00:00.000Z',
Freight: 657.54,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10984,
CustomerID: 'SAVEA',
OrderDate: '1998-03-30T00:00:00.000Z',
ShippedDate: '1998-04-03T00:00:00.000Z',
Freight: 211.22,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10985,
CustomerID: 'HUNGO',
OrderDate: '1998-03-30T00:00:00.000Z',
ShippedDate: '1998-04-02T00:00:00.000Z',
Freight: 91.51,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10986,
CustomerID: 'OCEAN',
OrderDate: '1998-03-30T00:00:00.000Z',
ShippedDate: '1998-04-21T00:00:00.000Z',
Freight: 217.86,
ShipName: 'Océano Atlántico Ltda.',
ShipAddress: 'Ing. Gustavo Moncada 8585 Piso 20-A',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10987,
CustomerID: 'EASTC',
OrderDate: '1998-03-31T00:00:00.000Z',
ShippedDate: '1998-04-06T00:00:00.000Z',
Freight: 185.48,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10988,
CustomerID: 'RATTC',
OrderDate: '1998-03-31T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 61.14,
ShipName: 'Rattlesnake Canyon Grocery',
{
OrderID: 10989,
CustomerID: 'QUEDE',
OrderDate: '1998-03-31T00:00:00.000Z',
ShippedDate: '1998-04-02T00:00:00.000Z',
Freight: 34.76,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10990,
CustomerID: 'ERNSH',
OrderDate: '1998-04-01T00:00:00.000Z',
ShippedDate: '1998-04-07T00:00:00.000Z',
Freight: 117.61,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10991,
CustomerID: 'QUICK',
OrderDate: '1998-04-01T00:00:00.000Z',
ShippedDate: '1998-04-07T00:00:00.000Z',
Freight: 38.51,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10992,
CustomerID: 'THEBI',
OrderDate: '1998-04-01T00:00:00.000Z',
ShippedDate: '1998-04-03T00:00:00.000Z',
Freight: 4.27,
ShipName: 'The Big Cheese',
ShipAddress: '89 Jefferson Way Suite 2',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10993,
CustomerID: 'FOLKO',
OrderDate: '1998-04-01T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 8.81,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10994,
CustomerID: 'VAFFE',
OrderDate: '1998-04-02T00:00:00.000Z',
ShippedDate: '1998-04-09T00:00:00.000Z',
Freight: 65.53,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10995,
CustomerID: 'PERIC',
OrderDate: '1998-04-02T00:00:00.000Z',
ShippedDate: '1998-04-06T00:00:00.000Z',
Freight: 46,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10996,
CustomerID: 'QUICK',
OrderDate: '1998-04-02T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 1.12,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10997,
CustomerID: 'LILAS',
OrderDate: '1998-04-03T00:00:00.000Z',
ShippedDate: '1998-04-13T00:00:00.000Z',
Freight: 73.91,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10998,
CustomerID: 'WOLZA',
OrderDate: '1998-04-03T00:00:00.000Z',
ShippedDate: '1998-04-17T00:00:00.000Z',
Freight: 20.31,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10999,
CustomerID: 'OTTIK',
OrderDate: '1998-04-03T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 96.35,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11000,
CustomerID: 'RATTC',
OrderDate: '1998-04-06T00:00:00.000Z',
ShippedDate: '1998-04-14T00:00:00.000Z',
Freight: 55.12,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 11001,
CustomerID: 'FOLKO',
OrderDate: '1998-04-06T00:00:00.000Z',
ShippedDate: '1998-04-14T00:00:00.000Z',
Freight: 197.3,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 11002,
CustomerID: 'SAVEA',
OrderDate: '1998-04-06T00:00:00.000Z',
ShippedDate: '1998-04-16T00:00:00.000Z',
Freight: 141.16,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 11003,
CustomerID: 'THECR',
OrderDate: '1998-04-06T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 14.91,
ShipName: 'The Cracker Box',
ShipAddress: '55 Grizzly Peak Rd.',
ShipCity: 'Butte',
ShipRegion: 'MT',
ShipCountry: 'USA',
},
{
OrderID: 11004,
CustomerID: 'MAISD',
OrderDate: '1998-04-07T00:00:00.000Z',
ShippedDate: '1998-04-20T00:00:00.000Z',
Freight: 44.84,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 11005,
CustomerID: 'WILMK',
OrderDate: '1998-04-07T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 0.75,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
OrderID: 11006,
CustomerID: 'GREAL',
OrderDate: '1998-04-07T00:00:00.000Z',
ShippedDate: '1998-04-15T00:00:00.000Z',
Freight: 25.19,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 11007,
CustomerID: 'PRINI',
OrderDate: '1998-04-08T00:00:00.000Z',
ShippedDate: '1998-04-13T00:00:00.000Z',
Freight: 202.24,
ShipName: 'Princesa Isabel Vinhos',
ShipAddress: 'Estrada da saúde n. 58',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 11008,
CustomerID: 'ERNSH',
OrderDate: '1998-04-08T00:00:00.000Z',
ShippedDate: null,
Freight: 79.46,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 11009,
CustomerID: 'GODOS',
OrderDate: '1998-04-08T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 59.11,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 11010,
CustomerID: 'REGGC',
OrderDate: '1998-04-09T00:00:00.000Z',
ShippedDate: '1998-04-21T00:00:00.000Z',
Freight: 28.71,
{
OrderID: 11011,
CustomerID: 'ALFKI',
OrderDate: '1998-04-09T00:00:00.000Z',
ShippedDate: '1998-04-13T00:00:00.000Z',
Freight: 1.21,
ShipName: "Alfred' Futterkiste",
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11012,
CustomerID: 'FRANK',
OrderDate: '1998-04-09T00:00:00.000Z',
ShippedDate: '1998-04-17T00:00:00.000Z',
Freight: 242.95,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11013,
CustomerID: 'ROMEY',
OrderDate: '1998-04-09T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 32.99,
ShipName: 'Romero y tomillo',
ShipAddress: 'Gran Vía, 1',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 11014,
CustomerID: 'LINOD',
OrderDate: '1998-04-10T00:00:00.000Z',
ShippedDate: '1998-04-15T00:00:00.000Z',
Freight: 23.6,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 11015,
CustomerID: 'SANTG',
OrderDate: '1998-04-10T00:00:00.000Z',
ShippedDate: '1998-04-20T00:00:00.000Z',
Freight: 4.62,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 11016,
CustomerID: 'AROUT',
OrderDate: '1998-04-10T00:00:00.000Z',
ShippedDate: '1998-04-13T00:00:00.000Z',
Freight: 33.8,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 11017,
CustomerID: 'ERNSH',
OrderDate: '1998-04-13T00:00:00.000Z',
ShippedDate: '1998-04-20T00:00:00.000Z',
Freight: 754.26,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 11018,
CustomerID: 'LONEP',
OrderDate: '1998-04-13T00:00:00.000Z',
ShippedDate: '1998-04-16T00:00:00.000Z',
Freight: 11.65,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 11019,
CustomerID: 'RANCH',
OrderDate: '1998-04-13T00:00:00.000Z',
ShippedDate: null,
Freight: 3.17,
ShipName: 'Rancho grande',
ShipAddress: 'Av. del Libertador 900',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 11020,
CustomerID: 'OTTIK',
OrderDate: '1998-04-14T00:00:00.000Z',
ShippedDate: '1998-04-16T00:00:00.000Z',
Freight: 43.3,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11021,
CustomerID: 'QUICK',
OrderDate: '1998-04-14T00:00:00.000Z',
ShippedDate: '1998-04-21T00:00:00.000Z',
Freight: 297.18,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11022,
CustomerID: 'HANAR',
OrderDate: '1998-04-14T00:00:00.000Z',
ShippedDate: '1998-05-04T00:00:00.000Z',
Freight: 6.27,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 11023,
CustomerID: 'BSBEV',
OrderDate: '1998-04-14T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 123.83,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 11024,
CustomerID: 'EASTC',
OrderDate: '1998-04-15T00:00:00.000Z',
ShippedDate: '1998-04-20T00:00:00.000Z',
Freight: 74.36,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 11025,
CustomerID: 'WARTH',
OrderDate: '1998-04-15T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 29.17,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 11026,
CustomerID: 'FRANS',
OrderDate: '1998-04-15T00:00:00.000Z',
ShippedDate: '1998-04-28T00:00:00.000Z',
Freight: 47.09,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 11027,
CustomerID: 'BOTTM',
OrderDate: '1998-04-16T00:00:00.000Z',
ShippedDate: '1998-04-20T00:00:00.000Z',
Freight: 52.52,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 11028,
CustomerID: 'KOENE',
OrderDate: '1998-04-16T00:00:00.000Z',
ShippedDate: '1998-04-22T00:00:00.000Z',
Freight: 29.59,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11029,
CustomerID: 'CHOPS',
OrderDate: '1998-04-16T00:00:00.000Z',
ShippedDate: '1998-04-27T00:00:00.000Z',
Freight: 47.84,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 11030,
CustomerID: 'SAVEA',
OrderDate: '1998-04-17T00:00:00.000Z',
ShippedDate: '1998-04-27T00:00:00.000Z',
Freight: 830.75,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 11031,
CustomerID: 'SAVEA',
OrderDate: '1998-04-17T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 227.22,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 11032,
CustomerID: 'WHITC',
OrderDate: '1998-04-17T00:00:00.000Z',
ShippedDate: '1998-04-23T00:00:00.000Z',
Freight: 606.19,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 11033,
CustomerID: 'RICSU',
OrderDate: '1998-04-17T00:00:00.000Z',
ShippedDate: '1998-04-23T00:00:00.000Z',
Freight: 84.74,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 11034,
CustomerID: 'OLDWO',
OrderDate: '1998-04-20T00:00:00.000Z',
ShippedDate: '1998-04-27T00:00:00.000Z',
Freight: 40.32,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 11035,
CustomerID: 'SUPRD',
OrderDate: '1998-04-20T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 0.17,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 11036,
CustomerID: 'DRACD',
OrderDate: '1998-04-20T00:00:00.000Z',
ShippedDate: '1998-04-22T00:00:00.000Z',
Freight: 149.47,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11037,
CustomerID: 'GODOS',
OrderDate: '1998-04-21T00:00:00.000Z',
ShippedDate: '1998-04-27T00:00:00.000Z',
Freight: 3.2,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 11038,
CustomerID: 'SUPRD',
OrderDate: '1998-04-21T00:00:00.000Z',
ShippedDate: '1998-04-30T00:00:00.000Z',
Freight: 29.59,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 11039,
CustomerID: 'LINOD',
OrderDate: '1998-04-21T00:00:00.000Z',
ShippedDate: null,
Freight: 65,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 11040,
CustomerID: 'GREAL',
OrderDate: '1998-04-22T00:00:00.000Z',
ShippedDate: null,
Freight: 18.84,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 11041,
CustomerID: 'CHOPS',
OrderDate: '1998-04-22T00:00:00.000Z',
ShippedDate: '1998-04-28T00:00:00.000Z',
Freight: 48.22,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 11042,
CustomerID: 'COMMI',
OrderDate: '1998-04-22T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 29.99,
ShipName: 'Comércio Mineiro',
ShipAddress: 'Av. dos Lusíadas, 23',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 11043,
CustomerID: 'SPECD',
OrderDate: '1998-04-22T00:00:00.000Z',
ShippedDate: '1998-04-29T00:00:00.000Z',
Freight: 8.8,
ShipName: 'Spécialités du monde',
ShipAddress: '25, rue Lauriston',
ShipCity: 'Paris',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 11044,
CustomerID: 'WOLZA',
OrderDate: '1998-04-23T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 8.72,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 11045,
CustomerID: 'BOTTM',
OrderDate: '1998-04-23T00:00:00.000Z',
ShippedDate: null,
Freight: 70.58,
ShipName: 'Bottom-Dollar Markets',
{
OrderID: 11046,
CustomerID: 'WANDK',
OrderDate: '1998-04-23T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 71.64,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11047,
CustomerID: 'EASTC',
OrderDate: '1998-04-24T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 46.62,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 11048,
CustomerID: 'BOTTM',
OrderDate: '1998-04-24T00:00:00.000Z',
ShippedDate: '1998-04-30T00:00:00.000Z',
Freight: 24.12,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 11049,
CustomerID: 'GOURL',
OrderDate: '1998-04-24T00:00:00.000Z',
ShippedDate: '1998-05-04T00:00:00.000Z',
Freight: 8.34,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 11050,
CustomerID: 'FOLKO',
OrderDate: '1998-04-27T00:00:00.000Z',
ShippedDate: '1998-05-05T00:00:00.000Z',
Freight: 59.41,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 11051,
CustomerID: 'LAMAI',
OrderDate: '1998-04-27T00:00:00.000Z',
ShippedDate: null,
Freight: 2.79,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 11052,
CustomerID: 'HANAR',
OrderDate: '1998-04-27T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 67.26,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 11053,
CustomerID: 'PICCO',
OrderDate: '1998-04-27T00:00:00.000Z',
ShippedDate: '1998-04-29T00:00:00.000Z',
Freight: 53.05,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 11054,
CustomerID: 'CACTU',
OrderDate: '1998-04-28T00:00:00.000Z',
ShippedDate: null,
Freight: 0.33,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 11055,
CustomerID: 'HILAA',
OrderDate: '1998-04-28T00:00:00.000Z',
ShippedDate: '1998-05-05T00:00:00.000Z',
Freight: 120.92,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 11056,
CustomerID: 'EASTC',
OrderDate: '1998-04-28T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 278.96,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 11057,
CustomerID: 'NORTS',
OrderDate: '1998-04-29T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 4.13,
ShipName: 'North/South',
ShipAddress: 'South House 300 Queensbridge',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 11058,
CustomerID: 'BLAUS',
OrderDate: '1998-04-29T00:00:00.000Z',
ShippedDate: null,
Freight: 31.14,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11059,
CustomerID: 'RICAR',
OrderDate: '1998-04-29T00:00:00.000Z',
ShippedDate: null,
Freight: 85.8,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 11060,
CustomerID: 'FRANS',
OrderDate: '1998-04-30T00:00:00.000Z',
ShippedDate: '1998-05-04T00:00:00.000Z',
Freight: 10.98,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 11061,
CustomerID: 'GREAL',
OrderDate: '1998-04-30T00:00:00.000Z',
ShippedDate: null,
Freight: 14.01,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 11062,
CustomerID: 'REGGC',
OrderDate: '1998-04-30T00:00:00.000Z',
ShippedDate: null,
Freight: 29.93,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
OrderID: 11063,
CustomerID: 'HUNGO',
OrderDate: '1998-04-30T00:00:00.000Z',
ShippedDate: '1998-05-06T00:00:00.000Z',
Freight: 81.73,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 11064,
CustomerID: 'SAVEA',
OrderDate: '1998-05-01T00:00:00.000Z',
ShippedDate: '1998-05-04T00:00:00.000Z',
Freight: 30.09,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 11065,
CustomerID: 'LILAS',
OrderDate: '1998-05-01T00:00:00.000Z',
ShippedDate: null,
Freight: 12.91,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 11066,
CustomerID: 'WHITC',
OrderDate: '1998-05-01T00:00:00.000Z',
ShippedDate: '1998-05-04T00:00:00.000Z',
Freight: 44.72,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 11067,
CustomerID: 'DRACD',
OrderDate: '1998-05-04T00:00:00.000Z',
ShippedDate: '1998-05-06T00:00:00.000Z',
Freight: 7.98,
{
OrderID: 11068,
CustomerID: 'QUEEN',
OrderDate: '1998-05-04T00:00:00.000Z',
ShippedDate: null,
Freight: 81.75,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 11069,
CustomerID: 'TORTU',
OrderDate: '1998-05-04T00:00:00.000Z',
ShippedDate: '1998-05-06T00:00:00.000Z',
Freight: 15.67,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 11070,
CustomerID: 'LEHMS',
OrderDate: '1998-05-05T00:00:00.000Z',
ShippedDate: null,
Freight: 136,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11071,
CustomerID: 'LILAS',
OrderDate: '1998-05-05T00:00:00.000Z',
ShippedDate: null,
Freight: 0.93,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 11072,
CustomerID: 'ERNSH',
OrderDate: '1998-05-05T00:00:00.000Z',
ShippedDate: null,
Freight: 258.64,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 11073,
CustomerID: 'PERIC',
OrderDate: '1998-05-05T00:00:00.000Z',
ShippedDate: null,
Freight: 24.95,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 11074,
CustomerID: 'SIMOB',
OrderDate: '1998-05-06T00:00:00.000Z',
ShippedDate: null,
Freight: 18.44,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 11075,
CustomerID: 'RICSU',
OrderDate: '1998-05-06T00:00:00.000Z',
ShippedDate: null,
Freight: 6.19,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 11076,
CustomerID: 'BONAP',
OrderDate: '1998-05-06T00:00:00.000Z',
ShippedDate: null,
Freight: 38.28,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 11077,
CustomerID: 'RATTC',
OrderDate: '1998-05-06T00:00:00.000Z',
ShippedDate: null,
Freight: 8.53,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
]);
Country: 'Germany',
},
{
CustomerID: 'ANATR',
ContactName: 'Ana Trujillo',
CompanyName: 'Ana Trujillo Emparedados y helados',
Address: 'Avda. de la Constitución 2222',
Country: 'Mexico',
},
{
CustomerID: 'ANTON',
ContactName: 'Antonio Moreno',
CompanyName: 'Antonio Moreno Taquería',
Address: 'Mataderos 2312',
Country: 'Mexico',
},
{
CustomerID: 'AROUT',
ContactName: 'Thomas Hardy',
CompanyName: 'Around the Horn',
Address: '120 Hanover Sq.',
Country: 'UK',
},
{
CustomerID: 'BERGS',
ContactName: 'Christina Berglund',
CompanyName: 'Berglunds snabbköp',
Address: 'Berguvsvägen 8',
Country: 'Sweden',
},
{
CustomerID: 'BLAUS',
ContactName: 'Hanna Moos',
CompanyName: 'Blauer See Delikatessen',
Address: 'Forsterstr. 57',
Country: 'Germany',
},
{
CustomerID: 'BLONP',
ContactName: 'Frédérique Citeaux',
CompanyName: 'Blondesddsl père et fils',
Address: '24, place Kléber',
Country: 'France',
},
{
CustomerID: 'BOLID',
ContactName: 'Martín Sommer',
CompanyName: 'Bólido Comidas preparadas',
Address: 'C/ Araquil, 67',
Country: 'Spain',
},
{
CustomerID: 'BONAP',
ContactName: 'Laurence Lebihan',
CompanyName: 'Bon app',
Address: '12, rue des Bouchers',
Country: 'France',
},
{
CustomerID: 'BOTTM',
ContactName: 'Elizabeth Lincoln',
CompanyName: 'Bottom-Dollar Markets',
Address: '23 Tsawassen Blvd.',
Country: 'Canada',
},
{
CustomerID: 'BSBEV',
ContactName: 'Victoria Ashworth',
CompanyName: "B's Beverages",
Address: 'Fauntleroy Circus',
Country: 'UK',
},
{
CustomerID: 'CACTU',
ContactName: 'Patricio Simpson',
CompanyName: 'Cactus Comidas para llevar',
Address: 'Cerrito 333',
Country: 'Argentina',
},
{
CustomerID: 'CENTC',
ContactName: 'Francisco Chang',
CompanyName: 'Centro comercial Moctezuma',
Address: 'Sierras de Granada 9993',
Country: 'Mexico',
},
{
CustomerID: 'CHOPS',
ContactName: 'Yang Wang',
CompanyName: 'Chop-suey Chinese',
Address: 'Hauptstr. 29',
Country: 'Switzerland',
},
{
CustomerID: 'COMMI',
ContactName: 'Pedro Afonso',
CompanyName: 'Comércio Mineiro',
Address: 'Av. dos Lusíadas, 23',
Country: 'Brazil',
},
{
CustomerID: 'CONSH',
ContactName: 'Elizabeth Brown',
CompanyName: 'Consolidated Holdings',
Address: 'Berkeley Gardens 12 Brewery',
Country: 'UK',
},
{
CustomerID: 'DRACD',
ContactName: 'Sven Ottlieb',
CompanyName: 'Drachenblut Delikatessen',
Address: 'Walserweg 21',
Country: 'Germany',
},
{
CustomerID: 'DUMON',
ContactName: 'Janine Labrune',
CompanyName: 'Du monde entier',
Address: '67, rue des Cinquante Otages',
Country: 'France',
},
{
CustomerID: 'EASTC',
ContactName: 'Ann Devon',
CompanyName: 'Eastern Connection',
Address: '35 King George',
Country: 'UK',
},
{
CustomerID: 'ERNSH',
ContactName: 'Roland Mendel',
CompanyName: 'Ernst Handel',
Address: 'Kirchgasse 6',
Country: 'Austria',
},
{
CustomerID: 'FAMIA',
ContactName: 'Aria Cruz',
CompanyName: 'Familia Arquibaldo',
Address: 'Rua Orós, 92',
Country: 'Brazil',
},
{
CustomerID: 'FISSA',
ContactName: 'Diego Roel',
CompanyName: 'FISSA Fabrica Inter. Salchichas S.A.',
Address: 'C/ Moralzarzal, 86',
Country: 'Spain',
},
{
CustomerID: 'FOLIG',
ContactName: 'Martine Rancé',
CompanyName: 'Folies gourmandes',
Address: '184, chaussée de Tournai',
Country: 'France',
},
{
CustomerID: 'FOLKO',
ContactName: 'Maria Larsson',
CompanyName: 'Folk och fä HB',
Address: 'Åkergatan 24',
Country: 'Sweden',
},
{
CustomerID: 'FRANK',
ContactName: 'Peter Franken',
CompanyName: 'Frankenversand',
Address: 'Berliner Platz 43',
Country: 'Germany',
},
{
CustomerID: 'FRANR',
ContactName: 'Carine Schmitt',
CompanyName: 'France restauration',
Address: '54, rue Royale',
Country: 'France',
},
{
CustomerID: 'FRANS',
ContactName: 'Paolo Accorti',
CompanyName: 'Franchi S.p.A.',
Address: 'Via Monte Bianco 34',
Country: 'Italy',
},
{
CustomerID: 'FURIB',
ContactName: 'Lino Rodriguez',
CompanyName: 'Furia Bacalhau e Frutos do Mar',
Address: 'Jardim das rosas n. 32',
Country: 'Portugal',
},
{
CustomerID: 'GALED',
ContactName: 'Eduardo Saavedra',
CompanyName: 'Galería del gastrónomo',
Address: 'Rambla de Cataluña, 23',
Country: 'Spain',
},
CustomerID: 'GODOS',
ContactName: 'José Pedro Freyre',
CompanyName: 'Godos Cocina Típica',
Address: 'C/ Romero, 33',
Country: 'Spain',
},
{
CustomerID: 'GOURL',
ContactName: 'André Fonseca',
CompanyName: 'Gourmet Lanchonetes',
Address: 'Av. Brasil, 442',
Country: 'Brazil',
},
{
CustomerID: 'GREAL',
ContactName: 'Howard Snyder',
CompanyName: 'Great Lakes Food Market',
Address: '2732 Baker Blvd.',
Country: 'USA',
},
{
CustomerID: 'GROSR',
ContactName: 'Manuel Pereira',
CompanyName: 'GROSELLA-Restaurante',
Address: '5ª Ave. Los Palos Grandes',
Country: 'Venezuela',
},
{
CustomerID: 'HANAR',
ContactName: 'Mario Pontes',
CompanyName: 'Hanari Carnes',
Address: 'Rua do Paço, 67',
Country: 'Brazil',
},
{
CustomerID: 'HILAA',
ContactName: 'Carlos Hernández',
CompanyName: 'HILARION-Abastos',
Address: 'Carrera 22 con Ave. Carlos Soublette #8-35',
Country: 'Venezuela',
},
{
CustomerID: 'HUNGC',
ContactName: 'Yoshi Latimer',
CompanyName: 'Hungry Coyote Import Store',
Address: 'City Center Plaza 516 Main St.',
Country: 'USA',
},
{
CustomerID: 'HUNGO',
{
CustomerID: 'ISLAT',
ContactName: 'Helen Bennett',
CompanyName: 'Island Trading',
Address: 'Garden House Crowther Way',
Country: 'UK',
},
{
CustomerID: 'KOENE',
ContactName: 'Philip Cramer',
CompanyName: 'Königlich Essen',
Address: 'Maubelstr. 90',
Country: 'Germany',
},
{
CustomerID: 'LACOR',
ContactName: 'Daniel Tonini',
CompanyName: "La corne d'abondance",
Address: "67, avenue de l'Europe",
Country: 'France',
},
{
CustomerID: 'LAMAI',
ContactName: 'Annette Roulet',
CompanyName: "La maison d'Asie",
Address: '1 rue Alsace-Lorraine',
Country: 'France',
},
{
CustomerID: 'LAUGB',
ContactName: 'Yoshi Tannamuri',
CompanyName: 'Laughing Bacchus Wine Cellars',
Address: '1900 Oak St.',
Country: 'Canada',
},
{
CustomerID: 'LAZYK',
ContactName: 'John Steel',
CompanyName: 'Lazy K Kountry Store',
Address: '12 Orchestra Terrace',
Country: 'USA',
},
{
CustomerID: 'LEHMS',
ContactName: 'Renate Messner',
{
CustomerID: 'LETSS',
ContactName: 'Jaime Yorres',
CompanyName: "Let's Stop N Shop",
Address: '87 Polk St. Suite 5',
Country: 'USA',
},
{
CustomerID: 'LILAS',
ContactName: 'Carlos González',
CompanyName: 'LILA-Supermercado',
Address: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
Country: 'Venezuela',
},
{
CustomerID: 'LINOD',
ContactName: 'Felipe Izquierdo',
CompanyName: 'LINO-Delicateses',
Address: 'Ave. 5 de Mayo Porlamar',
Country: 'Venezuela',
},
{
CustomerID: 'LONEP',
ContactName: 'Fran Wilson',
CompanyName: 'Lonesome Pine Restaurant',
Address: '89 Chiaroscuro Rd.',
Country: 'USA',
},
{
CustomerID: 'MAGAA',
ContactName: 'Giovanni Rovelli',
CompanyName: 'Magazzini Alimentari Riuniti',
Address: 'Via Ludovico il Moro 22',
Country: 'Italy',
},
{
CustomerID: 'MAISD',
ContactName: 'Catherine Dewey',
CompanyName: 'Maison Dewey',
Address: 'Rue Joseph-Bens 532',
Country: 'Belgium',
},
{
CustomerID: 'MEREP',
ContactName: 'Jean Fresnière',
CompanyName: 'Mère Paillarde',
{
CustomerID: 'MORGK',
ContactName: 'Alexander Feuer',
CompanyName: 'Morgenstern Gesundkost',
Address: 'Heerstr. 22',
Country: 'Germany',
},
{
CustomerID: 'NORTS',
ContactName: 'Simon Crowther',
CompanyName: 'North/South',
Address: 'South House 300 Queensbridge',
Country: 'UK',
},
{
CustomerID: 'OCEAN',
ContactName: 'Yvonne Moncada',
CompanyName: 'Océano Atlántico Ltda.',
Address: 'Ing. Gustavo Moncada 8585 Piso 20-A',
Country: 'Argentina',
},
{
CustomerID: 'OLDWO',
ContactName: 'Rene Phillips',
CompanyName: 'Old World Delicatessen',
Address: '2743 Bering St.',
Country: 'USA',
},
{
CustomerID: 'OTTIK',
ContactName: 'Henriette Pfalzheim',
CompanyName: 'Ottilies Käseladen',
Address: 'Mehrheimerstr. 369',
Country: 'Germany',
},
{
CustomerID: 'PARIS',
ContactName: 'Marie Bertrand',
CompanyName: 'Paris spécialités',
Address: '265, boulevard Charonne',
Country: 'France',
},
{
CustomerID: 'PERIC',
ContactName: 'Guillermo Fernández',
CompanyName: 'Pericles Comidas clásicas',
Address: 'Calle Dr. Jorge Cash 321',
Country: 'Mexico',
},
{
CustomerID: 'PICCO',
ContactName: 'Georg Pipps',
CompanyName: 'Piccolo und mehr',
Address: 'Geislweg 14',
Country: 'Austria',
},
{
CustomerID: 'PRINI',
ContactName: 'Isabel de Castro',
CompanyName: 'Princesa Isabel Vinhos',
Address: 'Estrada da saúde n. 58',
Country: 'Portugal',
},
{
CustomerID: 'QUEDE',
ContactName: 'Bernardo Batista',
CompanyName: 'Que Delícia',
Address: 'Rua da Panificadora, 12',
Country: 'Brazil',
},
{
CustomerID: 'QUEEN',
ContactName: 'Lúcia Carvalho',
CompanyName: 'Queen Cozinha',
Address: 'Alameda dos Canàrios, 891',
Country: 'Brazil',
},
{
CustomerID: 'QUICK',
ContactName: 'Horst Kloss',
CompanyName: 'QUICK-Stop',
Address: 'Taucherstraße 10',
Country: 'Germany',
},
{
CustomerID: 'RANCH',
ContactName: 'Sergio Gutiérrez',
CompanyName: 'Rancho grande',
Address: 'Av. del Libertador 900',
Country: 'Argentina',
},
{
CustomerID: 'RATTC',
ContactName: 'Paula Wilson',
CompanyName: 'Rattlesnake Canyon Grocery',
Address: '2817 Milton Dr.',
Country: 'USA',
},
{
CustomerID: 'REGGC',
ContactName: 'Maurizio Moroni',
CompanyName: 'Reggiani Caseifici',
Address: 'Strada Provinciale 124',
Country: 'Italy',
},
{
CustomerID: 'RICAR',
ContactName: 'Janete Limeira',
CompanyName: 'Ricardo Adocicados',
Address: 'Av. Copacabana, 267',
Country: 'Brazil',
},
{
CustomerID: 'RICSU',
ContactName: 'Michael Holz',
CompanyName: 'Richter Supermarkt',
Address: 'Grenzacherweg 237',
Country: 'Switzerland',
},
{
CustomerID: 'ROMEY',
ContactName: 'Alejandra Camino',
CompanyName: 'Romero y tomillo',
Address: 'Gran Vía, 1',
Country: 'Spain',
},
{
CustomerID: 'SANTG',
ContactName: 'Jonas Bergulfsen',
CompanyName: 'Santé Gourmet',
Address: 'Erling Skakkes gate 78',
Country: 'Norway',
},
{
CustomerID: 'SAVEA',
ContactName: 'Jose Pavarotti',
CompanyName: 'Save-a-lot Markets',
Address: '187 Suffolk Ln.',
Country: 'USA',
},
{
CustomerID: 'SEVES',
ContactName: 'Hari Kumar',
CompanyName: 'Seven Seas Imports',
Address: '90 Wadhurst Rd.',
Country: 'UK',
},
{
CustomerID: 'SIMOB',
ContactName: 'Jytte Petersen',
CompanyName: 'Simons bistro',
Address: 'Vinbæltet 34',
Country: 'Denmark',
},
{
CustomerID: 'SPECD',
ContactName: 'Dominique Perrier',
CompanyName: 'Spécialités du monde',
Address: '25, rue Lauriston',
Country: 'France',
},
{
CustomerID: 'SPLIR',
ContactName: 'Art Braunschweiger',
CompanyName: 'Split Rail Beer & Ale',
Address: 'P.O. Box 555',
Country: 'USA',
},
{
CustomerID: 'SUPRD',
ContactName: 'Pascale Cartrain',
CompanyName: 'Suprêmes délices',
Address: 'Boulevard Tirou, 255',
Country: 'Belgium',
},
{
CustomerID: 'THEBI',
ContactName: 'Liz Nixon',
CompanyName: 'The Big Cheese',
Address: '89 Jefferson Way Suite 2',
Country: 'USA',
},
{
CustomerID: 'THECR',
ContactName: 'Liu Wong',
CompanyName: 'The Cracker Box',
Address: '55 Grizzly Peak Rd.',
Country: 'USA',
},
{
CustomerID: 'TOMSP',
ContactName: 'Karin Josephs',
CompanyName: 'Toms Spezialitäten',
Address: 'Luisenstr. 48',
Country: 'Germany',
},
{
CustomerID: 'TORTU',
ContactName: 'Miguel Angel Paolino',
CompanyName: 'Tortuga Restaurante',
Address: 'Avda. Azteca 123',
Country: 'Mexico',
},
{
CustomerID: 'TRADH',
ContactName: 'Anabela Domingues',
CompanyName: 'Tradição Hipermercados',
Address: 'Av. Inês de Castro, 414',
Country: 'Brazil',
},
{
CustomerID: 'TRAIH',
ContactName: 'Helvetius Nagy',
CompanyName: "Trail's Head Gourmet Provisioners",
Address: '722 DaVinci Blvd.',
Country: 'USA',
},
{
CustomerID: 'VAFFE',
ContactName: 'Palle Ibsen',
CompanyName: 'Vaffeljernet',
Address: 'Smagsloget 45',
Country: 'Denmark',
},
{
CustomerID: 'VICTE',
ContactName: 'Mary Saveley',
CompanyName: 'Victuailles en stock',
Address: '2, rue du Commerce',
Country: 'France',
},
{
CustomerID: 'VINET',
ContactName: 'Paul Henriot',
CompanyName: 'Vins et alcools Chevalier',
Address: "59 rue de l'Abbaye",
Country: 'France',
},
{
CustomerID: 'WANDK',
ContactName: 'Rita Müller',
CompanyName: 'Die Wandernde Kuh',
Address: 'Adenauerallee 900',
Country: 'Germany',
},
CustomerID: 'WARTH',
ContactName: 'Pirkko Koskitalo',
CompanyName: 'Wartian Herkku',
Address: 'Torikatu 38',
Country: 'Finland',
},
{
CustomerID: 'WELLI',
ContactName: 'Paula Parente',
CompanyName: 'Wellington Importadora',
Address: 'Rua do Mercado, 12',
Country: 'Brazil',
},
{
CustomerID: 'WHITC',
ContactName: 'Karl Jablonski',
CompanyName: 'White Clover Markets',
Address: '305 - 14th Ave. S. Suite 3B',
Country: 'USA',
},
{
CustomerID: 'WILMK',
ContactName: 'Matti Karttunen',
CompanyName: 'Wilman Kala',
Address: 'Keskuskatu 45',
Country: 'Finland',
},
{
CustomerID: 'WOLZA',
ContactName: 'Zbyszek Piestrzeniewicz',
CompanyName: 'Wolski Zajazd',
Address: 'ul. Filtrowa 68',
Country: 'Poland',
},
];
DATASOURCE.TSX
let stringData: string = JSON.stringify([
{
OrderID: 10248,
CustomerID: 'VINET',
OrderDate: '1996-07-04T00:00:00.000Z',
ShippedDate: '1996-07-16T00:00:00.000Z',
Freight: 32.38,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: "59 rue de l'Abbaye",
ShipCity: 'Reims',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10249,
CustomerID: 'TOMSP',
OrderDate: '1996-07-05T00:00:00.000Z',
ShippedDate: '1996-07-10T00:00:00.000Z',
Freight: 11.61,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10250,
CustomerID: 'HANAR',
OrderDate: '1996-07-08T00:00:00.000Z',
ShippedDate: '1996-07-12T00:00:00.000Z',
Freight: 65.83,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10251,
CustomerID: 'VICTE',
OrderDate: '1996-07-08T00:00:00.000Z',
ShippedDate: '1996-07-15T00:00:00.000Z',
Freight: 41.34,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10252,
CustomerID: 'SUPRD',
OrderDate: '1996-07-09T00:00:00.000Z',
ShippedDate: '1996-07-11T00:00:00.000Z',
Freight: 51.3,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10253,
CustomerID: 'HANAR',
OrderDate: '1996-07-10T00:00:00.000Z',
ShippedDate: '1996-07-16T00:00:00.000Z',
Freight: 58.17,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10254,
CustomerID: 'CHOPS',
OrderDate: '1996-07-11T00:00:00.000Z',
ShippedDate: '1996-07-23T00:00:00.000Z',
Freight: 22.98,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10255,
CustomerID: 'RICSU',
OrderDate: '1996-07-12T00:00:00.000Z',
ShippedDate: '1996-07-15T00:00:00.000Z',
Freight: 148.33,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10256,
CustomerID: 'WELLI',
OrderDate: '1996-07-15T00:00:00.000Z',
ShippedDate: '1996-07-17T00:00:00.000Z',
Freight: 13.97,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10257,
CustomerID: 'HILAA',
OrderDate: '1996-07-16T00:00:00.000Z',
ShippedDate: '1996-07-22T00:00:00.000Z',
Freight: 81.91,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10258,
CustomerID: 'ERNSH',
OrderDate: '1996-07-17T00:00:00.000Z',
ShippedDate: '1996-07-23T00:00:00.000Z',
Freight: 140.51,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10259,
CustomerID: 'CENTC',
OrderDate: '1996-07-18T00:00:00.000Z',
ShippedDate: '1996-07-25T00:00:00.000Z',
Freight: 3.25,
ShipName: 'Centro comercial Moctezuma',
ShipAddress: 'Sierras de Granada 9993',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10260,
CustomerID: 'OTTIK',
OrderDate: '1996-07-19T00:00:00.000Z',
ShippedDate: '1996-07-29T00:00:00.000Z',
Freight: 55.09,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10261,
CustomerID: 'QUEDE',
OrderDate: '1996-07-19T00:00:00.000Z',
ShippedDate: '1996-07-30T00:00:00.000Z',
Freight: 3.05,
ShipName: 'Que Delícia',
{
OrderID: 10262,
CustomerID: 'RATTC',
OrderDate: '1996-07-22T00:00:00.000Z',
ShippedDate: '1996-07-25T00:00:00.000Z',
Freight: 48.29,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10263,
CustomerID: 'ERNSH',
OrderDate: '1996-07-23T00:00:00.000Z',
ShippedDate: '1996-07-31T00:00:00.000Z',
Freight: 146.06,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10264,
CustomerID: 'FOLKO',
OrderDate: '1996-07-24T00:00:00.000Z',
ShippedDate: '1996-08-23T00:00:00.000Z',
Freight: 3.67,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10265,
CustomerID: 'BLONP',
OrderDate: '1996-07-25T00:00:00.000Z',
ShippedDate: '1996-08-12T00:00:00.000Z',
Freight: 55.28,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10266,
CustomerID: 'WARTH',
OrderDate: '1996-07-26T00:00:00.000Z',
ShippedDate: '1996-07-31T00:00:00.000Z',
Freight: 25.73,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10267,
CustomerID: 'FRANK',
OrderDate: '1996-07-29T00:00:00.000Z',
ShippedDate: '1996-08-06T00:00:00.000Z',
Freight: 208.58,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10268,
CustomerID: 'GROSR',
OrderDate: '1996-07-30T00:00:00.000Z',
ShippedDate: '1996-08-02T00:00:00.000Z',
Freight: 66.29,
ShipName: 'GROSELLA-Restaurante',
ShipAddress: '5ª Ave. Los Palos Grandes',
ShipCity: 'Caracas',
ShipRegion: 'DF',
ShipCountry: 'Venezuela',
},
{
OrderID: 10269,
CustomerID: 'WHITC',
OrderDate: '1996-07-31T00:00:00.000Z',
ShippedDate: '1996-08-09T00:00:00.000Z',
Freight: 4.56,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10270,
CustomerID: 'WARTH',
OrderDate: '1996-08-01T00:00:00.000Z',
ShippedDate: '1996-08-02T00:00:00.000Z',
Freight: 136.54,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10271,
CustomerID: 'SPLIR',
OrderDate: '1996-08-01T00:00:00.000Z',
ShippedDate: '1996-08-30T00:00:00.000Z',
Freight: 4.54,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10272,
CustomerID: 'RATTC',
OrderDate: '1996-08-02T00:00:00.000Z',
ShippedDate: '1996-08-06T00:00:00.000Z',
Freight: 98.03,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10273,
CustomerID: 'QUICK',
OrderDate: '1996-08-05T00:00:00.000Z',
ShippedDate: '1996-08-12T00:00:00.000Z',
Freight: 76.07,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10274,
CustomerID: 'VINET',
OrderDate: '1996-08-06T00:00:00.000Z',
ShippedDate: '1996-08-16T00:00:00.000Z',
Freight: 6.01,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: "59 rue de l'Abbaye",
ShipCity: 'Reims',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10275,
CustomerID: 'MAGAA',
OrderDate: '1996-08-07T00:00:00.000Z',
ShippedDate: '1996-08-09T00:00:00.000Z',
Freight: 26.93,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10276,
CustomerID: 'TORTU',
OrderDate: '1996-08-08T00:00:00.000Z',
ShippedDate: '1996-08-14T00:00:00.000Z',
Freight: 13.84,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10277,
CustomerID: 'MORGK',
OrderDate: '1996-08-09T00:00:00.000Z',
ShippedDate: '1996-08-13T00:00:00.000Z',
Freight: 125.77,
ShipName: 'Morgenstern Gesundkost',
ShipAddress: 'Heerstr. 22',
ShipCity: 'Leipzig',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10278,
CustomerID: 'BERGS',
OrderDate: '1996-08-12T00:00:00.000Z',
ShippedDate: '1996-08-16T00:00:00.000Z',
Freight: 92.69,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
OrderID: 10279,
CustomerID: 'LEHMS',
OrderDate: '1996-08-13T00:00:00.000Z',
ShippedDate: '1996-08-16T00:00:00.000Z',
Freight: 25.83,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10280,
CustomerID: 'BERGS',
OrderDate: '1996-08-14T00:00:00.000Z',
ShippedDate: '1996-09-12T00:00:00.000Z',
Freight: 8.98,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10281,
CustomerID: 'ROMEY',
OrderDate: '1996-08-14T00:00:00.000Z',
ShippedDate: '1996-08-21T00:00:00.000Z',
Freight: 2.94,
ShipName: 'Romero y tomillo',
ShipAddress: 'Gran Vía, 1',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10282,
CustomerID: 'ROMEY',
OrderDate: '1996-08-15T00:00:00.000Z',
ShippedDate: '1996-08-21T00:00:00.000Z',
Freight: 12.69,
ShipName: 'Romero y tomillo',
ShipAddress: 'Gran Vía, 1',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10283,
CustomerID: 'LILAS',
OrderDate: '1996-08-16T00:00:00.000Z',
ShippedDate: '1996-08-23T00:00:00.000Z',
Freight: 84.81,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10284,
CustomerID: 'LEHMS',
OrderDate: '1996-08-19T00:00:00.000Z',
ShippedDate: '1996-08-27T00:00:00.000Z',
Freight: 76.56,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10285,
CustomerID: 'QUICK',
OrderDate: '1996-08-20T00:00:00.000Z',
ShippedDate: '1996-08-26T00:00:00.000Z',
Freight: 76.83,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10286,
CustomerID: 'QUICK',
OrderDate: '1996-08-21T00:00:00.000Z',
ShippedDate: '1996-08-30T00:00:00.000Z',
Freight: 229.24,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10287,
CustomerID: 'RICAR',
OrderDate: '1996-08-22T00:00:00.000Z',
ShippedDate: '1996-08-28T00:00:00.000Z',
Freight: 12.76,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10288,
CustomerID: 'REGGC',
OrderDate: '1996-08-23T00:00:00.000Z',
ShippedDate: '1996-09-03T00:00:00.000Z',
Freight: 7.45,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10289,
CustomerID: 'BSBEV',
OrderDate: '1996-08-26T00:00:00.000Z',
ShippedDate: '1996-08-28T00:00:00.000Z',
Freight: 22.77,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10290,
CustomerID: 'COMMI',
OrderDate: '1996-08-27T00:00:00.000Z',
ShippedDate: '1996-09-03T00:00:00.000Z',
Freight: 79.7,
ShipName: 'Comércio Mineiro',
ShipAddress: 'Av. dos Lusíadas, 23',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10291,
CustomerID: 'QUEDE',
OrderDate: '1996-08-27T00:00:00.000Z',
ShippedDate: '1996-09-04T00:00:00.000Z',
Freight: 6.4,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10292,
CustomerID: 'TRADH',
OrderDate: '1996-08-28T00:00:00.000Z',
ShippedDate: '1996-09-02T00:00:00.000Z',
Freight: 1.35,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10293,
CustomerID: 'TORTU',
OrderDate: '1996-08-29T00:00:00.000Z',
ShippedDate: '1996-09-11T00:00:00.000Z',
Freight: 21.18,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10294,
CustomerID: 'RATTC',
OrderDate: '1996-08-30T00:00:00.000Z',
ShippedDate: '1996-09-05T00:00:00.000Z',
Freight: 147.26,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10295,
CustomerID: 'VINET',
OrderDate: '1996-09-02T00:00:00.000Z',
ShippedDate: '1996-09-10T00:00:00.000Z',
Freight: 1.15,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: "59 rue de l'Abbaye",
ShipCity: 'Reims',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10296,
CustomerID: 'LILAS',
OrderDate: '1996-09-03T00:00:00.000Z',
ShippedDate: '1996-09-11T00:00:00.000Z',
Freight: 0.12,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10297,
CustomerID: 'BLONP',
OrderDate: '1996-09-04T00:00:00.000Z',
ShippedDate: '1996-09-10T00:00:00.000Z',
Freight: 5.74,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10298,
CustomerID: 'HUNGO',
OrderDate: '1996-09-05T00:00:00.000Z',
ShippedDate: '1996-09-11T00:00:00.000Z',
Freight: 168.22,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10299,
CustomerID: 'RICAR',
OrderDate: '1996-09-06T00:00:00.000Z',
ShippedDate: '1996-09-13T00:00:00.000Z',
Freight: 29.76,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10300,
CustomerID: 'MAGAA',
OrderDate: '1996-09-09T00:00:00.000Z',
ShippedDate: '1996-09-18T00:00:00.000Z',
Freight: 17.68,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10301,
CustomerID: 'WANDK',
OrderDate: '1996-09-09T00:00:00.000Z',
ShippedDate: '1996-09-17T00:00:00.000Z',
Freight: 45.08,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10302,
CustomerID: 'SUPRD',
OrderDate: '1996-09-10T00:00:00.000Z',
ShippedDate: '1996-10-09T00:00:00.000Z',
Freight: 6.27,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10303,
CustomerID: 'GODOS',
OrderDate: '1996-09-11T00:00:00.000Z',
ShippedDate: '1996-09-18T00:00:00.000Z',
Freight: 107.83,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10304,
CustomerID: 'TORTU',
OrderDate: '1996-09-12T00:00:00.000Z',
ShippedDate: '1996-09-17T00:00:00.000Z',
Freight: 63.79,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10305,
CustomerID: 'OLDWO',
OrderDate: '1996-09-13T00:00:00.000Z',
ShippedDate: '1996-10-09T00:00:00.000Z',
Freight: 257.62,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10306,
CustomerID: 'ROMEY',
OrderDate: '1996-09-16T00:00:00.000Z',
ShippedDate: '1996-09-23T00:00:00.000Z',
Freight: 7.56,
ShipName: 'Romero y tomillo',
ShipAddress: 'Gran Vía, 1',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10307,
CustomerID: 'LONEP',
OrderDate: '1996-09-17T00:00:00.000Z',
ShippedDate: '1996-09-25T00:00:00.000Z',
Freight: 0.56,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10308,
CustomerID: 'ANATR',
OrderDate: '1996-09-18T00:00:00.000Z',
ShippedDate: '1996-09-24T00:00:00.000Z',
Freight: 1.61,
ShipName: 'Ana Trujillo Emparedados y helados',
ShipAddress: 'Avda. de la Constitución 2222',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10309,
CustomerID: 'HUNGO',
OrderDate: '1996-09-19T00:00:00.000Z',
ShippedDate: '1996-10-23T00:00:00.000Z',
Freight: 47.3,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10310,
CustomerID: 'THEBI',
OrderDate: '1996-09-20T00:00:00.000Z',
ShippedDate: '1996-09-27T00:00:00.000Z',
Freight: 17.52,
ShipName: 'The Big Cheese',
ShipAddress: '89 Jefferson Way Suite 2',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10311,
CustomerID: 'DUMON',
OrderDate: '1996-09-20T00:00:00.000Z',
ShippedDate: '1996-09-26T00:00:00.000Z',
Freight: 24.69,
ShipName: 'Du monde entier',
ShipAddress: '67, rue des Cinquante Otages',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10312,
CustomerID: 'WANDK',
OrderDate: '1996-09-23T00:00:00.000Z',
ShippedDate: '1996-10-03T00:00:00.000Z',
Freight: 40.26,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10313,
CustomerID: 'QUICK',
OrderDate: '1996-09-24T00:00:00.000Z',
ShippedDate: '1996-10-04T00:00:00.000Z',
Freight: 1.96,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10314,
CustomerID: 'RATTC',
OrderDate: '1996-09-25T00:00:00.000Z',
ShippedDate: '1996-10-04T00:00:00.000Z',
Freight: 74.16,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10315,
CustomerID: 'ISLAT',
OrderDate: '1996-09-26T00:00:00.000Z',
ShippedDate: '1996-10-03T00:00:00.000Z',
Freight: 41.76,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10316,
CustomerID: 'RATTC',
OrderDate: '1996-09-27T00:00:00.000Z',
ShippedDate: '1996-10-08T00:00:00.000Z',
Freight: 150.15,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10317,
CustomerID: 'LONEP',
OrderDate: '1996-09-30T00:00:00.000Z',
ShippedDate: '1996-10-10T00:00:00.000Z',
Freight: 12.69,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10318,
CustomerID: 'ISLAT',
OrderDate: '1996-10-01T00:00:00.000Z',
ShippedDate: '1996-10-04T00:00:00.000Z',
Freight: 4.73,
ShipName: 'Island Trading',
{
OrderID: 10319,
CustomerID: 'TORTU',
OrderDate: '1996-10-02T00:00:00.000Z',
ShippedDate: '1996-10-11T00:00:00.000Z',
Freight: 64.5,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10320,
CustomerID: 'WARTH',
OrderDate: '1996-10-03T00:00:00.000Z',
ShippedDate: '1996-10-18T00:00:00.000Z',
Freight: 34.57,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10321,
CustomerID: 'ISLAT',
OrderDate: '1996-10-03T00:00:00.000Z',
ShippedDate: '1996-10-11T00:00:00.000Z',
Freight: 3.43,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10322,
CustomerID: 'PERIC',
OrderDate: '1996-10-04T00:00:00.000Z',
ShippedDate: '1996-10-23T00:00:00.000Z',
Freight: 0.4,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10323,
CustomerID: 'KOENE',
OrderDate: '1996-10-07T00:00:00.000Z',
ShippedDate: '1996-10-14T00:00:00.000Z',
Freight: 4.88,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10324,
CustomerID: 'SAVEA',
OrderDate: '1996-10-08T00:00:00.000Z',
ShippedDate: '1996-10-10T00:00:00.000Z',
Freight: 214.27,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10325,
CustomerID: 'KOENE',
OrderDate: '1996-10-09T00:00:00.000Z',
ShippedDate: '1996-10-14T00:00:00.000Z',
Freight: 64.86,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10326,
CustomerID: 'BOLID',
OrderDate: '1996-10-10T00:00:00.000Z',
ShippedDate: '1996-10-14T00:00:00.000Z',
Freight: 77.92,
ShipName: 'Bólido Comidas preparadas',
ShipAddress: 'C/ Araquil, 67',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10327,
CustomerID: 'FOLKO',
OrderDate: '1996-10-11T00:00:00.000Z',
ShippedDate: '1996-10-14T00:00:00.000Z',
Freight: 63.36,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10328,
CustomerID: 'FURIB',
OrderDate: '1996-10-14T00:00:00.000Z',
ShippedDate: '1996-10-17T00:00:00.000Z',
Freight: 87.03,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10329,
CustomerID: 'SPLIR',
OrderDate: '1996-10-15T00:00:00.000Z',
ShippedDate: '1996-10-23T00:00:00.000Z',
Freight: 191.67,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10330,
CustomerID: 'LILAS',
OrderDate: '1996-10-16T00:00:00.000Z',
ShippedDate: '1996-10-28T00:00:00.000Z',
Freight: 12.75,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10331,
CustomerID: 'BONAP',
OrderDate: '1996-10-16T00:00:00.000Z',
ShippedDate: '1996-10-21T00:00:00.000Z',
Freight: 10.19,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10332,
CustomerID: 'MEREP',
OrderDate: '1996-10-17T00:00:00.000Z',
ShippedDate: '1996-10-21T00:00:00.000Z',
Freight: 52.84,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10333,
CustomerID: 'WARTH',
OrderDate: '1996-10-18T00:00:00.000Z',
ShippedDate: '1996-10-25T00:00:00.000Z',
Freight: 0.59,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10334,
CustomerID: 'VICTE',
OrderDate: '1996-10-21T00:00:00.000Z',
ShippedDate: '1996-10-28T00:00:00.000Z',
Freight: 8.56,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10335,
CustomerID: 'HUNGO',
OrderDate: '1996-10-22T00:00:00.000Z',
ShippedDate: '1996-10-24T00:00:00.000Z',
Freight: 42.11,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
OrderID: 10336,
CustomerID: 'PRINI',
OrderDate: '1996-10-23T00:00:00.000Z',
ShippedDate: '1996-10-25T00:00:00.000Z',
Freight: 15.51,
ShipName: 'Princesa Isabel Vinhos',
ShipAddress: 'Estrada da saúde n. 58',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10337,
CustomerID: 'FRANK',
OrderDate: '1996-10-24T00:00:00.000Z',
ShippedDate: '1996-10-29T00:00:00.000Z',
Freight: 108.26,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10338,
CustomerID: 'OLDWO',
OrderDate: '1996-10-25T00:00:00.000Z',
ShippedDate: '1996-10-29T00:00:00.000Z',
Freight: 84.21,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10339,
CustomerID: 'MEREP',
OrderDate: '1996-10-28T00:00:00.000Z',
ShippedDate: '1996-11-04T00:00:00.000Z',
Freight: 15.66,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10340,
CustomerID: 'BONAP',
OrderDate: '1996-10-29T00:00:00.000Z',
ShippedDate: '1996-11-08T00:00:00.000Z',
Freight: 166.31,
{
OrderID: 10341,
CustomerID: 'SIMOB',
OrderDate: '1996-10-29T00:00:00.000Z',
ShippedDate: '1996-11-05T00:00:00.000Z',
Freight: 26.78,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10342,
CustomerID: 'FRANK',
OrderDate: '1996-10-30T00:00:00.000Z',
ShippedDate: '1996-11-04T00:00:00.000Z',
Freight: 54.83,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10343,
CustomerID: 'LEHMS',
OrderDate: '1996-10-31T00:00:00.000Z',
ShippedDate: '1996-11-06T00:00:00.000Z',
Freight: 110.37,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10344,
CustomerID: 'WHITC',
OrderDate: '1996-11-01T00:00:00.000Z',
ShippedDate: '1996-11-05T00:00:00.000Z',
Freight: 23.29,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10345,
CustomerID: 'QUICK',
OrderDate: '1996-11-04T00:00:00.000Z',
ShippedDate: '1996-11-11T00:00:00.000Z',
Freight: 249.06,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10346,
CustomerID: 'RATTC',
OrderDate: '1996-11-05T00:00:00.000Z',
ShippedDate: '1996-11-08T00:00:00.000Z',
Freight: 142.08,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10347,
CustomerID: 'FAMIA',
OrderDate: '1996-11-06T00:00:00.000Z',
ShippedDate: '1996-11-08T00:00:00.000Z',
Freight: 3.1,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10348,
CustomerID: 'WANDK',
OrderDate: '1996-11-07T00:00:00.000Z',
ShippedDate: '1996-11-15T00:00:00.000Z',
Freight: 0.78,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10349,
CustomerID: 'SPLIR',
OrderDate: '1996-11-08T00:00:00.000Z',
ShippedDate: '1996-11-15T00:00:00.000Z',
Freight: 8.63,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10350,
CustomerID: 'LAMAI',
OrderDate: '1996-11-11T00:00:00.000Z',
ShippedDate: '1996-12-03T00:00:00.000Z',
Freight: 64.19,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10351,
CustomerID: 'ERNSH',
OrderDate: '1996-11-11T00:00:00.000Z',
ShippedDate: '1996-11-20T00:00:00.000Z',
Freight: 162.33,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10352,
CustomerID: 'FURIB',
OrderDate: '1996-11-12T00:00:00.000Z',
ShippedDate: '1996-11-18T00:00:00.000Z',
Freight: 1.3,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10353,
CustomerID: 'PICCO',
OrderDate: '1996-11-13T00:00:00.000Z',
ShippedDate: '1996-11-25T00:00:00.000Z',
Freight: 360.63,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10354,
CustomerID: 'PERIC',
OrderDate: '1996-11-14T00:00:00.000Z',
ShippedDate: '1996-11-20T00:00:00.000Z',
Freight: 53.8,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10355,
CustomerID: 'AROUT',
OrderDate: '1996-11-15T00:00:00.000Z',
ShippedDate: '1996-11-20T00:00:00.000Z',
Freight: 41.95,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10356,
CustomerID: 'WANDK',
OrderDate: '1996-11-18T00:00:00.000Z',
ShippedDate: '1996-11-27T00:00:00.000Z',
Freight: 36.71,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10357,
CustomerID: 'LILAS',
OrderDate: '1996-11-19T00:00:00.000Z',
ShippedDate: '1996-12-02T00:00:00.000Z',
Freight: 34.88,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10358,
CustomerID: 'LAMAI',
OrderDate: '1996-11-20T00:00:00.000Z',
ShippedDate: '1996-11-27T00:00:00.000Z',
Freight: 19.64,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10359,
CustomerID: 'SEVES',
OrderDate: '1996-11-21T00:00:00.000Z',
ShippedDate: '1996-11-26T00:00:00.000Z',
Freight: 288.43,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10360,
CustomerID: 'BLONP',
OrderDate: '1996-11-22T00:00:00.000Z',
ShippedDate: '1996-12-02T00:00:00.000Z',
Freight: 131.7,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10361,
CustomerID: 'QUICK',
OrderDate: '1996-11-22T00:00:00.000Z',
ShippedDate: '1996-12-03T00:00:00.000Z',
Freight: 183.17,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10362,
CustomerID: 'BONAP',
OrderDate: '1996-11-25T00:00:00.000Z',
ShippedDate: '1996-11-28T00:00:00.000Z',
Freight: 96.04,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10363,
CustomerID: 'DRACD',
OrderDate: '1996-11-26T00:00:00.000Z',
ShippedDate: '1996-12-04T00:00:00.000Z',
Freight: 30.54,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10364,
CustomerID: 'EASTC',
OrderDate: '1996-11-26T00:00:00.000Z',
ShippedDate: '1996-12-04T00:00:00.000Z',
Freight: 71.97,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10365,
CustomerID: 'ANTON',
OrderDate: '1996-11-27T00:00:00.000Z',
ShippedDate: '1996-12-02T00:00:00.000Z',
Freight: 22,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10366,
CustomerID: 'GALED',
OrderDate: '1996-11-28T00:00:00.000Z',
ShippedDate: '1996-12-30T00:00:00.000Z',
Freight: 10.14,
ShipName: 'Galería del gastronómo',
ShipAddress: 'Rambla de Cataluña, 23',
ShipCity: 'Barcelona',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10367,
CustomerID: 'VAFFE',
OrderDate: '1996-11-28T00:00:00.000Z',
ShippedDate: '1996-12-02T00:00:00.000Z',
Freight: 13.55,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10368,
CustomerID: 'ERNSH',
OrderDate: '1996-11-29T00:00:00.000Z',
ShippedDate: '1996-12-02T00:00:00.000Z',
Freight: 101.95,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10369,
CustomerID: 'SPLIR',
OrderDate: '1996-12-02T00:00:00.000Z',
ShippedDate: '1996-12-09T00:00:00.000Z',
Freight: 195.68,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10370,
CustomerID: 'CHOPS',
OrderDate: '1996-12-03T00:00:00.000Z',
ShippedDate: '1996-12-27T00:00:00.000Z',
Freight: 1.17,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10371,
CustomerID: 'LAMAI',
OrderDate: '1996-12-03T00:00:00.000Z',
ShippedDate: '1996-12-24T00:00:00.000Z',
Freight: 0.45,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10372,
CustomerID: 'QUEEN',
OrderDate: '1996-12-04T00:00:00.000Z',
ShippedDate: '1996-12-09T00:00:00.000Z',
Freight: 890.78,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10373,
CustomerID: 'HUNGO',
OrderDate: '1996-12-05T00:00:00.000Z',
ShippedDate: '1996-12-11T00:00:00.000Z',
Freight: 124.12,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10374,
CustomerID: 'WOLZA',
OrderDate: '1996-12-05T00:00:00.000Z',
ShippedDate: '1996-12-09T00:00:00.000Z',
Freight: 3.94,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10375,
CustomerID: 'HUNGC',
OrderDate: '1996-12-06T00:00:00.000Z',
ShippedDate: '1996-12-09T00:00:00.000Z',
Freight: 20.12,
ShipName: 'Hungry Coyote Import Store',
{
OrderID: 10376,
CustomerID: 'MEREP',
OrderDate: '1996-12-09T00:00:00.000Z',
ShippedDate: '1996-12-13T00:00:00.000Z',
Freight: 20.39,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10377,
CustomerID: 'SEVES',
OrderDate: '1996-12-09T00:00:00.000Z',
ShippedDate: '1996-12-13T00:00:00.000Z',
Freight: 22.21,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10378,
CustomerID: 'FOLKO',
OrderDate: '1996-12-10T00:00:00.000Z',
ShippedDate: '1996-12-19T00:00:00.000Z',
Freight: 5.44,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10379,
CustomerID: 'QUEDE',
OrderDate: '1996-12-11T00:00:00.000Z',
ShippedDate: '1996-12-13T00:00:00.000Z',
Freight: 45.03,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10380,
CustomerID: 'HUNGO',
OrderDate: '1996-12-12T00:00:00.000Z',
ShippedDate: '1997-01-16T00:00:00.000Z',
Freight: 35.03,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10381,
CustomerID: 'LILAS',
OrderDate: '1996-12-12T00:00:00.000Z',
ShippedDate: '1996-12-13T00:00:00.000Z',
Freight: 7.99,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10382,
CustomerID: 'ERNSH',
OrderDate: '1996-12-13T00:00:00.000Z',
ShippedDate: '1996-12-16T00:00:00.000Z',
Freight: 94.77,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10383,
CustomerID: 'AROUT',
OrderDate: '1996-12-16T00:00:00.000Z',
ShippedDate: '1996-12-18T00:00:00.000Z',
Freight: 34.24,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10384,
CustomerID: 'BERGS',
OrderDate: '1996-12-16T00:00:00.000Z',
ShippedDate: '1996-12-20T00:00:00.000Z',
Freight: 168.64,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10385,
CustomerID: 'SPLIR',
OrderDate: '1996-12-17T00:00:00.000Z',
ShippedDate: '1996-12-23T00:00:00.000Z',
Freight: 30.96,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10386,
CustomerID: 'FAMIA',
OrderDate: '1996-12-18T00:00:00.000Z',
ShippedDate: '1996-12-25T00:00:00.000Z',
Freight: 13.99,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10387,
CustomerID: 'SANTG',
OrderDate: '1996-12-18T00:00:00.000Z',
ShippedDate: '1996-12-20T00:00:00.000Z',
Freight: 93.63,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 10388,
CustomerID: 'SEVES',
OrderDate: '1996-12-19T00:00:00.000Z',
ShippedDate: '1996-12-20T00:00:00.000Z',
Freight: 34.86,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10389,
CustomerID: 'BOTTM',
OrderDate: '1996-12-20T00:00:00.000Z',
ShippedDate: '1996-12-24T00:00:00.000Z',
Freight: 47.42,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10390,
CustomerID: 'ERNSH',
OrderDate: '1996-12-23T00:00:00.000Z',
ShippedDate: '1996-12-26T00:00:00.000Z',
Freight: 126.38,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10391,
CustomerID: 'DRACD',
OrderDate: '1996-12-23T00:00:00.000Z',
ShippedDate: '1996-12-31T00:00:00.000Z',
Freight: 5.45,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10392,
CustomerID: 'PICCO',
OrderDate: '1996-12-24T00:00:00.000Z',
ShippedDate: '1997-01-01T00:00:00.000Z',
Freight: 122.46,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
OrderID: 10393,
CustomerID: 'SAVEA',
OrderDate: '1996-12-25T00:00:00.000Z',
ShippedDate: '1997-01-03T00:00:00.000Z',
Freight: 126.56,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10394,
CustomerID: 'HUNGC',
OrderDate: '1996-12-25T00:00:00.000Z',
ShippedDate: '1997-01-03T00:00:00.000Z',
Freight: 30.34,
ShipName: 'Hungry Coyote Import Store',
ShipAddress: 'City Center Plaza 516 Main St.',
ShipCity: 'Elgin',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10395,
CustomerID: 'HILAA',
OrderDate: '1996-12-26T00:00:00.000Z',
ShippedDate: '1997-01-03T00:00:00.000Z',
Freight: 184.41,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10396,
CustomerID: 'FRANK',
OrderDate: '1996-12-27T00:00:00.000Z',
ShippedDate: '1997-01-06T00:00:00.000Z',
Freight: 135.35,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10397,
CustomerID: 'PRINI',
OrderDate: '1996-12-27T00:00:00.000Z',
ShippedDate: '1997-01-02T00:00:00.000Z',
Freight: 60.26,
{
OrderID: 10398,
CustomerID: 'SAVEA',
OrderDate: '1996-12-30T00:00:00.000Z',
ShippedDate: '1997-01-09T00:00:00.000Z',
Freight: 89.16,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10399,
CustomerID: 'VAFFE',
OrderDate: '1996-12-31T00:00:00.000Z',
ShippedDate: '1997-01-08T00:00:00.000Z',
Freight: 27.36,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10400,
CustomerID: 'EASTC',
OrderDate: '1997-01-01T00:00:00.000Z',
ShippedDate: '1997-01-16T00:00:00.000Z',
Freight: 83.93,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10401,
CustomerID: 'RATTC',
OrderDate: '1997-01-01T00:00:00.000Z',
ShippedDate: '1997-01-10T00:00:00.000Z',
Freight: 12.51,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10402,
CustomerID: 'ERNSH',
OrderDate: '1997-01-02T00:00:00.000Z',
ShippedDate: '1997-01-10T00:00:00.000Z',
Freight: 67.88,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10403,
CustomerID: 'ERNSH',
OrderDate: '1997-01-03T00:00:00.000Z',
ShippedDate: '1997-01-09T00:00:00.000Z',
Freight: 73.79,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10404,
CustomerID: 'MAGAA',
OrderDate: '1997-01-03T00:00:00.000Z',
ShippedDate: '1997-01-08T00:00:00.000Z',
Freight: 155.97,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10405,
CustomerID: 'LINOD',
OrderDate: '1997-01-06T00:00:00.000Z',
ShippedDate: '1997-01-22T00:00:00.000Z',
Freight: 34.82,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10406,
CustomerID: 'QUEEN',
OrderDate: '1997-01-07T00:00:00.000Z',
ShippedDate: '1997-01-13T00:00:00.000Z',
Freight: 108.04,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10407,
CustomerID: 'OTTIK',
OrderDate: '1997-01-07T00:00:00.000Z',
ShippedDate: '1997-01-30T00:00:00.000Z',
Freight: 91.48,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10408,
CustomerID: 'FOLIG',
OrderDate: '1997-01-08T00:00:00.000Z',
ShippedDate: '1997-01-14T00:00:00.000Z',
Freight: 11.26,
ShipName: 'Folies gourmandes',
ShipAddress: '184, chaussée de Tournai',
ShipCity: 'Lille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10409,
CustomerID: 'OCEAN',
OrderDate: '1997-01-09T00:00:00.000Z',
ShippedDate: '1997-01-14T00:00:00.000Z',
Freight: 29.83,
ShipName: 'Océano Atlántico Ltda.',
ShipAddress: 'Ing. Gustavo Moncada 8585 Piso 20-A',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10410,
CustomerID: 'BOTTM',
OrderDate: '1997-01-10T00:00:00.000Z',
ShippedDate: '1997-01-15T00:00:00.000Z',
Freight: 2.4,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10411,
CustomerID: 'BOTTM',
OrderDate: '1997-01-10T00:00:00.000Z',
ShippedDate: '1997-01-21T00:00:00.000Z',
Freight: 23.65,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10412,
CustomerID: 'WARTH',
OrderDate: '1997-01-13T00:00:00.000Z',
ShippedDate: '1997-01-15T00:00:00.000Z',
Freight: 3.77,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10413,
CustomerID: 'LAMAI',
OrderDate: '1997-01-14T00:00:00.000Z',
ShippedDate: '1997-01-16T00:00:00.000Z',
Freight: 95.66,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10414,
CustomerID: 'FAMIA',
OrderDate: '1997-01-14T00:00:00.000Z',
ShippedDate: '1997-01-17T00:00:00.000Z',
Freight: 21.48,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10415,
CustomerID: 'HUNGC',
OrderDate: '1997-01-15T00:00:00.000Z',
ShippedDate: '1997-01-24T00:00:00.000Z',
Freight: 0.2,
ShipName: 'Hungry Coyote Import Store',
ShipAddress: 'City Center Plaza 516 Main St.',
ShipCity: 'Elgin',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10416,
CustomerID: 'WARTH',
OrderDate: '1997-01-16T00:00:00.000Z',
ShippedDate: '1997-01-27T00:00:00.000Z',
Freight: 22.72,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10417,
CustomerID: 'SIMOB',
OrderDate: '1997-01-16T00:00:00.000Z',
ShippedDate: '1997-01-28T00:00:00.000Z',
Freight: 70.29,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10418,
CustomerID: 'QUICK',
OrderDate: '1997-01-17T00:00:00.000Z',
ShippedDate: '1997-01-24T00:00:00.000Z',
Freight: 17.55,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10419,
CustomerID: 'RICSU',
OrderDate: '1997-01-20T00:00:00.000Z',
ShippedDate: '1997-01-30T00:00:00.000Z',
Freight: 137.35,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10420,
CustomerID: 'WELLI',
OrderDate: '1997-01-21T00:00:00.000Z',
ShippedDate: '1997-01-27T00:00:00.000Z',
Freight: 44.12,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10421,
CustomerID: 'QUEDE',
OrderDate: '1997-01-21T00:00:00.000Z',
ShippedDate: '1997-01-27T00:00:00.000Z',
Freight: 99.23,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10422,
CustomerID: 'FRANS',
OrderDate: '1997-01-22T00:00:00.000Z',
ShippedDate: '1997-01-31T00:00:00.000Z',
Freight: 3.02,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10423,
CustomerID: 'GOURL',
OrderDate: '1997-01-23T00:00:00.000Z',
ShippedDate: '1997-02-24T00:00:00.000Z',
Freight: 24.5,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10424,
CustomerID: 'MEREP',
OrderDate: '1997-01-23T00:00:00.000Z',
ShippedDate: '1997-01-27T00:00:00.000Z',
Freight: 370.61,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10425,
CustomerID: 'LAMAI',
OrderDate: '1997-01-24T00:00:00.000Z',
ShippedDate: '1997-02-14T00:00:00.000Z',
Freight: 7.93,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10426,
CustomerID: 'GALED',
OrderDate: '1997-01-27T00:00:00.000Z',
ShippedDate: '1997-02-06T00:00:00.000Z',
Freight: 18.69,
ShipName: 'Galería del gastronómo',
ShipAddress: 'Rambla de Cataluña, 23',
ShipCity: 'Barcelona',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10427,
CustomerID: 'PICCO',
OrderDate: '1997-01-27T00:00:00.000Z',
ShippedDate: '1997-03-03T00:00:00.000Z',
Freight: 31.29,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10428,
CustomerID: 'REGGC',
OrderDate: '1997-01-28T00:00:00.000Z',
ShippedDate: '1997-02-04T00:00:00.000Z',
Freight: 11.09,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10429,
CustomerID: 'HUNGO',
OrderDate: '1997-01-29T00:00:00.000Z',
ShippedDate: '1997-02-07T00:00:00.000Z',
Freight: 56.63,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10430,
CustomerID: 'ERNSH',
OrderDate: '1997-01-30T00:00:00.000Z',
ShippedDate: '1997-02-03T00:00:00.000Z',
Freight: 458.78,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10431,
CustomerID: 'BOTTM',
OrderDate: '1997-01-30T00:00:00.000Z',
ShippedDate: '1997-02-07T00:00:00.000Z',
Freight: 44.17,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10432,
CustomerID: 'SPLIR',
OrderDate: '1997-01-31T00:00:00.000Z',
ShippedDate: '1997-02-07T00:00:00.000Z',
Freight: 4.34,
ShipName: 'Split Rail Beer & Ale',
{
OrderID: 10433,
CustomerID: 'PRINI',
OrderDate: '1997-02-03T00:00:00.000Z',
ShippedDate: '1997-03-04T00:00:00.000Z',
Freight: 73.83,
ShipName: 'Princesa Isabel Vinhos',
ShipAddress: 'Estrada da saúde n. 58',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10434,
CustomerID: 'FOLKO',
OrderDate: '1997-02-03T00:00:00.000Z',
ShippedDate: '1997-02-13T00:00:00.000Z',
Freight: 17.92,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10435,
CustomerID: 'CONSH',
OrderDate: '1997-02-04T00:00:00.000Z',
ShippedDate: '1997-02-07T00:00:00.000Z',
Freight: 9.21,
ShipName: 'Consolidated Holdings',
ShipAddress: 'Berkeley Gardens 12 Brewery',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10436,
CustomerID: 'BLONP',
OrderDate: '1997-02-05T00:00:00.000Z',
ShippedDate: '1997-02-11T00:00:00.000Z',
Freight: 156.66,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10437,
CustomerID: 'WARTH',
OrderDate: '1997-02-05T00:00:00.000Z',
ShippedDate: '1997-02-12T00:00:00.000Z',
Freight: 19.97,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10438,
CustomerID: 'TOMSP',
OrderDate: '1997-02-06T00:00:00.000Z',
ShippedDate: '1997-02-14T00:00:00.000Z',
Freight: 8.24,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10439,
CustomerID: 'MEREP',
OrderDate: '1997-02-07T00:00:00.000Z',
ShippedDate: '1997-02-10T00:00:00.000Z',
Freight: 4.07,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10440,
CustomerID: 'SAVEA',
OrderDate: '1997-02-10T00:00:00.000Z',
ShippedDate: '1997-02-28T00:00:00.000Z',
Freight: 86.53,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10441,
CustomerID: 'OLDWO',
OrderDate: '1997-02-10T00:00:00.000Z',
ShippedDate: '1997-03-14T00:00:00.000Z',
Freight: 73.02,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10442,
CustomerID: 'ERNSH',
OrderDate: '1997-02-11T00:00:00.000Z',
ShippedDate: '1997-02-18T00:00:00.000Z',
Freight: 47.94,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10443,
CustomerID: 'REGGC',
OrderDate: '1997-02-12T00:00:00.000Z',
ShippedDate: '1997-02-14T00:00:00.000Z',
Freight: 13.95,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10444,
CustomerID: 'BERGS',
OrderDate: '1997-02-12T00:00:00.000Z',
ShippedDate: '1997-02-21T00:00:00.000Z',
Freight: 3.5,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10445,
CustomerID: 'BERGS',
OrderDate: '1997-02-13T00:00:00.000Z',
ShippedDate: '1997-02-20T00:00:00.000Z',
Freight: 9.3,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10446,
CustomerID: 'TOMSP',
OrderDate: '1997-02-14T00:00:00.000Z',
ShippedDate: '1997-02-19T00:00:00.000Z',
Freight: 14.68,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10447,
CustomerID: 'RICAR',
OrderDate: '1997-02-14T00:00:00.000Z',
ShippedDate: '1997-03-07T00:00:00.000Z',
Freight: 68.66,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10448,
CustomerID: 'RANCH',
OrderDate: '1997-02-17T00:00:00.000Z',
ShippedDate: '1997-02-24T00:00:00.000Z',
Freight: 38.82,
ShipName: 'Rancho grande',
ShipAddress: 'Av. del Libertador 900',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10449,
CustomerID: 'BLONP',
OrderDate: '1997-02-18T00:00:00.000Z',
ShippedDate: '1997-02-27T00:00:00.000Z',
Freight: 53.3,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
OrderID: 10450,
CustomerID: 'VICTE',
OrderDate: '1997-02-19T00:00:00.000Z',
ShippedDate: '1997-03-11T00:00:00.000Z',
Freight: 7.23,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10451,
CustomerID: 'QUICK',
OrderDate: '1997-02-19T00:00:00.000Z',
ShippedDate: '1997-03-12T00:00:00.000Z',
Freight: 189.09,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10452,
CustomerID: 'SAVEA',
OrderDate: '1997-02-20T00:00:00.000Z',
ShippedDate: '1997-02-26T00:00:00.000Z',
Freight: 140.26,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10453,
CustomerID: 'AROUT',
OrderDate: '1997-02-21T00:00:00.000Z',
ShippedDate: '1997-02-26T00:00:00.000Z',
Freight: 25.36,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10454,
CustomerID: 'LAMAI',
OrderDate: '1997-02-21T00:00:00.000Z',
ShippedDate: '1997-02-25T00:00:00.000Z',
Freight: 2.74,
{
OrderID: 10455,
CustomerID: 'WARTH',
OrderDate: '1997-02-24T00:00:00.000Z',
ShippedDate: '1997-03-03T00:00:00.000Z',
Freight: 180.45,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10456,
CustomerID: 'KOENE',
OrderDate: '1997-02-25T00:00:00.000Z',
ShippedDate: '1997-02-28T00:00:00.000Z',
Freight: 8.12,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10457,
CustomerID: 'KOENE',
OrderDate: '1997-02-25T00:00:00.000Z',
ShippedDate: '1997-03-03T00:00:00.000Z',
Freight: 11.57,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10458,
CustomerID: 'SUPRD',
OrderDate: '1997-02-26T00:00:00.000Z',
ShippedDate: '1997-03-04T00:00:00.000Z',
Freight: 147.06,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10459,
CustomerID: 'VICTE',
OrderDate: '1997-02-27T00:00:00.000Z',
ShippedDate: '1997-02-28T00:00:00.000Z',
Freight: 25.09,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10460,
CustomerID: 'FOLKO',
OrderDate: '1997-02-28T00:00:00.000Z',
ShippedDate: '1997-03-03T00:00:00.000Z',
Freight: 16.27,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10461,
CustomerID: 'LILAS',
OrderDate: '1997-02-28T00:00:00.000Z',
ShippedDate: '1997-03-05T00:00:00.000Z',
Freight: 148.61,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10462,
CustomerID: 'CONSH',
OrderDate: '1997-03-03T00:00:00.000Z',
ShippedDate: '1997-03-18T00:00:00.000Z',
Freight: 6.17,
ShipName: 'Consolidated Holdings',
ShipAddress: 'Berkeley Gardens 12 Brewery',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10463,
CustomerID: 'SUPRD',
OrderDate: '1997-03-04T00:00:00.000Z',
ShippedDate: '1997-03-06T00:00:00.000Z',
Freight: 14.78,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10464,
CustomerID: 'FURIB',
OrderDate: '1997-03-04T00:00:00.000Z',
ShippedDate: '1997-03-14T00:00:00.000Z',
Freight: 89,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10465,
CustomerID: 'VAFFE',
OrderDate: '1997-03-05T00:00:00.000Z',
ShippedDate: '1997-03-14T00:00:00.000Z',
Freight: 145.04,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10466,
CustomerID: 'COMMI',
OrderDate: '1997-03-06T00:00:00.000Z',
ShippedDate: '1997-03-13T00:00:00.000Z',
Freight: 11.93,
ShipName: 'Comércio Mineiro',
ShipAddress: 'Av. dos Lusíadas, 23',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10467,
CustomerID: 'MAGAA',
OrderDate: '1997-03-06T00:00:00.000Z',
ShippedDate: '1997-03-11T00:00:00.000Z',
Freight: 4.93,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10468,
CustomerID: 'KOENE',
OrderDate: '1997-03-07T00:00:00.000Z',
ShippedDate: '1997-03-12T00:00:00.000Z',
Freight: 44.12,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10469,
CustomerID: 'WHITC',
OrderDate: '1997-03-10T00:00:00.000Z',
ShippedDate: '1997-03-14T00:00:00.000Z',
Freight: 60.18,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10470,
CustomerID: 'BONAP',
OrderDate: '1997-03-11T00:00:00.000Z',
ShippedDate: '1997-03-14T00:00:00.000Z',
Freight: 64.56,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10471,
CustomerID: 'BSBEV',
OrderDate: '1997-03-11T00:00:00.000Z',
ShippedDate: '1997-03-18T00:00:00.000Z',
Freight: 45.59,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10472,
CustomerID: 'SEVES',
OrderDate: '1997-03-12T00:00:00.000Z',
ShippedDate: '1997-03-19T00:00:00.000Z',
Freight: 4.2,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10473,
CustomerID: 'ISLAT',
OrderDate: '1997-03-13T00:00:00.000Z',
ShippedDate: '1997-03-21T00:00:00.000Z',
Freight: 16.37,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10474,
CustomerID: 'PERIC',
OrderDate: '1997-03-13T00:00:00.000Z',
ShippedDate: '1997-03-21T00:00:00.000Z',
Freight: 83.49,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10475,
CustomerID: 'SUPRD',
OrderDate: '1997-03-14T00:00:00.000Z',
ShippedDate: '1997-04-04T00:00:00.000Z',
Freight: 68.52,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10476,
CustomerID: 'HILAA',
OrderDate: '1997-03-17T00:00:00.000Z',
ShippedDate: '1997-03-24T00:00:00.000Z',
Freight: 4.41,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10477,
CustomerID: 'PRINI',
OrderDate: '1997-03-17T00:00:00.000Z',
ShippedDate: '1997-03-25T00:00:00.000Z',
Freight: 13.02,
ShipName: 'Princesa Isabel Vinhos',
ShipAddress: 'Estrada da saúde n. 58',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10478,
CustomerID: 'VICTE',
OrderDate: '1997-03-18T00:00:00.000Z',
ShippedDate: '1997-03-26T00:00:00.000Z',
Freight: 4.81,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10479,
CustomerID: 'RATTC',
OrderDate: '1997-03-19T00:00:00.000Z',
ShippedDate: '1997-03-21T00:00:00.000Z',
Freight: 708.95,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10480,
CustomerID: 'FOLIG',
OrderDate: '1997-03-20T00:00:00.000Z',
ShippedDate: '1997-03-24T00:00:00.000Z',
Freight: 1.35,
ShipName: 'Folies gourmandes',
ShipAddress: '184, chaussée de Tournai',
ShipCity: 'Lille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10481,
CustomerID: 'RICAR',
OrderDate: '1997-03-20T00:00:00.000Z',
ShippedDate: '1997-03-25T00:00:00.000Z',
Freight: 64.33,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10482,
CustomerID: 'LAZYK',
OrderDate: '1997-03-21T00:00:00.000Z',
ShippedDate: '1997-04-10T00:00:00.000Z',
Freight: 7.48,
ShipName: 'Lazy K Kountry Store',
ShipAddress: '12 Orchestra Terrace',
ShipCity: 'Walla Walla',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10483,
CustomerID: 'WHITC',
OrderDate: '1997-03-24T00:00:00.000Z',
ShippedDate: '1997-04-25T00:00:00.000Z',
Freight: 15.28,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10484,
CustomerID: 'BSBEV',
OrderDate: '1997-03-24T00:00:00.000Z',
ShippedDate: '1997-04-01T00:00:00.000Z',
Freight: 6.88,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10485,
CustomerID: 'LINOD',
OrderDate: '1997-03-25T00:00:00.000Z',
ShippedDate: '1997-03-31T00:00:00.000Z',
Freight: 64.45,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10486,
CustomerID: 'HILAA',
OrderDate: '1997-03-26T00:00:00.000Z',
ShippedDate: '1997-04-02T00:00:00.000Z',
Freight: 30.53,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10487,
CustomerID: 'QUEEN',
OrderDate: '1997-03-26T00:00:00.000Z',
ShippedDate: '1997-03-28T00:00:00.000Z',
Freight: 71.07,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10488,
CustomerID: 'FRANK',
OrderDate: '1997-03-27T00:00:00.000Z',
ShippedDate: '1997-04-02T00:00:00.000Z',
Freight: 4.93,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10489,
CustomerID: 'PICCO',
OrderDate: '1997-03-28T00:00:00.000Z',
ShippedDate: '1997-04-09T00:00:00.000Z',
Freight: 5.29,
ShipName: 'Piccolo und mehr',
{
OrderID: 10490,
CustomerID: 'HILAA',
OrderDate: '1997-03-31T00:00:00.000Z',
ShippedDate: '1997-04-03T00:00:00.000Z',
Freight: 210.19,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10491,
CustomerID: 'FURIB',
OrderDate: '1997-03-31T00:00:00.000Z',
ShippedDate: '1997-04-08T00:00:00.000Z',
Freight: 16.96,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10492,
CustomerID: 'BOTTM',
OrderDate: '1997-04-01T00:00:00.000Z',
ShippedDate: '1997-04-11T00:00:00.000Z',
Freight: 62.89,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10493,
CustomerID: 'LAMAI',
OrderDate: '1997-04-02T00:00:00.000Z',
ShippedDate: '1997-04-10T00:00:00.000Z',
Freight: 10.64,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10494,
CustomerID: 'COMMI',
OrderDate: '1997-04-02T00:00:00.000Z',
ShippedDate: '1997-04-09T00:00:00.000Z',
Freight: 65.99,
ShipName: 'Comércio Mineiro',
ShipAddress: 'Av. dos Lusíadas, 23',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10495,
CustomerID: 'LAUGB',
OrderDate: '1997-04-03T00:00:00.000Z',
ShippedDate: '1997-04-11T00:00:00.000Z',
Freight: 4.65,
ShipName: 'Laughing Bacchus Wine Cellars',
ShipAddress: '2319 Elm St.',
ShipCity: 'Vancouver',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10496,
CustomerID: 'TRADH',
OrderDate: '1997-04-04T00:00:00.000Z',
ShippedDate: '1997-04-07T00:00:00.000Z',
Freight: 46.77,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10497,
CustomerID: 'LEHMS',
OrderDate: '1997-04-04T00:00:00.000Z',
ShippedDate: '1997-04-07T00:00:00.000Z',
Freight: 36.21,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10498,
CustomerID: 'HILAA',
OrderDate: '1997-04-07T00:00:00.000Z',
ShippedDate: '1997-04-11T00:00:00.000Z',
Freight: 29.75,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10499,
CustomerID: 'LILAS',
OrderDate: '1997-04-08T00:00:00.000Z',
ShippedDate: '1997-04-16T00:00:00.000Z',
Freight: 102.02,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10500,
CustomerID: 'LAMAI',
OrderDate: '1997-04-09T00:00:00.000Z',
ShippedDate: '1997-04-17T00:00:00.000Z',
Freight: 42.68,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10501,
CustomerID: 'BLAUS',
OrderDate: '1997-04-09T00:00:00.000Z',
ShippedDate: '1997-04-16T00:00:00.000Z',
Freight: 8.85,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10502,
CustomerID: 'PERIC',
OrderDate: '1997-04-10T00:00:00.000Z',
ShippedDate: '1997-04-29T00:00:00.000Z',
Freight: 69.32,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10503,
CustomerID: 'HUNGO',
OrderDate: '1997-04-11T00:00:00.000Z',
ShippedDate: '1997-04-16T00:00:00.000Z',
Freight: 16.74,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10504,
CustomerID: 'WHITC',
OrderDate: '1997-04-11T00:00:00.000Z',
ShippedDate: '1997-04-18T00:00:00.000Z',
Freight: 59.13,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10505,
CustomerID: 'MEREP',
OrderDate: '1997-04-14T00:00:00.000Z',
ShippedDate: '1997-04-21T00:00:00.000Z',
Freight: 7.13,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10506,
CustomerID: 'KOENE',
OrderDate: '1997-04-15T00:00:00.000Z',
ShippedDate: '1997-05-02T00:00:00.000Z',
Freight: 21.19,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
OrderID: 10507,
CustomerID: 'ANTON',
OrderDate: '1997-04-15T00:00:00.000Z',
ShippedDate: '1997-04-22T00:00:00.000Z',
Freight: 47.45,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10508,
CustomerID: 'OTTIK',
OrderDate: '1997-04-16T00:00:00.000Z',
ShippedDate: '1997-05-13T00:00:00.000Z',
Freight: 4.99,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10509,
CustomerID: 'BLAUS',
OrderDate: '1997-04-17T00:00:00.000Z',
ShippedDate: '1997-04-29T00:00:00.000Z',
Freight: 0.15,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10510,
CustomerID: 'SAVEA',
OrderDate: '1997-04-18T00:00:00.000Z',
ShippedDate: '1997-04-28T00:00:00.000Z',
Freight: 367.63,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10511,
CustomerID: 'BONAP',
OrderDate: '1997-04-18T00:00:00.000Z',
ShippedDate: '1997-04-21T00:00:00.000Z',
Freight: 350.64,
{
OrderID: 10512,
CustomerID: 'FAMIA',
OrderDate: '1997-04-21T00:00:00.000Z',
ShippedDate: '1997-04-24T00:00:00.000Z',
Freight: 3.53,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10513,
CustomerID: 'WANDK',
OrderDate: '1997-04-22T00:00:00.000Z',
ShippedDate: '1997-04-28T00:00:00.000Z',
Freight: 105.65,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10514,
CustomerID: 'ERNSH',
OrderDate: '1997-04-22T00:00:00.000Z',
ShippedDate: '1997-05-16T00:00:00.000Z',
Freight: 789.95,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10515,
CustomerID: 'QUICK',
OrderDate: '1997-04-23T00:00:00.000Z',
ShippedDate: '1997-05-23T00:00:00.000Z',
Freight: 204.47,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10516,
CustomerID: 'HUNGO',
OrderDate: '1997-04-24T00:00:00.000Z',
ShippedDate: '1997-05-01T00:00:00.000Z',
Freight: 62.78,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10517,
CustomerID: 'NORTS',
OrderDate: '1997-04-24T00:00:00.000Z',
ShippedDate: '1997-04-29T00:00:00.000Z',
Freight: 32.07,
ShipName: 'North/South',
ShipAddress: 'South House 300 Queensbridge',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10518,
CustomerID: 'TORTU',
OrderDate: '1997-04-25T00:00:00.000Z',
ShippedDate: '1997-05-05T00:00:00.000Z',
Freight: 218.15,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10519,
CustomerID: 'CHOPS',
OrderDate: '1997-04-28T00:00:00.000Z',
ShippedDate: '1997-05-01T00:00:00.000Z',
Freight: 91.76,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10520,
CustomerID: 'SANTG',
OrderDate: '1997-04-29T00:00:00.000Z',
ShippedDate: '1997-05-01T00:00:00.000Z',
Freight: 13.37,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 10521,
CustomerID: 'CACTU',
OrderDate: '1997-04-29T00:00:00.000Z',
ShippedDate: '1997-05-02T00:00:00.000Z',
Freight: 17.22,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10522,
CustomerID: 'LEHMS',
OrderDate: '1997-04-30T00:00:00.000Z',
ShippedDate: '1997-05-06T00:00:00.000Z',
Freight: 45.33,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10523,
CustomerID: 'SEVES',
OrderDate: '1997-05-01T00:00:00.000Z',
ShippedDate: '1997-05-30T00:00:00.000Z',
Freight: 77.63,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10524,
CustomerID: 'BERGS',
OrderDate: '1997-05-01T00:00:00.000Z',
ShippedDate: '1997-05-07T00:00:00.000Z',
Freight: 244.79,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10525,
CustomerID: 'BONAP',
OrderDate: '1997-05-02T00:00:00.000Z',
ShippedDate: '1997-05-23T00:00:00.000Z',
Freight: 11.06,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10526,
CustomerID: 'WARTH',
OrderDate: '1997-05-05T00:00:00.000Z',
ShippedDate: '1997-05-15T00:00:00.000Z',
Freight: 58.59,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10527,
CustomerID: 'QUICK',
OrderDate: '1997-05-05T00:00:00.000Z',
ShippedDate: '1997-05-07T00:00:00.000Z',
Freight: 41.9,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10528,
CustomerID: 'GREAL',
OrderDate: '1997-05-06T00:00:00.000Z',
ShippedDate: '1997-05-09T00:00:00.000Z',
Freight: 3.35,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10529,
CustomerID: 'MAISD',
OrderDate: '1997-05-07T00:00:00.000Z',
ShippedDate: '1997-05-09T00:00:00.000Z',
Freight: 66.69,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10530,
CustomerID: 'PICCO',
OrderDate: '1997-05-08T00:00:00.000Z',
ShippedDate: '1997-05-12T00:00:00.000Z',
Freight: 339.22,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10531,
CustomerID: 'OCEAN',
OrderDate: '1997-05-08T00:00:00.000Z',
ShippedDate: '1997-05-19T00:00:00.000Z',
Freight: 8.12,
ShipName: 'Océano Atlántico Ltda.',
ShipAddress: 'Ing. Gustavo Moncada 8585 Piso 20-A',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10532,
CustomerID: 'EASTC',
OrderDate: '1997-05-09T00:00:00.000Z',
ShippedDate: '1997-05-12T00:00:00.000Z',
Freight: 74.46,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10533,
CustomerID: 'FOLKO',
OrderDate: '1997-05-12T00:00:00.000Z',
ShippedDate: '1997-05-22T00:00:00.000Z',
Freight: 188.04,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10534,
CustomerID: 'LEHMS',
OrderDate: '1997-05-12T00:00:00.000Z',
ShippedDate: '1997-05-14T00:00:00.000Z',
Freight: 27.94,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10535,
CustomerID: 'ANTON',
OrderDate: '1997-05-13T00:00:00.000Z',
ShippedDate: '1997-05-21T00:00:00.000Z',
Freight: 15.64,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10536,
CustomerID: 'LEHMS',
OrderDate: '1997-05-14T00:00:00.000Z',
ShippedDate: '1997-06-06T00:00:00.000Z',
Freight: 58.88,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10537,
CustomerID: 'RICSU',
OrderDate: '1997-05-14T00:00:00.000Z',
ShippedDate: '1997-05-19T00:00:00.000Z',
Freight: 78.85,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10538,
CustomerID: 'BSBEV',
OrderDate: '1997-05-15T00:00:00.000Z',
ShippedDate: '1997-05-16T00:00:00.000Z',
Freight: 4.87,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10539,
CustomerID: 'BSBEV',
OrderDate: '1997-05-16T00:00:00.000Z',
ShippedDate: '1997-05-23T00:00:00.000Z',
Freight: 12.36,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10540,
CustomerID: 'QUICK',
OrderDate: '1997-05-19T00:00:00.000Z',
ShippedDate: '1997-06-13T00:00:00.000Z',
Freight: 1007.64,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10541,
CustomerID: 'HANAR',
OrderDate: '1997-05-19T00:00:00.000Z',
ShippedDate: '1997-05-29T00:00:00.000Z',
Freight: 68.65,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10542,
CustomerID: 'KOENE',
OrderDate: '1997-05-20T00:00:00.000Z',
ShippedDate: '1997-05-26T00:00:00.000Z',
Freight: 10.95,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10543,
CustomerID: 'LILAS',
OrderDate: '1997-05-21T00:00:00.000Z',
ShippedDate: '1997-05-23T00:00:00.000Z',
Freight: 48.17,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10544,
CustomerID: 'LONEP',
OrderDate: '1997-05-21T00:00:00.000Z',
ShippedDate: '1997-05-30T00:00:00.000Z',
Freight: 24.91,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10545,
CustomerID: 'LAZYK',
OrderDate: '1997-05-22T00:00:00.000Z',
ShippedDate: '1997-06-26T00:00:00.000Z',
Freight: 11.92,
ShipName: 'Lazy K Kountry Store',
ShipAddress: '12 Orchestra Terrace',
ShipCity: 'Walla Walla',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10546,
CustomerID: 'VICTE',
OrderDate: '1997-05-23T00:00:00.000Z',
ShippedDate: '1997-05-27T00:00:00.000Z',
Freight: 194.72,
ShipName: 'Victuailles en stock',
{
OrderID: 10547,
CustomerID: 'SEVES',
OrderDate: '1997-05-23T00:00:00.000Z',
ShippedDate: '1997-06-02T00:00:00.000Z',
Freight: 178.43,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10548,
CustomerID: 'TOMSP',
OrderDate: '1997-05-26T00:00:00.000Z',
ShippedDate: '1997-06-02T00:00:00.000Z',
Freight: 1.43,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10549,
CustomerID: 'QUICK',
OrderDate: '1997-05-27T00:00:00.000Z',
ShippedDate: '1997-05-30T00:00:00.000Z',
Freight: 171.24,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10550,
CustomerID: 'GODOS',
OrderDate: '1997-05-28T00:00:00.000Z',
ShippedDate: '1997-06-06T00:00:00.000Z',
Freight: 4.32,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10551,
CustomerID: 'FURIB',
OrderDate: '1997-05-28T00:00:00.000Z',
ShippedDate: '1997-06-06T00:00:00.000Z',
Freight: 72.95,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10552,
CustomerID: 'HILAA',
OrderDate: '1997-05-29T00:00:00.000Z',
ShippedDate: '1997-06-05T00:00:00.000Z',
Freight: 83.22,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10553,
CustomerID: 'WARTH',
OrderDate: '1997-05-30T00:00:00.000Z',
ShippedDate: '1997-06-03T00:00:00.000Z',
Freight: 149.49,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10554,
CustomerID: 'OTTIK',
OrderDate: '1997-05-30T00:00:00.000Z',
ShippedDate: '1997-06-05T00:00:00.000Z',
Freight: 120.97,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10555,
CustomerID: 'SAVEA',
OrderDate: '1997-06-02T00:00:00.000Z',
ShippedDate: '1997-06-04T00:00:00.000Z',
Freight: 252.49,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10556,
CustomerID: 'SIMOB',
OrderDate: '1997-06-03T00:00:00.000Z',
ShippedDate: '1997-06-13T00:00:00.000Z',
Freight: 9.8,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10557,
CustomerID: 'LEHMS',
OrderDate: '1997-06-03T00:00:00.000Z',
ShippedDate: '1997-06-06T00:00:00.000Z',
Freight: 96.72,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10558,
CustomerID: 'AROUT',
OrderDate: '1997-06-04T00:00:00.000Z',
ShippedDate: '1997-06-10T00:00:00.000Z',
Freight: 72.97,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10559,
CustomerID: 'BLONP',
OrderDate: '1997-06-05T00:00:00.000Z',
ShippedDate: '1997-06-13T00:00:00.000Z',
Freight: 8.05,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10560,
CustomerID: 'FRANK',
OrderDate: '1997-06-06T00:00:00.000Z',
ShippedDate: '1997-06-09T00:00:00.000Z',
Freight: 36.65,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10561,
CustomerID: 'FOLKO',
OrderDate: '1997-06-06T00:00:00.000Z',
ShippedDate: '1997-06-09T00:00:00.000Z',
Freight: 242.21,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10562,
CustomerID: 'REGGC',
OrderDate: '1997-06-09T00:00:00.000Z',
ShippedDate: '1997-06-12T00:00:00.000Z',
Freight: 22.95,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10563,
CustomerID: 'RICAR',
OrderDate: '1997-06-10T00:00:00.000Z',
ShippedDate: '1997-06-24T00:00:00.000Z',
Freight: 60.43,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
OrderID: 10564,
CustomerID: 'RATTC',
OrderDate: '1997-06-10T00:00:00.000Z',
ShippedDate: '1997-06-16T00:00:00.000Z',
Freight: 13.75,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10565,
CustomerID: 'MEREP',
OrderDate: '1997-06-11T00:00:00.000Z',
ShippedDate: '1997-06-18T00:00:00.000Z',
Freight: 7.15,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10566,
CustomerID: 'BLONP',
OrderDate: '1997-06-12T00:00:00.000Z',
ShippedDate: '1997-06-18T00:00:00.000Z',
Freight: 88.4,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10567,
CustomerID: 'HUNGO',
OrderDate: '1997-06-12T00:00:00.000Z',
ShippedDate: '1997-06-17T00:00:00.000Z',
Freight: 33.97,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10568,
CustomerID: 'GALED',
OrderDate: '1997-06-13T00:00:00.000Z',
ShippedDate: '1997-07-09T00:00:00.000Z',
Freight: 6.54,
{
OrderID: 10569,
CustomerID: 'RATTC',
OrderDate: '1997-06-16T00:00:00.000Z',
ShippedDate: '1997-07-11T00:00:00.000Z',
Freight: 58.98,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10570,
CustomerID: 'MEREP',
OrderDate: '1997-06-17T00:00:00.000Z',
ShippedDate: '1997-06-19T00:00:00.000Z',
Freight: 188.99,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10571,
CustomerID: 'ERNSH',
OrderDate: '1997-06-17T00:00:00.000Z',
ShippedDate: '1997-07-04T00:00:00.000Z',
Freight: 26.06,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10572,
CustomerID: 'BERGS',
OrderDate: '1997-06-18T00:00:00.000Z',
ShippedDate: '1997-06-25T00:00:00.000Z',
Freight: 116.43,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10573,
CustomerID: 'ANTON',
OrderDate: '1997-06-19T00:00:00.000Z',
ShippedDate: '1997-06-20T00:00:00.000Z',
Freight: 84.84,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10574,
CustomerID: 'TRAIH',
OrderDate: '1997-06-19T00:00:00.000Z',
ShippedDate: '1997-06-30T00:00:00.000Z',
Freight: 37.6,
ShipName: "Trail' Head Gourmet Provisioners",
ShipAddress: '722 DaVinci Blvd.',
ShipCity: 'Kirkland',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10575,
CustomerID: 'MORGK',
OrderDate: '1997-06-20T00:00:00.000Z',
ShippedDate: '1997-06-30T00:00:00.000Z',
Freight: 127.34,
ShipName: 'Morgenstern Gesundkost',
ShipAddress: 'Heerstr. 22',
ShipCity: 'Leipzig',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10576,
CustomerID: 'TORTU',
OrderDate: '1997-06-23T00:00:00.000Z',
ShippedDate: '1997-06-30T00:00:00.000Z',
Freight: 18.56,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10577,
CustomerID: 'TRAIH',
OrderDate: '1997-06-23T00:00:00.000Z',
ShippedDate: '1997-06-30T00:00:00.000Z',
Freight: 25.41,
ShipName: "Trail' Head Gourmet Provisioners",
ShipAddress: '722 DaVinci Blvd.',
ShipCity: 'Kirkland',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10578,
CustomerID: 'BSBEV',
OrderDate: '1997-06-24T00:00:00.000Z',
ShippedDate: '1997-07-25T00:00:00.000Z',
Freight: 29.6,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10579,
CustomerID: 'LETSS',
OrderDate: '1997-06-25T00:00:00.000Z',
ShippedDate: '1997-07-04T00:00:00.000Z',
Freight: 13.73,
ShipName: "Let' Stop N Shop",
ShipAddress: '87 Polk St. Suite 5',
ShipCity: 'San Francisco',
ShipRegion: 'CA',
ShipCountry: 'USA',
},
{
OrderID: 10580,
CustomerID: 'OTTIK',
OrderDate: '1997-06-26T00:00:00.000Z',
ShippedDate: '1997-07-01T00:00:00.000Z',
Freight: 75.89,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10581,
CustomerID: 'FAMIA',
OrderDate: '1997-06-26T00:00:00.000Z',
ShippedDate: '1997-07-02T00:00:00.000Z',
Freight: 3.01,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
{
OrderID: 10582,
CustomerID: 'BLAUS',
OrderDate: '1997-06-27T00:00:00.000Z',
ShippedDate: '1997-07-14T00:00:00.000Z',
Freight: 27.71,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10583,
CustomerID: 'WARTH',
OrderDate: '1997-06-30T00:00:00.000Z',
ShippedDate: '1997-07-04T00:00:00.000Z',
Freight: 7.28,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10584,
CustomerID: 'BLONP',
OrderDate: '1997-06-30T00:00:00.000Z',
ShippedDate: '1997-07-04T00:00:00.000Z',
Freight: 59.14,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10585,
CustomerID: 'WELLI',
OrderDate: '1997-07-01T00:00:00.000Z',
ShippedDate: '1997-07-10T00:00:00.000Z',
Freight: 13.41,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10586,
CustomerID: 'REGGC',
OrderDate: '1997-07-02T00:00:00.000Z',
ShippedDate: '1997-07-09T00:00:00.000Z',
Freight: 0.48,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10587,
CustomerID: 'QUEDE',
OrderDate: '1997-07-02T00:00:00.000Z',
ShippedDate: '1997-07-09T00:00:00.000Z',
Freight: 62.52,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10588,
CustomerID: 'QUICK',
OrderDate: '1997-07-03T00:00:00.000Z',
ShippedDate: '1997-07-10T00:00:00.000Z',
Freight: 194.67,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10589,
CustomerID: 'GREAL',
OrderDate: '1997-07-04T00:00:00.000Z',
ShippedDate: '1997-07-14T00:00:00.000Z',
Freight: 4.42,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10590,
CustomerID: 'MEREP',
OrderDate: '1997-07-07T00:00:00.000Z',
ShippedDate: '1997-07-14T00:00:00.000Z',
Freight: 44.77,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10591,
CustomerID: 'VAFFE',
OrderDate: '1997-07-07T00:00:00.000Z',
ShippedDate: '1997-07-16T00:00:00.000Z',
Freight: 55.92,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10592,
CustomerID: 'LEHMS',
OrderDate: '1997-07-08T00:00:00.000Z',
ShippedDate: '1997-07-16T00:00:00.000Z',
Freight: 32.1,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10593,
CustomerID: 'LEHMS',
OrderDate: '1997-07-09T00:00:00.000Z',
ShippedDate: '1997-08-13T00:00:00.000Z',
Freight: 174.2,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10594,
CustomerID: 'OLDWO',
OrderDate: '1997-07-09T00:00:00.000Z',
ShippedDate: '1997-07-16T00:00:00.000Z',
Freight: 5.24,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10595,
CustomerID: 'ERNSH',
OrderDate: '1997-07-10T00:00:00.000Z',
ShippedDate: '1997-07-14T00:00:00.000Z',
Freight: 96.78,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10596,
CustomerID: 'WHITC',
OrderDate: '1997-07-11T00:00:00.000Z',
ShippedDate: '1997-08-12T00:00:00.000Z',
Freight: 16.34,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10597,
CustomerID: 'PICCO',
OrderDate: '1997-07-11T00:00:00.000Z',
ShippedDate: '1997-07-18T00:00:00.000Z',
Freight: 35.12,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10598,
CustomerID: 'RATTC',
OrderDate: '1997-07-14T00:00:00.000Z',
ShippedDate: '1997-07-18T00:00:00.000Z',
Freight: 44.42,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10599,
CustomerID: 'BSBEV',
OrderDate: '1997-07-15T00:00:00.000Z',
ShippedDate: '1997-07-21T00:00:00.000Z',
Freight: 29.98,
ShipName: 'B Beverages',
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10600,
CustomerID: 'HUNGC',
OrderDate: '1997-07-16T00:00:00.000Z',
ShippedDate: '1997-07-21T00:00:00.000Z',
Freight: 45.13,
ShipName: 'Hungry Coyote Import Store',
ShipAddress: 'City Center Plaza 516 Main St.',
ShipCity: 'Elgin',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10601,
CustomerID: 'HILAA',
OrderDate: '1997-07-16T00:00:00.000Z',
ShippedDate: '1997-07-22T00:00:00.000Z',
Freight: 58.3,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10602,
CustomerID: 'VAFFE',
OrderDate: '1997-07-17T00:00:00.000Z',
ShippedDate: '1997-07-22T00:00:00.000Z',
Freight: 2.92,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10603,
CustomerID: 'SAVEA',
OrderDate: '1997-07-18T00:00:00.000Z',
ShippedDate: '1997-08-08T00:00:00.000Z',
Freight: 48.77,
ShipName: 'Save-a-lot Markets',
{
OrderID: 10604,
CustomerID: 'FURIB',
OrderDate: '1997-07-18T00:00:00.000Z',
ShippedDate: '1997-07-29T00:00:00.000Z',
Freight: 7.46,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10605,
CustomerID: 'MEREP',
OrderDate: '1997-07-21T00:00:00.000Z',
ShippedDate: '1997-07-29T00:00:00.000Z',
Freight: 379.13,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10606,
CustomerID: 'TRADH',
OrderDate: '1997-07-22T00:00:00.000Z',
ShippedDate: '1997-07-31T00:00:00.000Z',
Freight: 79.4,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10607,
CustomerID: 'SAVEA',
OrderDate: '1997-07-22T00:00:00.000Z',
ShippedDate: '1997-07-25T00:00:00.000Z',
Freight: 200.24,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10608,
CustomerID: 'TOMSP',
OrderDate: '1997-07-23T00:00:00.000Z',
ShippedDate: '1997-08-01T00:00:00.000Z',
Freight: 27.79,
ShipName: 'Toms Spezialitäten',
ShipAddress: 'Luisenstr. 48',
ShipCity: 'Münster',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10609,
CustomerID: 'DUMON',
OrderDate: '1997-07-24T00:00:00.000Z',
ShippedDate: '1997-07-30T00:00:00.000Z',
Freight: 1.85,
ShipName: 'Du monde entier',
ShipAddress: '67, rue des Cinquante Otages',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10610,
CustomerID: 'LAMAI',
OrderDate: '1997-07-25T00:00:00.000Z',
ShippedDate: '1997-08-06T00:00:00.000Z',
Freight: 26.78,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10611,
CustomerID: 'WOLZA',
OrderDate: '1997-07-25T00:00:00.000Z',
ShippedDate: '1997-08-01T00:00:00.000Z',
Freight: 80.65,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10612,
CustomerID: 'SAVEA',
OrderDate: '1997-07-28T00:00:00.000Z',
ShippedDate: '1997-08-01T00:00:00.000Z',
Freight: 544.08,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10613,
CustomerID: 'HILAA',
OrderDate: '1997-07-29T00:00:00.000Z',
ShippedDate: '1997-08-01T00:00:00.000Z',
Freight: 8.11,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10614,
CustomerID: 'BLAUS',
OrderDate: '1997-07-29T00:00:00.000Z',
ShippedDate: '1997-08-01T00:00:00.000Z',
Freight: 1.93,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10615,
CustomerID: 'WILMK',
OrderDate: '1997-07-30T00:00:00.000Z',
ShippedDate: '1997-08-06T00:00:00.000Z',
Freight: 0.75,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10616,
CustomerID: 'GREAL',
OrderDate: '1997-07-31T00:00:00.000Z',
ShippedDate: '1997-08-05T00:00:00.000Z',
Freight: 116.53,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10617,
CustomerID: 'GREAL',
OrderDate: '1997-07-31T00:00:00.000Z',
ShippedDate: '1997-08-04T00:00:00.000Z',
Freight: 18.53,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10618,
CustomerID: 'MEREP',
OrderDate: '1997-08-01T00:00:00.000Z',
ShippedDate: '1997-08-08T00:00:00.000Z',
Freight: 154.68,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10619,
CustomerID: 'MEREP',
OrderDate: '1997-08-04T00:00:00.000Z',
ShippedDate: '1997-08-07T00:00:00.000Z',
Freight: 91.05,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10620,
CustomerID: 'LAUGB',
OrderDate: '1997-08-05T00:00:00.000Z',
ShippedDate: '1997-08-14T00:00:00.000Z',
Freight: 0.94,
ShipName: 'Laughing Bacchus Wine Cellars',
ShipAddress: '2319 Elm St.',
ShipCity: 'Vancouver',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
OrderID: 10621,
CustomerID: 'ISLAT',
OrderDate: '1997-08-05T00:00:00.000Z',
ShippedDate: '1997-08-11T00:00:00.000Z',
Freight: 23.73,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10622,
CustomerID: 'RICAR',
OrderDate: '1997-08-06T00:00:00.000Z',
ShippedDate: '1997-08-11T00:00:00.000Z',
Freight: 50.97,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10623,
CustomerID: 'FRANK',
OrderDate: '1997-08-07T00:00:00.000Z',
ShippedDate: '1997-08-12T00:00:00.000Z',
Freight: 97.18,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10624,
CustomerID: 'THECR',
OrderDate: '1997-08-07T00:00:00.000Z',
ShippedDate: '1997-08-19T00:00:00.000Z',
Freight: 94.8,
ShipName: 'The Cracker Box',
ShipAddress: '55 Grizzly Peak Rd.',
ShipCity: 'Butte',
ShipRegion: 'MT',
ShipCountry: 'USA',
},
{
OrderID: 10625,
CustomerID: 'ANATR',
OrderDate: '1997-08-08T00:00:00.000Z',
ShippedDate: '1997-08-14T00:00:00.000Z',
Freight: 43.9,
{
OrderID: 10626,
CustomerID: 'BERGS',
OrderDate: '1997-08-11T00:00:00.000Z',
ShippedDate: '1997-08-20T00:00:00.000Z',
Freight: 138.69,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10627,
CustomerID: 'SAVEA',
OrderDate: '1997-08-11T00:00:00.000Z',
ShippedDate: '1997-08-21T00:00:00.000Z',
Freight: 107.46,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10628,
CustomerID: 'BLONP',
OrderDate: '1997-08-12T00:00:00.000Z',
ShippedDate: '1997-08-20T00:00:00.000Z',
Freight: 30.36,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10629,
CustomerID: 'GODOS',
OrderDate: '1997-08-12T00:00:00.000Z',
ShippedDate: '1997-08-20T00:00:00.000Z',
Freight: 85.46,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10630,
CustomerID: 'KOENE',
OrderDate: '1997-08-13T00:00:00.000Z',
ShippedDate: '1997-08-19T00:00:00.000Z',
Freight: 32.35,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10631,
CustomerID: 'LAMAI',
OrderDate: '1997-08-14T00:00:00.000Z',
ShippedDate: '1997-08-15T00:00:00.000Z',
Freight: 0.87,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10632,
CustomerID: 'WANDK',
OrderDate: '1997-08-14T00:00:00.000Z',
ShippedDate: '1997-08-19T00:00:00.000Z',
Freight: 41.38,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10633,
CustomerID: 'ERNSH',
OrderDate: '1997-08-15T00:00:00.000Z',
ShippedDate: '1997-08-18T00:00:00.000Z',
Freight: 477.9,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10634,
CustomerID: 'FOLIG',
OrderDate: '1997-08-15T00:00:00.000Z',
ShippedDate: '1997-08-21T00:00:00.000Z',
Freight: 487.38,
ShipName: 'Folies gourmandes',
ShipAddress: '184, chaussée de Tournai',
ShipCity: 'Lille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10635,
CustomerID: 'MAGAA',
OrderDate: '1997-08-18T00:00:00.000Z',
ShippedDate: '1997-08-21T00:00:00.000Z',
Freight: 47.46,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10636,
CustomerID: 'WARTH',
OrderDate: '1997-08-19T00:00:00.000Z',
ShippedDate: '1997-08-26T00:00:00.000Z',
Freight: 1.15,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10637,
CustomerID: 'QUEEN',
OrderDate: '1997-08-19T00:00:00.000Z',
ShippedDate: '1997-08-26T00:00:00.000Z',
Freight: 201.29,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10638,
CustomerID: 'LINOD',
OrderDate: '1997-08-20T00:00:00.000Z',
ShippedDate: '1997-09-01T00:00:00.000Z',
Freight: 158.44,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
{
OrderID: 10639,
CustomerID: 'SANTG',
OrderDate: '1997-08-20T00:00:00.000Z',
ShippedDate: '1997-08-27T00:00:00.000Z',
Freight: 38.64,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 10640,
CustomerID: 'WANDK',
OrderDate: '1997-08-21T00:00:00.000Z',
ShippedDate: '1997-08-28T00:00:00.000Z',
Freight: 23.55,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10641,
CustomerID: 'HILAA',
OrderDate: '1997-08-22T00:00:00.000Z',
ShippedDate: '1997-08-26T00:00:00.000Z',
Freight: 179.61,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10642,
CustomerID: 'SIMOB',
OrderDate: '1997-08-22T00:00:00.000Z',
ShippedDate: '1997-09-05T00:00:00.000Z',
Freight: 41.89,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10643,
CustomerID: 'ALFKI',
OrderDate: '1997-08-25T00:00:00.000Z',
ShippedDate: '1997-09-02T00:00:00.000Z',
Freight: 29.46,
ShipName: 'Alfreds Futterkiste',
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10644,
CustomerID: 'WELLI',
OrderDate: '1997-08-25T00:00:00.000Z',
ShippedDate: '1997-09-01T00:00:00.000Z',
Freight: 0.14,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10645,
CustomerID: 'HANAR',
OrderDate: '1997-08-26T00:00:00.000Z',
ShippedDate: '1997-09-02T00:00:00.000Z',
Freight: 12.41,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10646,
CustomerID: 'HUNGO',
OrderDate: '1997-08-27T00:00:00.000Z',
ShippedDate: '1997-09-03T00:00:00.000Z',
Freight: 142.33,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10647,
CustomerID: 'QUEDE',
OrderDate: '1997-08-27T00:00:00.000Z',
ShippedDate: '1997-09-03T00:00:00.000Z',
Freight: 45.54,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10648,
CustomerID: 'RICAR',
OrderDate: '1997-08-28T00:00:00.000Z',
ShippedDate: '1997-09-09T00:00:00.000Z',
Freight: 14.25,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10649,
CustomerID: 'MAISD',
OrderDate: '1997-08-28T00:00:00.000Z',
ShippedDate: '1997-08-29T00:00:00.000Z',
Freight: 6.2,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10650,
CustomerID: 'FAMIA',
OrderDate: '1997-08-29T00:00:00.000Z',
ShippedDate: '1997-09-03T00:00:00.000Z',
Freight: 176.81,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10651,
CustomerID: 'WANDK',
OrderDate: '1997-09-01T00:00:00.000Z',
ShippedDate: '1997-09-11T00:00:00.000Z',
Freight: 20.6,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10652,
CustomerID: 'GOURL',
OrderDate: '1997-09-01T00:00:00.000Z',
ShippedDate: '1997-09-08T00:00:00.000Z',
Freight: 7.14,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10653,
CustomerID: 'FRANK',
OrderDate: '1997-09-02T00:00:00.000Z',
ShippedDate: '1997-09-19T00:00:00.000Z',
Freight: 93.25,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10654,
CustomerID: 'BERGS',
OrderDate: '1997-09-02T00:00:00.000Z',
ShippedDate: '1997-09-11T00:00:00.000Z',
Freight: 55.26,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10655,
CustomerID: 'REGGC',
OrderDate: '1997-09-03T00:00:00.000Z',
ShippedDate: '1997-09-11T00:00:00.000Z',
Freight: 4.41,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10656,
CustomerID: 'GREAL',
OrderDate: '1997-09-04T00:00:00.000Z',
ShippedDate: '1997-09-10T00:00:00.000Z',
Freight: 57.15,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10657,
CustomerID: 'SAVEA',
OrderDate: '1997-09-04T00:00:00.000Z',
ShippedDate: '1997-09-15T00:00:00.000Z',
Freight: 352.69,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10658,
CustomerID: 'QUICK',
OrderDate: '1997-09-05T00:00:00.000Z',
ShippedDate: '1997-09-08T00:00:00.000Z',
Freight: 364.15,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10659,
CustomerID: 'QUEEN',
OrderDate: '1997-09-05T00:00:00.000Z',
ShippedDate: '1997-09-10T00:00:00.000Z',
Freight: 105.81,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10660,
CustomerID: 'HUNGC',
OrderDate: '1997-09-08T00:00:00.000Z',
ShippedDate: '1997-10-15T00:00:00.000Z',
Freight: 111.29,
ShipName: 'Hungry Coyote Import Store',
{
OrderID: 10661,
CustomerID: 'HUNGO',
OrderDate: '1997-09-09T00:00:00.000Z',
ShippedDate: '1997-09-15T00:00:00.000Z',
Freight: 17.55,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10662,
CustomerID: 'LONEP',
OrderDate: '1997-09-09T00:00:00.000Z',
ShippedDate: '1997-09-18T00:00:00.000Z',
Freight: 1.28,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10663,
CustomerID: 'BONAP',
OrderDate: '1997-09-10T00:00:00.000Z',
ShippedDate: '1997-10-03T00:00:00.000Z',
Freight: 113.15,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10664,
CustomerID: 'FURIB',
OrderDate: '1997-09-10T00:00:00.000Z',
ShippedDate: '1997-09-19T00:00:00.000Z',
Freight: 1.27,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10665,
CustomerID: 'LONEP',
OrderDate: '1997-09-11T00:00:00.000Z',
ShippedDate: '1997-09-17T00:00:00.000Z',
Freight: 26.31,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10666,
CustomerID: 'RICSU',
OrderDate: '1997-09-12T00:00:00.000Z',
ShippedDate: '1997-09-22T00:00:00.000Z',
Freight: 232.42,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10667,
CustomerID: 'ERNSH',
OrderDate: '1997-09-12T00:00:00.000Z',
ShippedDate: '1997-09-19T00:00:00.000Z',
Freight: 78.09,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10668,
CustomerID: 'WANDK',
OrderDate: '1997-09-15T00:00:00.000Z',
ShippedDate: '1997-09-23T00:00:00.000Z',
Freight: 47.22,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10669,
CustomerID: 'SIMOB',
OrderDate: '1997-09-15T00:00:00.000Z',
ShippedDate: '1997-09-22T00:00:00.000Z',
Freight: 24.39,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10670,
CustomerID: 'FRANK',
OrderDate: '1997-09-16T00:00:00.000Z',
ShippedDate: '1997-09-18T00:00:00.000Z',
Freight: 203.48,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10671,
CustomerID: 'FRANR',
OrderDate: '1997-09-17T00:00:00.000Z',
ShippedDate: '1997-09-24T00:00:00.000Z',
Freight: 30.34,
ShipName: 'France restauration',
ShipAddress: '54, rue Royale',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10672,
CustomerID: 'BERGS',
OrderDate: '1997-09-17T00:00:00.000Z',
ShippedDate: '1997-09-26T00:00:00.000Z',
Freight: 95.75,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10673,
CustomerID: 'WILMK',
OrderDate: '1997-09-18T00:00:00.000Z',
ShippedDate: '1997-09-19T00:00:00.000Z',
Freight: 22.76,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10674,
CustomerID: 'ISLAT',
OrderDate: '1997-09-18T00:00:00.000Z',
ShippedDate: '1997-09-30T00:00:00.000Z',
Freight: 0.9,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10675,
CustomerID: 'FRANK',
OrderDate: '1997-09-19T00:00:00.000Z',
ShippedDate: '1997-09-23T00:00:00.000Z',
Freight: 31.85,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10676,
CustomerID: 'TORTU',
OrderDate: '1997-09-22T00:00:00.000Z',
ShippedDate: '1997-09-29T00:00:00.000Z',
Freight: 2.01,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10677,
CustomerID: 'ANTON',
OrderDate: '1997-09-22T00:00:00.000Z',
ShippedDate: '1997-09-26T00:00:00.000Z',
Freight: 4.03,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
OrderID: 10678,
CustomerID: 'SAVEA',
OrderDate: '1997-09-23T00:00:00.000Z',
ShippedDate: '1997-10-16T00:00:00.000Z',
Freight: 388.98,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10679,
CustomerID: 'BLONP',
OrderDate: '1997-09-23T00:00:00.000Z',
ShippedDate: '1997-09-30T00:00:00.000Z',
Freight: 27.94,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10680,
CustomerID: 'OLDWO',
OrderDate: '1997-09-24T00:00:00.000Z',
ShippedDate: '1997-09-26T00:00:00.000Z',
Freight: 26.61,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10681,
CustomerID: 'GREAL',
OrderDate: '1997-09-25T00:00:00.000Z',
ShippedDate: '1997-09-30T00:00:00.000Z',
Freight: 76.13,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10682,
CustomerID: 'ANTON',
OrderDate: '1997-09-25T00:00:00.000Z',
ShippedDate: '1997-10-01T00:00:00.000Z',
Freight: 36.13,
{
OrderID: 10683,
CustomerID: 'DUMON',
OrderDate: '1997-09-26T00:00:00.000Z',
ShippedDate: '1997-10-01T00:00:00.000Z',
Freight: 4.4,
ShipName: 'Du monde entier',
ShipAddress: '67, rue des Cinquante Otages',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10684,
CustomerID: 'OTTIK',
OrderDate: '1997-09-26T00:00:00.000Z',
ShippedDate: '1997-09-30T00:00:00.000Z',
Freight: 145.63,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10685,
CustomerID: 'GOURL',
OrderDate: '1997-09-29T00:00:00.000Z',
ShippedDate: '1997-10-03T00:00:00.000Z',
Freight: 33.75,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10686,
CustomerID: 'PICCO',
OrderDate: '1997-09-30T00:00:00.000Z',
ShippedDate: '1997-10-08T00:00:00.000Z',
Freight: 96.5,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10687,
CustomerID: 'HUNGO',
OrderDate: '1997-09-30T00:00:00.000Z',
ShippedDate: '1997-10-30T00:00:00.000Z',
Freight: 296.43,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10688,
CustomerID: 'VAFFE',
OrderDate: '1997-10-01T00:00:00.000Z',
ShippedDate: '1997-10-07T00:00:00.000Z',
Freight: 299.09,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10689,
CustomerID: 'BERGS',
OrderDate: '1997-10-01T00:00:00.000Z',
ShippedDate: '1997-10-07T00:00:00.000Z',
Freight: 13.42,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10690,
CustomerID: 'HANAR',
OrderDate: '1997-10-02T00:00:00.000Z',
ShippedDate: '1997-10-03T00:00:00.000Z',
Freight: 15.8,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10691,
CustomerID: 'QUICK',
OrderDate: '1997-10-03T00:00:00.000Z',
ShippedDate: '1997-10-22T00:00:00.000Z',
Freight: 810.05,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10692,
CustomerID: 'ALFKI',
OrderDate: '1997-10-03T00:00:00.000Z',
ShippedDate: '1997-10-13T00:00:00.000Z',
Freight: 61.02,
ShipName: "Alfred' Futterkiste",
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10693,
CustomerID: 'WHITC',
OrderDate: '1997-10-06T00:00:00.000Z',
ShippedDate: '1997-10-10T00:00:00.000Z',
Freight: 139.34,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10694,
CustomerID: 'QUICK',
OrderDate: '1997-10-06T00:00:00.000Z',
ShippedDate: '1997-10-09T00:00:00.000Z',
Freight: 398.36,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10695,
CustomerID: 'WILMK',
OrderDate: '1997-10-07T00:00:00.000Z',
ShippedDate: '1997-10-14T00:00:00.000Z',
Freight: 16.72,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10696,
CustomerID: 'WHITC',
OrderDate: '1997-10-08T00:00:00.000Z',
ShippedDate: '1997-10-14T00:00:00.000Z',
Freight: 102.55,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10697,
CustomerID: 'LINOD',
OrderDate: '1997-10-08T00:00:00.000Z',
ShippedDate: '1997-10-14T00:00:00.000Z',
Freight: 45.52,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10698,
CustomerID: 'ERNSH',
OrderDate: '1997-10-09T00:00:00.000Z',
ShippedDate: '1997-10-17T00:00:00.000Z',
Freight: 272.47,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10699,
CustomerID: 'MORGK',
OrderDate: '1997-10-09T00:00:00.000Z',
ShippedDate: '1997-10-13T00:00:00.000Z',
Freight: 0.58,
ShipName: 'Morgenstern Gesundkost',
ShipAddress: 'Heerstr. 22',
ShipCity: 'Leipzig',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10700,
CustomerID: 'SAVEA',
OrderDate: '1997-10-10T00:00:00.000Z',
ShippedDate: '1997-10-16T00:00:00.000Z',
Freight: 65.1,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10701,
CustomerID: 'HUNGO',
OrderDate: '1997-10-13T00:00:00.000Z',
ShippedDate: '1997-10-15T00:00:00.000Z',
Freight: 220.31,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10702,
CustomerID: 'ALFKI',
OrderDate: '1997-10-13T00:00:00.000Z',
ShippedDate: '1997-10-21T00:00:00.000Z',
Freight: 23.94,
ShipName: "Alfred' Futterkiste",
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10703,
CustomerID: 'FOLKO',
OrderDate: '1997-10-14T00:00:00.000Z',
ShippedDate: '1997-10-20T00:00:00.000Z',
Freight: 152.3,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10704,
CustomerID: 'QUEEN',
OrderDate: '1997-10-14T00:00:00.000Z',
ShippedDate: '1997-11-07T00:00:00.000Z',
Freight: 4.78,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10705,
CustomerID: 'HILAA',
OrderDate: '1997-10-15T00:00:00.000Z',
ShippedDate: '1997-11-18T00:00:00.000Z',
Freight: 3.52,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10706,
CustomerID: 'OLDWO',
OrderDate: '1997-10-16T00:00:00.000Z',
ShippedDate: '1997-10-21T00:00:00.000Z',
Freight: 135.63,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10707,
CustomerID: 'AROUT',
OrderDate: '1997-10-16T00:00:00.000Z',
ShippedDate: '1997-10-23T00:00:00.000Z',
Freight: 21.74,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10708,
CustomerID: 'THEBI',
OrderDate: '1997-10-17T00:00:00.000Z',
ShippedDate: '1997-11-05T00:00:00.000Z',
Freight: 2.96,
ShipName: 'The Big Cheese',
ShipAddress: '89 Jefferson Way Suite 2',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10709,
CustomerID: 'GOURL',
OrderDate: '1997-10-17T00:00:00.000Z',
ShippedDate: '1997-11-20T00:00:00.000Z',
Freight: 210.8,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10710,
CustomerID: 'FRANS',
OrderDate: '1997-10-20T00:00:00.000Z',
ShippedDate: '1997-10-23T00:00:00.000Z',
Freight: 4.98,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10711,
CustomerID: 'SAVEA',
OrderDate: '1997-10-21T00:00:00.000Z',
ShippedDate: '1997-10-29T00:00:00.000Z',
Freight: 52.41,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10712,
CustomerID: 'HUNGO',
OrderDate: '1997-10-21T00:00:00.000Z',
ShippedDate: '1997-10-31T00:00:00.000Z',
Freight: 89.93,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10713,
CustomerID: 'SAVEA',
OrderDate: '1997-10-22T00:00:00.000Z',
ShippedDate: '1997-10-24T00:00:00.000Z',
Freight: 167.05,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10714,
CustomerID: 'SAVEA',
OrderDate: '1997-10-22T00:00:00.000Z',
ShippedDate: '1997-10-27T00:00:00.000Z',
Freight: 24.49,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10715,
CustomerID: 'BONAP',
OrderDate: '1997-10-23T00:00:00.000Z',
ShippedDate: '1997-10-29T00:00:00.000Z',
Freight: 63.2,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10716,
CustomerID: 'RANCH',
OrderDate: '1997-10-24T00:00:00.000Z',
ShippedDate: '1997-10-27T00:00:00.000Z',
Freight: 22.57,
ShipName: 'Rancho grande',
ShipAddress: 'Av. del Libertador 900',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10717,
CustomerID: 'FRANK',
OrderDate: '1997-10-24T00:00:00.000Z',
ShippedDate: '1997-10-29T00:00:00.000Z',
Freight: 59.25,
ShipName: 'Frankenversand',
{
OrderID: 10718,
CustomerID: 'KOENE',
OrderDate: '1997-10-27T00:00:00.000Z',
ShippedDate: '1997-10-29T00:00:00.000Z',
Freight: 170.88,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10719,
CustomerID: 'LETSS',
OrderDate: '1997-10-27T00:00:00.000Z',
ShippedDate: '1997-11-05T00:00:00.000Z',
Freight: 51.44,
ShipName: "Let' Stop N Shop",
ShipAddress: '87 Polk St. Suite 5',
ShipCity: 'San Francisco',
ShipRegion: 'CA',
ShipCountry: 'USA',
},
{
OrderID: 10720,
CustomerID: 'QUEDE',
OrderDate: '1997-10-28T00:00:00.000Z',
ShippedDate: '1997-11-05T00:00:00.000Z',
Freight: 9.53,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10721,
CustomerID: 'QUICK',
OrderDate: '1997-10-29T00:00:00.000Z',
ShippedDate: '1997-10-31T00:00:00.000Z',
Freight: 48.92,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10722,
CustomerID: 'SAVEA',
OrderDate: '1997-10-29T00:00:00.000Z',
ShippedDate: '1997-11-04T00:00:00.000Z',
Freight: 74.58,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10723,
CustomerID: 'WHITC',
OrderDate: '1997-10-30T00:00:00.000Z',
ShippedDate: '1997-11-25T00:00:00.000Z',
Freight: 21.72,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10724,
CustomerID: 'MEREP',
OrderDate: '1997-10-30T00:00:00.000Z',
ShippedDate: '1997-11-05T00:00:00.000Z',
Freight: 57.75,
ShipName: 'Mère Paillarde',
ShipAddress: '43 rue St. Laurent',
ShipCity: 'Montréal',
ShipRegion: 'Québec',
ShipCountry: 'Canada',
},
{
OrderID: 10725,
CustomerID: 'FAMIA',
OrderDate: '1997-10-31T00:00:00.000Z',
ShippedDate: '1997-11-05T00:00:00.000Z',
Freight: 10.83,
ShipName: 'Familia Arquibaldo',
ShipAddress: 'Rua Orós, 92',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10726,
CustomerID: 'EASTC',
OrderDate: '1997-11-03T00:00:00.000Z',
ShippedDate: '1997-12-05T00:00:00.000Z',
Freight: 16.56,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10727,
CustomerID: 'REGGC',
OrderDate: '1997-11-03T00:00:00.000Z',
ShippedDate: '1997-12-05T00:00:00.000Z',
Freight: 89.9,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10728,
CustomerID: 'QUEEN',
OrderDate: '1997-11-04T00:00:00.000Z',
ShippedDate: '1997-11-11T00:00:00.000Z',
Freight: 58.33,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10729,
CustomerID: 'LINOD',
OrderDate: '1997-11-04T00:00:00.000Z',
ShippedDate: '1997-11-14T00:00:00.000Z',
Freight: 141.06,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10730,
CustomerID: 'BONAP',
OrderDate: '1997-11-05T00:00:00.000Z',
ShippedDate: '1997-11-14T00:00:00.000Z',
Freight: 20.12,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10731,
CustomerID: 'CHOPS',
OrderDate: '1997-11-06T00:00:00.000Z',
ShippedDate: '1997-11-14T00:00:00.000Z',
Freight: 96.65,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10732,
CustomerID: 'BONAP',
OrderDate: '1997-11-06T00:00:00.000Z',
ShippedDate: '1997-11-07T00:00:00.000Z',
Freight: 16.97,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10733,
CustomerID: 'BERGS',
OrderDate: '1997-11-07T00:00:00.000Z',
ShippedDate: '1997-11-10T00:00:00.000Z',
Freight: 110.11,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10734,
CustomerID: 'GOURL',
OrderDate: '1997-11-07T00:00:00.000Z',
ShippedDate: '1997-11-12T00:00:00.000Z',
Freight: 1.63,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
OrderID: 10735,
CustomerID: 'LETSS',
OrderDate: '1997-11-10T00:00:00.000Z',
ShippedDate: '1997-11-21T00:00:00.000Z',
Freight: 45.97,
ShipName: "Let' Stop N Shop",
ShipAddress: '87 Polk St. Suite 5',
ShipCity: 'San Francisco',
ShipRegion: 'CA',
ShipCountry: 'USA',
},
{
OrderID: 10736,
CustomerID: 'HUNGO',
OrderDate: '1997-11-11T00:00:00.000Z',
ShippedDate: '1997-11-21T00:00:00.000Z',
Freight: 44.1,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10737,
CustomerID: 'VINET',
OrderDate: '1997-11-11T00:00:00.000Z',
ShippedDate: '1997-11-18T00:00:00.000Z',
Freight: 7.79,
ShipName: 'Vins et alcools Chevalier',
ShipAddress: "59 rue de l'Abbaye",
ShipCity: 'Reims',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10738,
CustomerID: 'SPECD',
OrderDate: '1997-11-12T00:00:00.000Z',
ShippedDate: '1997-11-18T00:00:00.000Z',
Freight: 2.91,
ShipName: 'Spécialités du monde',
ShipAddress: '25, rue Lauriston',
ShipCity: 'Paris',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10739,
CustomerID: 'VINET',
OrderDate: '1997-11-12T00:00:00.000Z',
ShippedDate: '1997-11-17T00:00:00.000Z',
Freight: 11.08,
{
OrderID: 10740,
CustomerID: 'WHITC',
OrderDate: '1997-11-13T00:00:00.000Z',
ShippedDate: '1997-11-25T00:00:00.000Z',
Freight: 81.88,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10741,
CustomerID: 'AROUT',
OrderDate: '1997-11-14T00:00:00.000Z',
ShippedDate: '1997-11-18T00:00:00.000Z',
Freight: 10.96,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10742,
CustomerID: 'BOTTM',
OrderDate: '1997-11-14T00:00:00.000Z',
ShippedDate: '1997-11-18T00:00:00.000Z',
Freight: 243.73,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10743,
CustomerID: 'AROUT',
OrderDate: '1997-11-17T00:00:00.000Z',
ShippedDate: '1997-11-21T00:00:00.000Z',
Freight: 23.72,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10744,
CustomerID: 'VAFFE',
OrderDate: '1997-11-17T00:00:00.000Z',
ShippedDate: '1997-11-24T00:00:00.000Z',
Freight: 69.19,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10745,
CustomerID: 'QUICK',
OrderDate: '1997-11-18T00:00:00.000Z',
ShippedDate: '1997-11-27T00:00:00.000Z',
Freight: 3.52,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10746,
CustomerID: 'CHOPS',
OrderDate: '1997-11-19T00:00:00.000Z',
ShippedDate: '1997-11-21T00:00:00.000Z',
Freight: 31.43,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10747,
CustomerID: 'PICCO',
OrderDate: '1997-11-19T00:00:00.000Z',
ShippedDate: '1997-11-26T00:00:00.000Z',
Freight: 117.33,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10748,
CustomerID: 'SAVEA',
OrderDate: '1997-11-20T00:00:00.000Z',
ShippedDate: '1997-11-28T00:00:00.000Z',
Freight: 232.55,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10749,
CustomerID: 'ISLAT',
OrderDate: '1997-11-20T00:00:00.000Z',
ShippedDate: '1997-12-19T00:00:00.000Z',
Freight: 61.53,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10750,
CustomerID: 'WARTH',
OrderDate: '1997-11-21T00:00:00.000Z',
ShippedDate: '1997-11-24T00:00:00.000Z',
Freight: 79.3,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10751,
CustomerID: 'RICSU',
OrderDate: '1997-11-24T00:00:00.000Z',
ShippedDate: '1997-12-03T00:00:00.000Z',
Freight: 130.79,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10752,
CustomerID: 'NORTS',
OrderDate: '1997-11-24T00:00:00.000Z',
ShippedDate: '1997-11-28T00:00:00.000Z',
Freight: 1.39,
ShipName: 'North/South',
ShipAddress: 'South House 300 Queensbridge',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10753,
CustomerID: 'FRANS',
OrderDate: '1997-11-25T00:00:00.000Z',
ShippedDate: '1997-11-27T00:00:00.000Z',
Freight: 7.7,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10754,
CustomerID: 'MAGAA',
OrderDate: '1997-11-25T00:00:00.000Z',
ShippedDate: '1997-11-27T00:00:00.000Z',
Freight: 2.38,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10755,
CustomerID: 'BONAP',
OrderDate: '1997-11-26T00:00:00.000Z',
ShippedDate: '1997-11-28T00:00:00.000Z',
Freight: 16.71,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10756,
CustomerID: 'SPLIR',
OrderDate: '1997-11-27T00:00:00.000Z',
ShippedDate: '1997-12-02T00:00:00.000Z',
Freight: 73.21,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10757,
CustomerID: 'SAVEA',
OrderDate: '1997-11-27T00:00:00.000Z',
ShippedDate: '1997-12-15T00:00:00.000Z',
Freight: 8.19,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10758,
CustomerID: 'RICSU',
OrderDate: '1997-11-28T00:00:00.000Z',
ShippedDate: '1997-12-04T00:00:00.000Z',
Freight: 138.17,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10759,
CustomerID: 'ANATR',
OrderDate: '1997-11-28T00:00:00.000Z',
ShippedDate: '1997-12-12T00:00:00.000Z',
Freight: 11.99,
ShipName: 'Ana Trujillo Emparedados y helados',
ShipAddress: 'Avda. de la Constitución 2222',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10760,
CustomerID: 'MAISD',
OrderDate: '1997-12-01T00:00:00.000Z',
ShippedDate: '1997-12-10T00:00:00.000Z',
Freight: 155.64,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10761,
CustomerID: 'RATTC',
OrderDate: '1997-12-02T00:00:00.000Z',
ShippedDate: '1997-12-08T00:00:00.000Z',
Freight: 18.66,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10762,
CustomerID: 'FOLKO',
OrderDate: '1997-12-02T00:00:00.000Z',
ShippedDate: '1997-12-09T00:00:00.000Z',
Freight: 328.74,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10763,
CustomerID: 'FOLIG',
OrderDate: '1997-12-03T00:00:00.000Z',
ShippedDate: '1997-12-08T00:00:00.000Z',
Freight: 37.35,
ShipName: 'Folies gourmandes',
ShipAddress: '184, chaussée de Tournai',
ShipCity: 'Lille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10764,
CustomerID: 'ERNSH',
OrderDate: '1997-12-03T00:00:00.000Z',
ShippedDate: '1997-12-08T00:00:00.000Z',
Freight: 145.45,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10765,
CustomerID: 'QUICK',
OrderDate: '1997-12-04T00:00:00.000Z',
ShippedDate: '1997-12-09T00:00:00.000Z',
Freight: 42.74,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10766,
CustomerID: 'OTTIK',
OrderDate: '1997-12-05T00:00:00.000Z',
ShippedDate: '1997-12-09T00:00:00.000Z',
Freight: 157.55,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10767,
CustomerID: 'SUPRD',
OrderDate: '1997-12-05T00:00:00.000Z',
ShippedDate: '1997-12-15T00:00:00.000Z',
Freight: 1.59,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10768,
CustomerID: 'AROUT',
OrderDate: '1997-12-08T00:00:00.000Z',
ShippedDate: '1997-12-15T00:00:00.000Z',
Freight: 146.32,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10769,
CustomerID: 'VAFFE',
OrderDate: '1997-12-08T00:00:00.000Z',
ShippedDate: '1997-12-12T00:00:00.000Z',
Freight: 65.06,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10770,
CustomerID: 'HANAR',
OrderDate: '1997-12-09T00:00:00.000Z',
ShippedDate: '1997-12-17T00:00:00.000Z',
Freight: 5.32,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10771,
CustomerID: 'ERNSH',
OrderDate: '1997-12-10T00:00:00.000Z',
ShippedDate: '1998-01-02T00:00:00.000Z',
Freight: 11.19,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10772,
CustomerID: 'LEHMS',
OrderDate: '1997-12-10T00:00:00.000Z',
ShippedDate: '1997-12-19T00:00:00.000Z',
Freight: 91.28,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10773,
CustomerID: 'ERNSH',
OrderDate: '1997-12-11T00:00:00.000Z',
ShippedDate: '1997-12-16T00:00:00.000Z',
Freight: 96.43,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10774,
CustomerID: 'FOLKO',
OrderDate: '1997-12-11T00:00:00.000Z',
ShippedDate: '1997-12-12T00:00:00.000Z',
Freight: 48.2,
ShipName: 'Folk och fä HB',
{
OrderID: 10775,
CustomerID: 'THECR',
OrderDate: '1997-12-12T00:00:00.000Z',
ShippedDate: '1997-12-26T00:00:00.000Z',
Freight: 20.25,
ShipName: 'The Cracker Box',
ShipAddress: '55 Grizzly Peak Rd.',
ShipCity: 'Butte',
ShipRegion: 'MT',
ShipCountry: 'USA',
},
{
OrderID: 10776,
CustomerID: 'ERNSH',
OrderDate: '1997-12-15T00:00:00.000Z',
ShippedDate: '1997-12-18T00:00:00.000Z',
Freight: 351.53,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10777,
CustomerID: 'GOURL',
OrderDate: '1997-12-15T00:00:00.000Z',
ShippedDate: '1998-01-21T00:00:00.000Z',
Freight: 3.01,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10778,
CustomerID: 'BERGS',
OrderDate: '1997-12-16T00:00:00.000Z',
ShippedDate: '1997-12-24T00:00:00.000Z',
Freight: 6.79,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10779,
CustomerID: 'MORGK',
OrderDate: '1997-12-16T00:00:00.000Z',
ShippedDate: '1998-01-14T00:00:00.000Z',
Freight: 58.13,
ShipName: 'Morgenstern Gesundkost',
ShipAddress: 'Heerstr. 22',
ShipCity: 'Leipzig',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10780,
CustomerID: 'LILAS',
OrderDate: '1997-12-16T00:00:00.000Z',
ShippedDate: '1997-12-25T00:00:00.000Z',
Freight: 42.13,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10781,
CustomerID: 'WARTH',
OrderDate: '1997-12-17T00:00:00.000Z',
ShippedDate: '1997-12-19T00:00:00.000Z',
Freight: 73.16,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10782,
CustomerID: 'CACTU',
OrderDate: '1997-12-17T00:00:00.000Z',
ShippedDate: '1997-12-22T00:00:00.000Z',
Freight: 1.1,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10783,
CustomerID: 'HANAR',
OrderDate: '1997-12-18T00:00:00.000Z',
ShippedDate: '1997-12-19T00:00:00.000Z',
Freight: 124.98,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10784,
CustomerID: 'MAGAA',
OrderDate: '1997-12-18T00:00:00.000Z',
ShippedDate: '1997-12-22T00:00:00.000Z',
Freight: 70.09,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10785,
CustomerID: 'GROSR',
OrderDate: '1997-12-18T00:00:00.000Z',
ShippedDate: '1997-12-24T00:00:00.000Z',
Freight: 1.51,
ShipName: 'GROSELLA-Restaurante',
ShipAddress: '5ª Ave. Los Palos Grandes',
ShipCity: 'Caracas',
ShipRegion: 'DF',
ShipCountry: 'Venezuela',
},
{
OrderID: 10786,
CustomerID: 'QUEEN',
OrderDate: '1997-12-19T00:00:00.000Z',
ShippedDate: '1997-12-23T00:00:00.000Z',
Freight: 110.87,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10787,
CustomerID: 'LAMAI',
OrderDate: '1997-12-19T00:00:00.000Z',
ShippedDate: '1997-12-26T00:00:00.000Z',
Freight: 249.93,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10788,
CustomerID: 'QUICK',
OrderDate: '1997-12-22T00:00:00.000Z',
ShippedDate: '1998-01-19T00:00:00.000Z',
Freight: 42.7,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10789,
CustomerID: 'FOLIG',
OrderDate: '1997-12-22T00:00:00.000Z',
ShippedDate: '1997-12-31T00:00:00.000Z',
Freight: 100.6,
ShipName: 'Folies gourmandes',
ShipAddress: '184, chaussée de Tournai',
ShipCity: 'Lille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10790,
CustomerID: 'GOURL',
OrderDate: '1997-12-22T00:00:00.000Z',
ShippedDate: '1997-12-26T00:00:00.000Z',
Freight: 28.23,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10791,
CustomerID: 'FRANK',
OrderDate: '1997-12-23T00:00:00.000Z',
ShippedDate: '1998-01-01T00:00:00.000Z',
Freight: 16.85,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
OrderID: 10792,
CustomerID: 'WOLZA',
OrderDate: '1997-12-23T00:00:00.000Z',
ShippedDate: '1997-12-31T00:00:00.000Z',
Freight: 23.79,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10793,
CustomerID: 'AROUT',
OrderDate: '1997-12-24T00:00:00.000Z',
ShippedDate: '1998-01-08T00:00:00.000Z',
Freight: 4.52,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10794,
CustomerID: 'QUEDE',
OrderDate: '1997-12-24T00:00:00.000Z',
ShippedDate: '1998-01-02T00:00:00.000Z',
Freight: 21.49,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10795,
CustomerID: 'ERNSH',
OrderDate: '1997-12-24T00:00:00.000Z',
ShippedDate: '1998-01-20T00:00:00.000Z',
Freight: 126.66,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10796,
CustomerID: 'HILAA',
OrderDate: '1997-12-25T00:00:00.000Z',
ShippedDate: '1998-01-14T00:00:00.000Z',
Freight: 26.52,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10797,
CustomerID: 'DRACD',
OrderDate: '1997-12-25T00:00:00.000Z',
ShippedDate: '1998-01-05T00:00:00.000Z',
Freight: 33.35,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10798,
CustomerID: 'ISLAT',
OrderDate: '1997-12-26T00:00:00.000Z',
ShippedDate: '1998-01-05T00:00:00.000Z',
Freight: 2.33,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10799,
CustomerID: 'KOENE',
OrderDate: '1997-12-26T00:00:00.000Z',
ShippedDate: '1998-01-05T00:00:00.000Z',
Freight: 30.76,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10800,
CustomerID: 'SEVES',
OrderDate: '1997-12-26T00:00:00.000Z',
ShippedDate: '1998-01-05T00:00:00.000Z',
Freight: 137.44,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10801,
CustomerID: 'BOLID',
OrderDate: '1997-12-29T00:00:00.000Z',
ShippedDate: '1997-12-31T00:00:00.000Z',
Freight: 97.09,
ShipName: 'Bólido Comidas preparadas',
ShipAddress: 'C/ Araquil, 67',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10802,
CustomerID: 'SIMOB',
OrderDate: '1997-12-29T00:00:00.000Z',
ShippedDate: '1998-01-02T00:00:00.000Z',
Freight: 257.26,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10803,
CustomerID: 'WELLI',
OrderDate: '1997-12-30T00:00:00.000Z',
ShippedDate: '1998-01-06T00:00:00.000Z',
Freight: 55.23,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10804,
CustomerID: 'SEVES',
OrderDate: '1997-12-30T00:00:00.000Z',
ShippedDate: '1998-01-07T00:00:00.000Z',
Freight: 27.33,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10805,
CustomerID: 'THEBI',
OrderDate: '1997-12-30T00:00:00.000Z',
ShippedDate: '1998-01-09T00:00:00.000Z',
Freight: 237.34,
ShipName: 'The Big Cheese',
ShipAddress: '89 Jefferson Way Suite 2',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10806,
CustomerID: 'VICTE',
OrderDate: '1997-12-31T00:00:00.000Z',
ShippedDate: '1998-01-05T00:00:00.000Z',
Freight: 22.11,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10807,
CustomerID: 'FRANS',
OrderDate: '1997-12-31T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 1.36,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10808,
CustomerID: 'OLDWO',
OrderDate: '1998-01-01T00:00:00.000Z',
ShippedDate: '1998-01-09T00:00:00.000Z',
Freight: 45.53,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10809,
CustomerID: 'WELLI',
OrderDate: '1998-01-01T00:00:00.000Z',
ShippedDate: '1998-01-07T00:00:00.000Z',
Freight: 4.87,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10810,
CustomerID: 'LAUGB',
OrderDate: '1998-01-01T00:00:00.000Z',
ShippedDate: '1998-01-07T00:00:00.000Z',
Freight: 4.33,
ShipName: 'Laughing Bacchus Wine Cellars',
ShipAddress: '2319 Elm St.',
ShipCity: 'Vancouver',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10811,
CustomerID: 'LINOD',
OrderDate: '1998-01-02T00:00:00.000Z',
ShippedDate: '1998-01-08T00:00:00.000Z',
Freight: 31.22,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10812,
CustomerID: 'REGGC',
OrderDate: '1998-01-02T00:00:00.000Z',
ShippedDate: '1998-01-12T00:00:00.000Z',
Freight: 59.78,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10813,
CustomerID: 'RICAR',
OrderDate: '1998-01-05T00:00:00.000Z',
ShippedDate: '1998-01-09T00:00:00.000Z',
Freight: 47.38,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10814,
CustomerID: 'VICTE',
OrderDate: '1998-01-05T00:00:00.000Z',
ShippedDate: '1998-01-14T00:00:00.000Z',
Freight: 130.94,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10815,
CustomerID: 'SAVEA',
OrderDate: '1998-01-05T00:00:00.000Z',
ShippedDate: '1998-01-14T00:00:00.000Z',
Freight: 14.62,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10816,
CustomerID: 'GREAL',
OrderDate: '1998-01-06T00:00:00.000Z',
ShippedDate: '1998-02-04T00:00:00.000Z',
Freight: 719.78,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10817,
CustomerID: 'KOENE',
OrderDate: '1998-01-06T00:00:00.000Z',
ShippedDate: '1998-01-13T00:00:00.000Z',
Freight: 306.07,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10818,
CustomerID: 'MAGAA',
OrderDate: '1998-01-07T00:00:00.000Z',
ShippedDate: '1998-01-12T00:00:00.000Z',
Freight: 65.48,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10819,
CustomerID: 'CACTU',
OrderDate: '1998-01-07T00:00:00.000Z',
ShippedDate: '1998-01-16T00:00:00.000Z',
Freight: 19.76,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10820,
CustomerID: 'RATTC',
OrderDate: '1998-01-07T00:00:00.000Z',
ShippedDate: '1998-01-13T00:00:00.000Z',
Freight: 37.52,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10821,
CustomerID: 'SPLIR',
OrderDate: '1998-01-08T00:00:00.000Z',
ShippedDate: '1998-01-15T00:00:00.000Z',
Freight: 36.68,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10822,
CustomerID: 'TRAIH',
OrderDate: '1998-01-08T00:00:00.000Z',
ShippedDate: '1998-01-16T00:00:00.000Z',
Freight: 7,
ShipName: "Trail' Head Gourmet Provisioners",
ShipAddress: '722 DaVinci Blvd.',
ShipCity: 'Kirkland',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10823,
CustomerID: 'LILAS',
OrderDate: '1998-01-09T00:00:00.000Z',
ShippedDate: '1998-01-13T00:00:00.000Z',
Freight: 163.97,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10824,
CustomerID: 'FOLKO',
OrderDate: '1998-01-09T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 1.23,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10825,
CustomerID: 'DRACD',
OrderDate: '1998-01-09T00:00:00.000Z',
ShippedDate: '1998-01-14T00:00:00.000Z',
Freight: 79.25,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10826,
CustomerID: 'BLONP',
OrderDate: '1998-01-12T00:00:00.000Z',
ShippedDate: '1998-02-06T00:00:00.000Z',
Freight: 7.09,
ShipName: 'Blondel père et fils',
ShipAddress: '24, place Kléber',
ShipCity: 'Strasbourg',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10827,
CustomerID: 'BONAP',
OrderDate: '1998-01-12T00:00:00.000Z',
ShippedDate: '1998-02-06T00:00:00.000Z',
Freight: 63.54,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10828,
CustomerID: 'RANCH',
OrderDate: '1998-01-13T00:00:00.000Z',
ShippedDate: '1998-02-04T00:00:00.000Z',
Freight: 90.85,
ShipName: 'Rancho grande',
ShipAddress: 'Av. del Libertador 900',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10829,
CustomerID: 'ISLAT',
OrderDate: '1998-01-13T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 154.72,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10830,
CustomerID: 'TRADH',
OrderDate: '1998-01-13T00:00:00.000Z',
ShippedDate: '1998-01-21T00:00:00.000Z',
Freight: 81.83,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10831,
CustomerID: 'SANTG',
OrderDate: '1998-01-14T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 72.19,
ShipName: 'Santé Gourmet',
{
OrderID: 10832,
CustomerID: 'LAMAI',
OrderDate: '1998-01-14T00:00:00.000Z',
ShippedDate: '1998-01-19T00:00:00.000Z',
Freight: 43.26,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10833,
CustomerID: 'OTTIK',
OrderDate: '1998-01-15T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 71.49,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10834,
CustomerID: 'TRADH',
OrderDate: '1998-01-15T00:00:00.000Z',
ShippedDate: '1998-01-19T00:00:00.000Z',
Freight: 29.78,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10835,
CustomerID: 'ALFKI',
OrderDate: '1998-01-15T00:00:00.000Z',
ShippedDate: '1998-01-21T00:00:00.000Z',
Freight: 69.53,
ShipName: "Alfred' Futterkiste",
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10836,
CustomerID: 'ERNSH',
OrderDate: '1998-01-16T00:00:00.000Z',
ShippedDate: '1998-01-21T00:00:00.000Z',
Freight: 411.88,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10837,
CustomerID: 'BERGS',
OrderDate: '1998-01-16T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 13.32,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10838,
CustomerID: 'LINOD',
OrderDate: '1998-01-19T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 59.28,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10839,
CustomerID: 'TRADH',
OrderDate: '1998-01-19T00:00:00.000Z',
ShippedDate: '1998-01-22T00:00:00.000Z',
Freight: 35.43,
ShipName: 'Tradiçao Hipermercados',
ShipAddress: 'Av. Inês de Castro, 414',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10840,
CustomerID: 'LINOD',
OrderDate: '1998-01-19T00:00:00.000Z',
ShippedDate: '1998-02-16T00:00:00.000Z',
Freight: 2.71,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10841,
CustomerID: 'SUPRD',
OrderDate: '1998-01-20T00:00:00.000Z',
ShippedDate: '1998-01-29T00:00:00.000Z',
Freight: 424.3,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10842,
CustomerID: 'TORTU',
OrderDate: '1998-01-20T00:00:00.000Z',
ShippedDate: '1998-01-29T00:00:00.000Z',
Freight: 54.42,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10843,
CustomerID: 'VICTE',
OrderDate: '1998-01-21T00:00:00.000Z',
ShippedDate: '1998-01-26T00:00:00.000Z',
Freight: 9.26,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10844,
CustomerID: 'PICCO',
OrderDate: '1998-01-21T00:00:00.000Z',
ShippedDate: '1998-01-26T00:00:00.000Z',
Freight: 25.22,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10845,
CustomerID: 'QUICK',
OrderDate: '1998-01-21T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 212.98,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10846,
CustomerID: 'SUPRD',
OrderDate: '1998-01-22T00:00:00.000Z',
ShippedDate: '1998-01-23T00:00:00.000Z',
Freight: 56.46,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10847,
CustomerID: 'SAVEA',
OrderDate: '1998-01-22T00:00:00.000Z',
ShippedDate: '1998-02-10T00:00:00.000Z',
Freight: 487.57,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10848,
CustomerID: 'CONSH',
OrderDate: '1998-01-23T00:00:00.000Z',
ShippedDate: '1998-01-29T00:00:00.000Z',
Freight: 38.24,
ShipName: 'Consolidated Holdings',
ShipAddress: 'Berkeley Gardens 12 Brewery',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
OrderID: 10849,
CustomerID: 'KOENE',
OrderDate: '1998-01-23T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 0.56,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10850,
CustomerID: 'VICTE',
OrderDate: '1998-01-23T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 49.19,
ShipName: 'Victuailles en stock',
ShipAddress: '2, rue du Commerce',
ShipCity: 'Lyon',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10851,
CustomerID: 'RICAR',
OrderDate: '1998-01-26T00:00:00.000Z',
ShippedDate: '1998-02-02T00:00:00.000Z',
Freight: 160.55,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10852,
CustomerID: 'RATTC',
OrderDate: '1998-01-26T00:00:00.000Z',
ShippedDate: '1998-01-30T00:00:00.000Z',
Freight: 174.05,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10853,
CustomerID: 'BLAUS',
OrderDate: '1998-01-27T00:00:00.000Z',
ShippedDate: '1998-02-03T00:00:00.000Z',
Freight: 53.83,
{
OrderID: 10854,
CustomerID: 'ERNSH',
OrderDate: '1998-01-27T00:00:00.000Z',
ShippedDate: '1998-02-05T00:00:00.000Z',
Freight: 100.22,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10855,
CustomerID: 'OLDWO',
OrderDate: '1998-01-27T00:00:00.000Z',
ShippedDate: '1998-02-04T00:00:00.000Z',
Freight: 170.97,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10856,
CustomerID: 'ANTON',
OrderDate: '1998-01-28T00:00:00.000Z',
ShippedDate: '1998-02-10T00:00:00.000Z',
Freight: 58.43,
ShipName: 'Antonio Moreno Taquería',
ShipAddress: 'Mataderos 2312',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10857,
CustomerID: 'BERGS',
OrderDate: '1998-01-28T00:00:00.000Z',
ShippedDate: '1998-02-06T00:00:00.000Z',
Freight: 188.85,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10858,
CustomerID: 'LACOR',
OrderDate: '1998-01-29T00:00:00.000Z',
ShippedDate: '1998-02-03T00:00:00.000Z',
Freight: 52.51,
ShipName: "La corne d'abondance",
ShipAddress: "67, avenue de l'Europe",
ShipCity: 'Versailles',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10859,
CustomerID: 'FRANK',
OrderDate: '1998-01-29T00:00:00.000Z',
ShippedDate: '1998-02-02T00:00:00.000Z',
Freight: 76.1,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10860,
CustomerID: 'FRANR',
OrderDate: '1998-01-29T00:00:00.000Z',
ShippedDate: '1998-02-04T00:00:00.000Z',
Freight: 19.26,
ShipName: 'France restauration',
ShipAddress: '54, rue Royale',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10861,
CustomerID: 'WHITC',
OrderDate: '1998-01-30T00:00:00.000Z',
ShippedDate: '1998-02-17T00:00:00.000Z',
Freight: 14.93,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10862,
CustomerID: 'LEHMS',
OrderDate: '1998-01-30T00:00:00.000Z',
ShippedDate: '1998-02-02T00:00:00.000Z',
Freight: 53.23,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10863,
CustomerID: 'HILAA',
OrderDate: '1998-02-02T00:00:00.000Z',
ShippedDate: '1998-02-17T00:00:00.000Z',
Freight: 30.26,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10864,
CustomerID: 'AROUT',
OrderDate: '1998-02-02T00:00:00.000Z',
ShippedDate: '1998-02-09T00:00:00.000Z',
Freight: 3.04,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10865,
CustomerID: 'QUICK',
OrderDate: '1998-02-02T00:00:00.000Z',
ShippedDate: '1998-02-12T00:00:00.000Z',
Freight: 348.14,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10866,
CustomerID: 'BERGS',
OrderDate: '1998-02-03T00:00:00.000Z',
ShippedDate: '1998-02-12T00:00:00.000Z',
Freight: 109.11,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10867,
CustomerID: 'LONEP',
OrderDate: '1998-02-03T00:00:00.000Z',
ShippedDate: '1998-02-11T00:00:00.000Z',
Freight: 1.93,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10868,
CustomerID: 'QUEEN',
OrderDate: '1998-02-04T00:00:00.000Z',
ShippedDate: '1998-02-23T00:00:00.000Z',
Freight: 191.27,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10869,
CustomerID: 'SEVES',
OrderDate: '1998-02-04T00:00:00.000Z',
ShippedDate: '1998-02-09T00:00:00.000Z',
Freight: 143.28,
ShipName: 'Seven Seas Imports',
ShipAddress: '90 Wadhurst Rd.',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10870,
CustomerID: 'WOLZA',
OrderDate: '1998-02-04T00:00:00.000Z',
ShippedDate: '1998-02-13T00:00:00.000Z',
Freight: 12.04,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10871,
CustomerID: 'BONAP',
OrderDate: '1998-02-05T00:00:00.000Z',
ShippedDate: '1998-02-10T00:00:00.000Z',
Freight: 112.27,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10872,
CustomerID: 'GODOS',
OrderDate: '1998-02-05T00:00:00.000Z',
ShippedDate: '1998-02-09T00:00:00.000Z',
Freight: 175.32,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10873,
CustomerID: 'WILMK',
OrderDate: '1998-02-06T00:00:00.000Z',
ShippedDate: '1998-02-09T00:00:00.000Z',
Freight: 0.82,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10874,
CustomerID: 'GODOS',
OrderDate: '1998-02-06T00:00:00.000Z',
ShippedDate: '1998-02-11T00:00:00.000Z',
Freight: 19.58,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10875,
CustomerID: 'BERGS',
OrderDate: '1998-02-06T00:00:00.000Z',
ShippedDate: '1998-03-03T00:00:00.000Z',
Freight: 32.37,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10876,
CustomerID: 'BONAP',
OrderDate: '1998-02-09T00:00:00.000Z',
ShippedDate: '1998-02-12T00:00:00.000Z',
Freight: 60.42,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10877,
CustomerID: 'RICAR',
OrderDate: '1998-02-09T00:00:00.000Z',
ShippedDate: '1998-02-19T00:00:00.000Z',
Freight: 38.06,
ShipName: 'Ricardo Adocicados',
ShipAddress: 'Av. Copacabana, 267',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10878,
CustomerID: 'QUICK',
OrderDate: '1998-02-10T00:00:00.000Z',
ShippedDate: '1998-02-12T00:00:00.000Z',
Freight: 46.69,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10879,
CustomerID: 'WILMK',
OrderDate: '1998-02-10T00:00:00.000Z',
ShippedDate: '1998-02-12T00:00:00.000Z',
Freight: 8.5,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 10880,
CustomerID: 'FOLKO',
OrderDate: '1998-02-10T00:00:00.000Z',
ShippedDate: '1998-02-18T00:00:00.000Z',
Freight: 88.01,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10881,
CustomerID: 'CACTU',
OrderDate: '1998-02-11T00:00:00.000Z',
ShippedDate: '1998-02-18T00:00:00.000Z',
Freight: 2.84,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10882,
CustomerID: 'SAVEA',
OrderDate: '1998-02-11T00:00:00.000Z',
ShippedDate: '1998-02-20T00:00:00.000Z',
Freight: 23.1,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10883,
CustomerID: 'LONEP',
OrderDate: '1998-02-12T00:00:00.000Z',
ShippedDate: '1998-02-20T00:00:00.000Z',
Freight: 0.53,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10884,
CustomerID: 'LETSS',
OrderDate: '1998-02-12T00:00:00.000Z',
ShippedDate: '1998-02-13T00:00:00.000Z',
Freight: 90.97,
ShipName: "Let' Stop N Shop",
ShipAddress: '87 Polk St. Suite 5',
ShipCity: 'San Francisco',
ShipRegion: 'CA',
ShipCountry: 'USA',
},
{
OrderID: 10885,
CustomerID: 'SUPRD',
OrderDate: '1998-02-12T00:00:00.000Z',
ShippedDate: '1998-02-18T00:00:00.000Z',
Freight: 5.64,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10886,
CustomerID: 'HANAR',
OrderDate: '1998-02-13T00:00:00.000Z',
ShippedDate: '1998-03-02T00:00:00.000Z',
Freight: 4.99,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10887,
CustomerID: 'GALED',
OrderDate: '1998-02-13T00:00:00.000Z',
ShippedDate: '1998-02-16T00:00:00.000Z',
Freight: 1.25,
ShipName: 'Galería del gastronómo',
ShipAddress: 'Rambla de Cataluña, 23',
ShipCity: 'Barcelona',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10888,
CustomerID: 'GODOS',
OrderDate: '1998-02-16T00:00:00.000Z',
ShippedDate: '1998-02-23T00:00:00.000Z',
Freight: 51.87,
ShipName: 'Godos Cocina Típica',
{
OrderID: 10889,
CustomerID: 'RATTC',
OrderDate: '1998-02-16T00:00:00.000Z',
ShippedDate: '1998-02-23T00:00:00.000Z',
Freight: 280.61,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10890,
CustomerID: 'DUMON',
OrderDate: '1998-02-16T00:00:00.000Z',
ShippedDate: '1998-02-18T00:00:00.000Z',
Freight: 32.76,
ShipName: 'Du monde entier',
ShipAddress: '67, rue des Cinquante Otages',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10891,
CustomerID: 'LEHMS',
OrderDate: '1998-02-17T00:00:00.000Z',
ShippedDate: '1998-02-19T00:00:00.000Z',
Freight: 20.37,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10892,
CustomerID: 'MAISD',
OrderDate: '1998-02-17T00:00:00.000Z',
ShippedDate: '1998-02-19T00:00:00.000Z',
Freight: 120.27,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10893,
CustomerID: 'KOENE',
OrderDate: '1998-02-18T00:00:00.000Z',
ShippedDate: '1998-02-20T00:00:00.000Z',
Freight: 77.78,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10894,
CustomerID: 'SAVEA',
OrderDate: '1998-02-18T00:00:00.000Z',
ShippedDate: '1998-02-20T00:00:00.000Z',
Freight: 116.13,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10895,
CustomerID: 'ERNSH',
OrderDate: '1998-02-18T00:00:00.000Z',
ShippedDate: '1998-02-23T00:00:00.000Z',
Freight: 162.75,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10896,
CustomerID: 'MAISD',
OrderDate: '1998-02-19T00:00:00.000Z',
ShippedDate: '1998-02-27T00:00:00.000Z',
Freight: 32.45,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10897,
CustomerID: 'HUNGO',
OrderDate: '1998-02-19T00:00:00.000Z',
ShippedDate: '1998-02-25T00:00:00.000Z',
Freight: 603.54,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10898,
CustomerID: 'OCEAN',
OrderDate: '1998-02-20T00:00:00.000Z',
ShippedDate: '1998-03-06T00:00:00.000Z',
Freight: 1.27,
ShipName: 'Océano Atlántico Ltda.',
ShipAddress: 'Ing. Gustavo Moncada 8585 Piso 20-A',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10899,
CustomerID: 'LILAS',
OrderDate: '1998-02-20T00:00:00.000Z',
ShippedDate: '1998-02-26T00:00:00.000Z',
Freight: 1.21,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10900,
CustomerID: 'WELLI',
OrderDate: '1998-02-20T00:00:00.000Z',
ShippedDate: '1998-03-04T00:00:00.000Z',
Freight: 1.66,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10901,
CustomerID: 'HILAA',
OrderDate: '1998-02-23T00:00:00.000Z',
ShippedDate: '1998-02-26T00:00:00.000Z',
Freight: 62.09,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10902,
CustomerID: 'FOLKO',
OrderDate: '1998-02-23T00:00:00.000Z',
ShippedDate: '1998-03-03T00:00:00.000Z',
Freight: 44.15,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10903,
CustomerID: 'HANAR',
OrderDate: '1998-02-24T00:00:00.000Z',
ShippedDate: '1998-03-04T00:00:00.000Z',
Freight: 36.71,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10904,
CustomerID: 'WHITC',
OrderDate: '1998-02-24T00:00:00.000Z',
ShippedDate: '1998-02-27T00:00:00.000Z',
Freight: 162.95,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 10905,
CustomerID: 'WELLI',
OrderDate: '1998-02-24T00:00:00.000Z',
ShippedDate: '1998-03-06T00:00:00.000Z',
Freight: 13.72,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
OrderID: 10906,
CustomerID: 'WOLZA',
OrderDate: '1998-02-25T00:00:00.000Z',
ShippedDate: '1998-03-03T00:00:00.000Z',
Freight: 26.29,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10907,
CustomerID: 'SPECD',
OrderDate: '1998-02-25T00:00:00.000Z',
ShippedDate: '1998-02-27T00:00:00.000Z',
Freight: 9.19,
ShipName: 'Spécialités du monde',
ShipAddress: '25, rue Lauriston',
ShipCity: 'Paris',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10908,
CustomerID: 'REGGC',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-06T00:00:00.000Z',
Freight: 32.96,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10909,
CustomerID: 'SANTG',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-10T00:00:00.000Z',
Freight: 53.05,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 10910,
CustomerID: 'WILMK',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-04T00:00:00.000Z',
Freight: 38.11,
{
OrderID: 10911,
CustomerID: 'GODOS',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-05T00:00:00.000Z',
Freight: 38.19,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10912,
CustomerID: 'HUNGO',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 580.91,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10913,
CustomerID: 'QUEEN',
OrderDate: '1998-02-26T00:00:00.000Z',
ShippedDate: '1998-03-04T00:00:00.000Z',
Freight: 33.05,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10914,
CustomerID: 'QUEEN',
OrderDate: '1998-02-27T00:00:00.000Z',
ShippedDate: '1998-03-02T00:00:00.000Z',
Freight: 21.19,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10915,
CustomerID: 'TORTU',
OrderDate: '1998-02-27T00:00:00.000Z',
ShippedDate: '1998-03-02T00:00:00.000Z',
Freight: 3.51,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10916,
CustomerID: 'RANCH',
OrderDate: '1998-02-27T00:00:00.000Z',
ShippedDate: '1998-03-09T00:00:00.000Z',
Freight: 63.77,
ShipName: 'Rancho grande',
ShipAddress: 'Av. del Libertador 900',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10917,
CustomerID: 'ROMEY',
OrderDate: '1998-03-02T00:00:00.000Z',
ShippedDate: '1998-03-11T00:00:00.000Z',
Freight: 8.29,
ShipName: 'Romero y tomillo',
ShipAddress: 'Gran Vía, 1',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10918,
CustomerID: 'BOTTM',
OrderDate: '1998-03-02T00:00:00.000Z',
ShippedDate: '1998-03-11T00:00:00.000Z',
Freight: 48.83,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10919,
CustomerID: 'LINOD',
OrderDate: '1998-03-02T00:00:00.000Z',
ShippedDate: '1998-03-04T00:00:00.000Z',
Freight: 19.8,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10920,
CustomerID: 'AROUT',
OrderDate: '1998-03-03T00:00:00.000Z',
ShippedDate: '1998-03-09T00:00:00.000Z',
Freight: 29.61,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10921,
CustomerID: 'VAFFE',
OrderDate: '1998-03-03T00:00:00.000Z',
ShippedDate: '1998-03-09T00:00:00.000Z',
Freight: 176.48,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10922,
CustomerID: 'HANAR',
OrderDate: '1998-03-03T00:00:00.000Z',
ShippedDate: '1998-03-05T00:00:00.000Z',
Freight: 62.74,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10923,
CustomerID: 'LAMAI',
OrderDate: '1998-03-03T00:00:00.000Z',
ShippedDate: '1998-03-13T00:00:00.000Z',
Freight: 68.26,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10924,
CustomerID: 'BERGS',
OrderDate: '1998-03-04T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 151.52,
ShipName: 'Berglunds snabbköp',
ShipAddress: 'Berguvsvägen 8',
ShipCity: 'Luleå',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10925,
CustomerID: 'HANAR',
OrderDate: '1998-03-04T00:00:00.000Z',
ShippedDate: '1998-03-13T00:00:00.000Z',
Freight: 2.27,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10926,
CustomerID: 'ANATR',
OrderDate: '1998-03-04T00:00:00.000Z',
ShippedDate: '1998-03-11T00:00:00.000Z',
Freight: 39.92,
ShipName: 'Ana Trujillo Emparedados y helados',
ShipAddress: 'Avda. de la Constitución 2222',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10927,
CustomerID: 'LACOR',
OrderDate: '1998-03-05T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 19.79,
ShipName: "La corne d'abondance",
ShipAddress: "67, avenue de l'Europe",
ShipCity: 'Versailles',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10928,
CustomerID: 'GALED',
OrderDate: '1998-03-05T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 1.36,
ShipName: 'Galería del gastronómo',
ShipAddress: 'Rambla de Cataluña, 23',
ShipCity: 'Barcelona',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10929,
CustomerID: 'FRANK',
OrderDate: '1998-03-05T00:00:00.000Z',
ShippedDate: '1998-03-12T00:00:00.000Z',
Freight: 33.93,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10930,
CustomerID: 'SUPRD',
OrderDate: '1998-03-06T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 15.55,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10931,
CustomerID: 'RICSU',
OrderDate: '1998-03-06T00:00:00.000Z',
ShippedDate: '1998-03-19T00:00:00.000Z',
Freight: 13.6,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10932,
CustomerID: 'BONAP',
OrderDate: '1998-03-06T00:00:00.000Z',
ShippedDate: '1998-03-24T00:00:00.000Z',
Freight: 134.64,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10933,
CustomerID: 'ISLAT',
OrderDate: '1998-03-06T00:00:00.000Z',
ShippedDate: '1998-03-16T00:00:00.000Z',
Freight: 54.15,
ShipName: 'Island Trading',
ShipAddress: 'Garden House Crowther Way',
ShipCity: 'Cowes',
ShipRegion: 'Isle of Wight',
ShipCountry: 'UK',
},
{
OrderID: 10934,
CustomerID: 'LEHMS',
OrderDate: '1998-03-09T00:00:00.000Z',
ShippedDate: '1998-03-12T00:00:00.000Z',
Freight: 32.01,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10935,
CustomerID: 'WELLI',
OrderDate: '1998-03-09T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 47.59,
ShipName: 'Wellington Importadora',
ShipAddress: 'Rua do Mercado, 12',
ShipCity: 'Resende',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10936,
CustomerID: 'GREAL',
OrderDate: '1998-03-09T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 33.68,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10937,
CustomerID: 'CACTU',
OrderDate: '1998-03-10T00:00:00.000Z',
ShippedDate: '1998-03-13T00:00:00.000Z',
Freight: 31.51,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10938,
CustomerID: 'QUICK',
OrderDate: '1998-03-10T00:00:00.000Z',
ShippedDate: '1998-03-16T00:00:00.000Z',
Freight: 31.89,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10939,
CustomerID: 'MAGAA',
OrderDate: '1998-03-10T00:00:00.000Z',
ShippedDate: '1998-03-13T00:00:00.000Z',
Freight: 76.33,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10940,
CustomerID: 'BONAP',
OrderDate: '1998-03-11T00:00:00.000Z',
ShippedDate: '1998-03-23T00:00:00.000Z',
Freight: 19.77,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10941,
CustomerID: 'SAVEA',
OrderDate: '1998-03-11T00:00:00.000Z',
ShippedDate: '1998-03-20T00:00:00.000Z',
Freight: 400.81,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10942,
CustomerID: 'REGGC',
OrderDate: '1998-03-11T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 17.95,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10943,
CustomerID: 'BSBEV',
OrderDate: '1998-03-11T00:00:00.000Z',
ShippedDate: '1998-03-19T00:00:00.000Z',
Freight: 2.17,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10944,
CustomerID: 'BOTTM',
OrderDate: '1998-03-12T00:00:00.000Z',
ShippedDate: '1998-03-13T00:00:00.000Z',
Freight: 52.92,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10945,
CustomerID: 'MORGK',
OrderDate: '1998-03-12T00:00:00.000Z',
ShippedDate: '1998-03-18T00:00:00.000Z',
Freight: 10.22,
ShipName: 'Morgenstern Gesundkost',
{
OrderID: 10946,
CustomerID: 'VAFFE',
OrderDate: '1998-03-12T00:00:00.000Z',
ShippedDate: '1998-03-19T00:00:00.000Z',
Freight: 27.2,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10947,
CustomerID: 'BSBEV',
OrderDate: '1998-03-13T00:00:00.000Z',
ShippedDate: '1998-03-16T00:00:00.000Z',
Freight: 3.26,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10948,
CustomerID: 'GODOS',
OrderDate: '1998-03-13T00:00:00.000Z',
ShippedDate: '1998-03-19T00:00:00.000Z',
Freight: 23.39,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10949,
CustomerID: 'BOTTM',
OrderDate: '1998-03-13T00:00:00.000Z',
ShippedDate: '1998-03-17T00:00:00.000Z',
Freight: 74.44,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10950,
CustomerID: 'MAGAA',
OrderDate: '1998-03-16T00:00:00.000Z',
ShippedDate: '1998-03-23T00:00:00.000Z',
Freight: 2.5,
ShipName: 'Magazzini Alimentari Riuniti',
ShipAddress: 'Via Ludovico il Moro 22',
ShipCity: 'Bergamo',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 10951,
CustomerID: 'RICSU',
OrderDate: '1998-03-16T00:00:00.000Z',
ShippedDate: '1998-04-07T00:00:00.000Z',
Freight: 30.85,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10952,
CustomerID: 'ALFKI',
OrderDate: '1998-03-16T00:00:00.000Z',
ShippedDate: '1998-03-24T00:00:00.000Z',
Freight: 40.42,
ShipName: "Alfred' Futterkiste",
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10953,
CustomerID: 'AROUT',
OrderDate: '1998-03-16T00:00:00.000Z',
ShippedDate: '1998-03-25T00:00:00.000Z',
Freight: 23.72,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 10954,
CustomerID: 'LINOD',
OrderDate: '1998-03-17T00:00:00.000Z',
ShippedDate: '1998-03-20T00:00:00.000Z',
Freight: 27.91,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 10955,
CustomerID: 'FOLKO',
OrderDate: '1998-03-17T00:00:00.000Z',
ShippedDate: '1998-03-20T00:00:00.000Z',
Freight: 3.26,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10956,
CustomerID: 'BLAUS',
OrderDate: '1998-03-17T00:00:00.000Z',
ShippedDate: '1998-03-20T00:00:00.000Z',
Freight: 44.65,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10957,
CustomerID: 'HILAA',
OrderDate: '1998-03-18T00:00:00.000Z',
ShippedDate: '1998-03-27T00:00:00.000Z',
Freight: 105.36,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10958,
CustomerID: 'OCEAN',
OrderDate: '1998-03-18T00:00:00.000Z',
ShippedDate: '1998-03-27T00:00:00.000Z',
Freight: 49.56,
ShipName: 'Océano Atlántico Ltda.',
ShipAddress: 'Ing. Gustavo Moncada 8585 Piso 20-A',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10959,
CustomerID: 'GOURL',
OrderDate: '1998-03-18T00:00:00.000Z',
ShippedDate: '1998-03-23T00:00:00.000Z',
Freight: 4.98,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10960,
CustomerID: 'HILAA',
OrderDate: '1998-03-19T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 2.08,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10961,
CustomerID: 'QUEEN',
OrderDate: '1998-03-19T00:00:00.000Z',
ShippedDate: '1998-03-30T00:00:00.000Z',
Freight: 104.47,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10962,
CustomerID: 'QUICK',
OrderDate: '1998-03-19T00:00:00.000Z',
ShippedDate: '1998-03-23T00:00:00.000Z',
Freight: 275.79,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
OrderID: 10963,
CustomerID: 'FURIB',
OrderDate: '1998-03-19T00:00:00.000Z',
ShippedDate: '1998-03-26T00:00:00.000Z',
Freight: 2.7,
ShipName: 'Furia Bacalhau e Frutos do Mar',
ShipAddress: 'Jardim das rosas n. 32',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 10964,
CustomerID: 'SPECD',
OrderDate: '1998-03-20T00:00:00.000Z',
ShippedDate: '1998-03-24T00:00:00.000Z',
Freight: 87.38,
ShipName: 'Spécialités du monde',
ShipAddress: '25, rue Lauriston',
ShipCity: 'Paris',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10965,
CustomerID: 'OLDWO',
OrderDate: '1998-03-20T00:00:00.000Z',
ShippedDate: '1998-03-30T00:00:00.000Z',
Freight: 144.38,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 10966,
CustomerID: 'CHOPS',
OrderDate: '1998-03-20T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 27.19,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 10967,
CustomerID: 'TOMSP',
OrderDate: '1998-03-23T00:00:00.000Z',
ShippedDate: '1998-04-02T00:00:00.000Z',
Freight: 62.22,
{
OrderID: 10968,
CustomerID: 'ERNSH',
OrderDate: '1998-03-23T00:00:00.000Z',
ShippedDate: '1998-04-01T00:00:00.000Z',
Freight: 74.6,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10969,
CustomerID: 'COMMI',
OrderDate: '1998-03-23T00:00:00.000Z',
ShippedDate: '1998-03-30T00:00:00.000Z',
Freight: 0.21,
ShipName: 'Comércio Mineiro',
ShipAddress: 'Av. dos Lusíadas, 23',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 10970,
CustomerID: 'BOLID',
OrderDate: '1998-03-24T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 16.16,
ShipName: 'Bólido Comidas preparadas',
ShipAddress: 'C/ Araquil, 67',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 10971,
CustomerID: 'FRANR',
OrderDate: '1998-03-24T00:00:00.000Z',
ShippedDate: '1998-04-02T00:00:00.000Z',
Freight: 121.82,
ShipName: 'France restauration',
ShipAddress: '54, rue Royale',
ShipCity: 'Nantes',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10972,
CustomerID: 'LACOR',
OrderDate: '1998-03-24T00:00:00.000Z',
ShippedDate: '1998-03-26T00:00:00.000Z',
Freight: 0.02,
ShipName: "La corne d'abondance",
ShipAddress: "67, avenue de l'Europe",
ShipCity: 'Versailles',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10973,
CustomerID: 'LACOR',
OrderDate: '1998-03-24T00:00:00.000Z',
ShippedDate: '1998-03-27T00:00:00.000Z',
Freight: 15.17,
ShipName: "La corne d'abondance",
ShipAddress: "67, avenue de l'Europe",
ShipCity: 'Versailles',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 10974,
CustomerID: 'SPLIR',
OrderDate: '1998-03-25T00:00:00.000Z',
ShippedDate: '1998-04-03T00:00:00.000Z',
Freight: 12.96,
ShipName: 'Split Rail Beer & Ale',
ShipAddress: 'P.O. Box 555',
ShipCity: 'Lander',
ShipRegion: 'WY',
ShipCountry: 'USA',
},
{
OrderID: 10975,
CustomerID: 'BOTTM',
OrderDate: '1998-03-25T00:00:00.000Z',
ShippedDate: '1998-03-27T00:00:00.000Z',
Freight: 32.27,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10976,
CustomerID: 'HILAA',
OrderDate: '1998-03-25T00:00:00.000Z',
ShippedDate: '1998-04-03T00:00:00.000Z',
Freight: 37.97,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 10977,
CustomerID: 'FOLKO',
OrderDate: '1998-03-26T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 208.5,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10978,
CustomerID: 'MAISD',
OrderDate: '1998-03-26T00:00:00.000Z',
ShippedDate: '1998-04-23T00:00:00.000Z',
Freight: 32.82,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 10979,
CustomerID: 'ERNSH',
OrderDate: '1998-03-26T00:00:00.000Z',
ShippedDate: '1998-03-31T00:00:00.000Z',
Freight: 353.07,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10980,
CustomerID: 'FOLKO',
OrderDate: '1998-03-27T00:00:00.000Z',
ShippedDate: '1998-04-17T00:00:00.000Z',
Freight: 1.26,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10981,
CustomerID: 'HANAR',
OrderDate: '1998-03-27T00:00:00.000Z',
ShippedDate: '1998-04-02T00:00:00.000Z',
Freight: 193.37,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10982,
CustomerID: 'BOTTM',
OrderDate: '1998-03-27T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 14.01,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 10983,
CustomerID: 'SAVEA',
OrderDate: '1998-03-27T00:00:00.000Z',
ShippedDate: '1998-04-06T00:00:00.000Z',
Freight: 657.54,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10984,
CustomerID: 'SAVEA',
OrderDate: '1998-03-30T00:00:00.000Z',
ShippedDate: '1998-04-03T00:00:00.000Z',
Freight: 211.22,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 10985,
CustomerID: 'HUNGO',
OrderDate: '1998-03-30T00:00:00.000Z',
ShippedDate: '1998-04-02T00:00:00.000Z',
Freight: 91.51,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 10986,
CustomerID: 'OCEAN',
OrderDate: '1998-03-30T00:00:00.000Z',
ShippedDate: '1998-04-21T00:00:00.000Z',
Freight: 217.86,
ShipName: 'Océano Atlántico Ltda.',
ShipAddress: 'Ing. Gustavo Moncada 8585 Piso 20-A',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 10987,
CustomerID: 'EASTC',
OrderDate: '1998-03-31T00:00:00.000Z',
ShippedDate: '1998-04-06T00:00:00.000Z',
Freight: 185.48,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 10988,
CustomerID: 'RATTC',
OrderDate: '1998-03-31T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 61.14,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 10989,
CustomerID: 'QUEDE',
OrderDate: '1998-03-31T00:00:00.000Z',
ShippedDate: '1998-04-02T00:00:00.000Z',
Freight: 34.76,
ShipName: 'Que Delícia',
ShipAddress: 'Rua da Panificadora, 12',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 10990,
CustomerID: 'ERNSH',
OrderDate: '1998-04-01T00:00:00.000Z',
ShippedDate: '1998-04-07T00:00:00.000Z',
Freight: 117.61,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 10991,
CustomerID: 'QUICK',
OrderDate: '1998-04-01T00:00:00.000Z',
ShippedDate: '1998-04-07T00:00:00.000Z',
Freight: 38.51,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10992,
CustomerID: 'THEBI',
OrderDate: '1998-04-01T00:00:00.000Z',
ShippedDate: '1998-04-03T00:00:00.000Z',
Freight: 4.27,
ShipName: 'The Big Cheese',
ShipAddress: '89 Jefferson Way Suite 2',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 10993,
CustomerID: 'FOLKO',
OrderDate: '1998-04-01T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 8.81,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 10994,
CustomerID: 'VAFFE',
OrderDate: '1998-04-02T00:00:00.000Z',
ShippedDate: '1998-04-09T00:00:00.000Z',
Freight: 65.53,
ShipName: 'Vaffeljernet',
ShipAddress: 'Smagsloget 45',
ShipCity: 'Århus',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 10995,
CustomerID: 'PERIC',
OrderDate: '1998-04-02T00:00:00.000Z',
ShippedDate: '1998-04-06T00:00:00.000Z',
Freight: 46,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 10996,
CustomerID: 'QUICK',
OrderDate: '1998-04-02T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 1.12,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 10997,
CustomerID: 'LILAS',
OrderDate: '1998-04-03T00:00:00.000Z',
ShippedDate: '1998-04-13T00:00:00.000Z',
Freight: 73.91,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 10998,
CustomerID: 'WOLZA',
OrderDate: '1998-04-03T00:00:00.000Z',
ShippedDate: '1998-04-17T00:00:00.000Z',
Freight: 20.31,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 10999,
CustomerID: 'OTTIK',
OrderDate: '1998-04-03T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 96.35,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11000,
CustomerID: 'RATTC',
OrderDate: '1998-04-06T00:00:00.000Z',
ShippedDate: '1998-04-14T00:00:00.000Z',
Freight: 55.12,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
{
OrderID: 11001,
CustomerID: 'FOLKO',
OrderDate: '1998-04-06T00:00:00.000Z',
ShippedDate: '1998-04-14T00:00:00.000Z',
Freight: 197.3,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 11002,
CustomerID: 'SAVEA',
OrderDate: '1998-04-06T00:00:00.000Z',
ShippedDate: '1998-04-16T00:00:00.000Z',
Freight: 141.16,
ShipName: 'Save-a-lot Markets',
{
OrderID: 11003,
CustomerID: 'THECR',
OrderDate: '1998-04-06T00:00:00.000Z',
ShippedDate: '1998-04-08T00:00:00.000Z',
Freight: 14.91,
ShipName: 'The Cracker Box',
ShipAddress: '55 Grizzly Peak Rd.',
ShipCity: 'Butte',
ShipRegion: 'MT',
ShipCountry: 'USA',
},
{
OrderID: 11004,
CustomerID: 'MAISD',
OrderDate: '1998-04-07T00:00:00.000Z',
ShippedDate: '1998-04-20T00:00:00.000Z',
Freight: 44.84,
ShipName: 'Maison Dewey',
ShipAddress: 'Rue Joseph-Bens 532',
ShipCity: 'Bruxelles',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 11005,
CustomerID: 'WILMK',
OrderDate: '1998-04-07T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 0.75,
ShipName: 'Wilman Kala',
ShipAddress: 'Keskuskatu 45',
ShipCity: 'Helsinki',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 11006,
CustomerID: 'GREAL',
OrderDate: '1998-04-07T00:00:00.000Z',
ShippedDate: '1998-04-15T00:00:00.000Z',
Freight: 25.19,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 11007,
CustomerID: 'PRINI',
OrderDate: '1998-04-08T00:00:00.000Z',
ShippedDate: '1998-04-13T00:00:00.000Z',
Freight: 202.24,
ShipName: 'Princesa Isabel Vinhos',
ShipAddress: 'Estrada da saúde n. 58',
ShipCity: 'Lisboa',
ShipRegion: null,
ShipCountry: 'Portugal',
},
{
OrderID: 11008,
CustomerID: 'ERNSH',
OrderDate: '1998-04-08T00:00:00.000Z',
ShippedDate: null,
Freight: 79.46,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 11009,
CustomerID: 'GODOS',
OrderDate: '1998-04-08T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 59.11,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 11010,
CustomerID: 'REGGC',
OrderDate: '1998-04-09T00:00:00.000Z',
ShippedDate: '1998-04-21T00:00:00.000Z',
Freight: 28.71,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 11011,
CustomerID: 'ALFKI',
OrderDate: '1998-04-09T00:00:00.000Z',
ShippedDate: '1998-04-13T00:00:00.000Z',
Freight: 1.21,
ShipName: "Alfred' Futterkiste",
ShipAddress: 'Obere Str. 57',
ShipCity: 'Berlin',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11012,
CustomerID: 'FRANK',
OrderDate: '1998-04-09T00:00:00.000Z',
ShippedDate: '1998-04-17T00:00:00.000Z',
Freight: 242.95,
ShipName: 'Frankenversand',
ShipAddress: 'Berliner Platz 43',
ShipCity: 'München',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11013,
CustomerID: 'ROMEY',
OrderDate: '1998-04-09T00:00:00.000Z',
ShippedDate: '1998-04-10T00:00:00.000Z',
Freight: 32.99,
ShipName: 'Romero y tomillo',
ShipAddress: 'Gran Vía, 1',
ShipCity: 'Madrid',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 11014,
CustomerID: 'LINOD',
OrderDate: '1998-04-10T00:00:00.000Z',
ShippedDate: '1998-04-15T00:00:00.000Z',
Freight: 23.6,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 11015,
CustomerID: 'SANTG',
OrderDate: '1998-04-10T00:00:00.000Z',
ShippedDate: '1998-04-20T00:00:00.000Z',
Freight: 4.62,
ShipName: 'Santé Gourmet',
ShipAddress: 'Erling Skakkes gate 78',
ShipCity: 'Stavern',
ShipRegion: null,
ShipCountry: 'Norway',
},
{
OrderID: 11016,
CustomerID: 'AROUT',
OrderDate: '1998-04-10T00:00:00.000Z',
ShippedDate: '1998-04-13T00:00:00.000Z',
Freight: 33.8,
ShipName: 'Around the Horn',
ShipAddress: 'Brook Farm Stratford St. Mary',
ShipCity: 'Colchester',
ShipRegion: 'Essex',
ShipCountry: 'UK',
},
{
OrderID: 11017,
CustomerID: 'ERNSH',
OrderDate: '1998-04-13T00:00:00.000Z',
ShippedDate: '1998-04-20T00:00:00.000Z',
Freight: 754.26,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 11018,
CustomerID: 'LONEP',
OrderDate: '1998-04-13T00:00:00.000Z',
ShippedDate: '1998-04-16T00:00:00.000Z',
Freight: 11.65,
ShipName: 'Lonesome Pine Restaurant',
ShipAddress: '89 Chiaroscuro Rd.',
ShipCity: 'Portland',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 11019,
CustomerID: 'RANCH',
OrderDate: '1998-04-13T00:00:00.000Z',
ShippedDate: null,
Freight: 3.17,
ShipName: 'Rancho grande',
ShipAddress: 'Av. del Libertador 900',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
OrderID: 11020,
CustomerID: 'OTTIK',
OrderDate: '1998-04-14T00:00:00.000Z',
ShippedDate: '1998-04-16T00:00:00.000Z',
Freight: 43.3,
ShipName: 'Ottilies Käseladen',
ShipAddress: 'Mehrheimerstr. 369',
ShipCity: 'Köln',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11021,
CustomerID: 'QUICK',
OrderDate: '1998-04-14T00:00:00.000Z',
ShippedDate: '1998-04-21T00:00:00.000Z',
Freight: 297.18,
ShipName: 'QUICK-Stop',
ShipAddress: 'Taucherstraße 10',
ShipCity: 'Cunewalde',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11022,
CustomerID: 'HANAR',
OrderDate: '1998-04-14T00:00:00.000Z',
ShippedDate: '1998-05-04T00:00:00.000Z',
Freight: 6.27,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 11023,
CustomerID: 'BSBEV',
OrderDate: '1998-04-14T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 123.83,
ShipName: "B' Beverages",
ShipAddress: 'Fauntleroy Circus',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 11024,
CustomerID: 'EASTC',
OrderDate: '1998-04-15T00:00:00.000Z',
ShippedDate: '1998-04-20T00:00:00.000Z',
Freight: 74.36,
{
OrderID: 11025,
CustomerID: 'WARTH',
OrderDate: '1998-04-15T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 29.17,
ShipName: 'Wartian Herkku',
ShipAddress: 'Torikatu 38',
ShipCity: 'Oulu',
ShipRegion: null,
ShipCountry: 'Finland',
},
{
OrderID: 11026,
CustomerID: 'FRANS',
OrderDate: '1998-04-15T00:00:00.000Z',
ShippedDate: '1998-04-28T00:00:00.000Z',
Freight: 47.09,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 11027,
CustomerID: 'BOTTM',
OrderDate: '1998-04-16T00:00:00.000Z',
ShippedDate: '1998-04-20T00:00:00.000Z',
Freight: 52.52,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 11028,
CustomerID: 'KOENE',
OrderDate: '1998-04-16T00:00:00.000Z',
ShippedDate: '1998-04-22T00:00:00.000Z',
Freight: 29.59,
ShipName: 'Königlich Essen',
ShipAddress: 'Maubelstr. 90',
ShipCity: 'Brandenburg',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11029,
CustomerID: 'CHOPS',
OrderDate: '1998-04-16T00:00:00.000Z',
ShippedDate: '1998-04-27T00:00:00.000Z',
Freight: 47.84,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 11030,
CustomerID: 'SAVEA',
OrderDate: '1998-04-17T00:00:00.000Z',
ShippedDate: '1998-04-27T00:00:00.000Z',
Freight: 830.75,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 11031,
CustomerID: 'SAVEA',
OrderDate: '1998-04-17T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 227.22,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 11032,
CustomerID: 'WHITC',
OrderDate: '1998-04-17T00:00:00.000Z',
ShippedDate: '1998-04-23T00:00:00.000Z',
Freight: 606.19,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 11033,
CustomerID: 'RICSU',
OrderDate: '1998-04-17T00:00:00.000Z',
ShippedDate: '1998-04-23T00:00:00.000Z',
Freight: 84.74,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 11034,
CustomerID: 'OLDWO',
OrderDate: '1998-04-20T00:00:00.000Z',
ShippedDate: '1998-04-27T00:00:00.000Z',
Freight: 40.32,
ShipName: 'Old World Delicatessen',
ShipAddress: '2743 Bering St.',
ShipCity: 'Anchorage',
ShipRegion: 'AK',
ShipCountry: 'USA',
},
{
OrderID: 11035,
CustomerID: 'SUPRD',
OrderDate: '1998-04-20T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 0.17,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 11036,
CustomerID: 'DRACD',
OrderDate: '1998-04-20T00:00:00.000Z',
ShippedDate: '1998-04-22T00:00:00.000Z',
Freight: 149.47,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11037,
CustomerID: 'GODOS',
OrderDate: '1998-04-21T00:00:00.000Z',
ShippedDate: '1998-04-27T00:00:00.000Z',
Freight: 3.2,
ShipName: 'Godos Cocina Típica',
ShipAddress: 'C/ Romero, 33',
ShipCity: 'Sevilla',
ShipRegion: null,
ShipCountry: 'Spain',
},
{
OrderID: 11038,
CustomerID: 'SUPRD',
OrderDate: '1998-04-21T00:00:00.000Z',
ShippedDate: '1998-04-30T00:00:00.000Z',
Freight: 29.59,
ShipName: 'Suprêmes délices',
ShipAddress: 'Boulevard Tirou, 255',
ShipCity: 'Charleroi',
ShipRegion: null,
ShipCountry: 'Belgium',
},
{
OrderID: 11039,
CustomerID: 'LINOD',
OrderDate: '1998-04-21T00:00:00.000Z',
ShippedDate: null,
Freight: 65,
ShipName: 'LINO-Delicateses',
ShipAddress: 'Ave. 5 de Mayo Porlamar',
ShipCity: 'I. de Margarita',
ShipRegion: 'Nueva Esparta',
ShipCountry: 'Venezuela',
},
{
OrderID: 11040,
CustomerID: 'GREAL',
OrderDate: '1998-04-22T00:00:00.000Z',
ShippedDate: null,
Freight: 18.84,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 11041,
CustomerID: 'CHOPS',
OrderDate: '1998-04-22T00:00:00.000Z',
ShippedDate: '1998-04-28T00:00:00.000Z',
Freight: 48.22,
ShipName: 'Chop-suey Chinese',
ShipAddress: 'Hauptstr. 31',
ShipCity: 'Bern',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 11042,
CustomerID: 'COMMI',
OrderDate: '1998-04-22T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 29.99,
ShipName: 'Comércio Mineiro',
ShipAddress: 'Av. dos Lusíadas, 23',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 11043,
CustomerID: 'SPECD',
OrderDate: '1998-04-22T00:00:00.000Z',
ShippedDate: '1998-04-29T00:00:00.000Z',
Freight: 8.8,
ShipName: 'Spécialités du monde',
ShipAddress: '25, rue Lauriston',
ShipCity: 'Paris',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 11044,
CustomerID: 'WOLZA',
OrderDate: '1998-04-23T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 8.72,
ShipName: 'Wolski Zajazd',
ShipAddress: 'ul. Filtrowa 68',
ShipCity: 'Warszawa',
ShipRegion: null,
ShipCountry: 'Poland',
},
{
OrderID: 11045,
CustomerID: 'BOTTM',
OrderDate: '1998-04-23T00:00:00.000Z',
ShippedDate: null,
Freight: 70.58,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 11046,
CustomerID: 'WANDK',
OrderDate: '1998-04-23T00:00:00.000Z',
ShippedDate: '1998-04-24T00:00:00.000Z',
Freight: 71.64,
ShipName: 'Die Wandernde Kuh',
ShipAddress: 'Adenauerallee 900',
ShipCity: 'Stuttgart',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11047,
CustomerID: 'EASTC',
OrderDate: '1998-04-24T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 46.62,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 11048,
CustomerID: 'BOTTM',
OrderDate: '1998-04-24T00:00:00.000Z',
ShippedDate: '1998-04-30T00:00:00.000Z',
Freight: 24.12,
ShipName: 'Bottom-Dollar Markets',
ShipAddress: '23 Tsawassen Blvd.',
ShipCity: 'Tsawassen',
ShipRegion: 'BC',
ShipCountry: 'Canada',
},
{
OrderID: 11049,
CustomerID: 'GOURL',
OrderDate: '1998-04-24T00:00:00.000Z',
ShippedDate: '1998-05-04T00:00:00.000Z',
Freight: 8.34,
ShipName: 'Gourmet Lanchonetes',
ShipAddress: 'Av. Brasil, 442',
ShipCity: 'Campinas',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 11050,
CustomerID: 'FOLKO',
OrderDate: '1998-04-27T00:00:00.000Z',
ShippedDate: '1998-05-05T00:00:00.000Z',
Freight: 59.41,
ShipName: 'Folk och fä HB',
ShipAddress: 'Åkergatan 24',
ShipCity: 'Bräcke',
ShipRegion: null,
ShipCountry: 'Sweden',
},
{
OrderID: 11051,
CustomerID: 'LAMAI',
OrderDate: '1998-04-27T00:00:00.000Z',
ShippedDate: null,
Freight: 2.79,
ShipName: "La maison d'Asie",
ShipAddress: '1 rue Alsace-Lorraine',
ShipCity: 'Toulouse',
ShipRegion: null,
ShipCountry: 'France',
},
{
OrderID: 11052,
CustomerID: 'HANAR',
OrderDate: '1998-04-27T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 67.26,
ShipName: 'Hanari Carnes',
ShipAddress: 'Rua do Paço, 67',
ShipCity: 'Rio de Janeiro',
ShipRegion: 'RJ',
ShipCountry: 'Brazil',
},
{
OrderID: 11053,
CustomerID: 'PICCO',
OrderDate: '1998-04-27T00:00:00.000Z',
ShippedDate: '1998-04-29T00:00:00.000Z',
Freight: 53.05,
ShipName: 'Piccolo und mehr',
ShipAddress: 'Geislweg 14',
ShipCity: 'Salzburg',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 11054,
CustomerID: 'CACTU',
OrderDate: '1998-04-28T00:00:00.000Z',
ShippedDate: null,
Freight: 0.33,
ShipName: 'Cactus Comidas para llevar',
ShipAddress: 'Cerrito 333',
ShipCity: 'Buenos Aires',
ShipRegion: null,
ShipCountry: 'Argentina',
},
{
OrderID: 11055,
CustomerID: 'HILAA',
OrderDate: '1998-04-28T00:00:00.000Z',
ShippedDate: '1998-05-05T00:00:00.000Z',
Freight: 120.92,
ShipName: 'HILARION-Abastos',
ShipAddress: 'Carrera 22 con Ave. Carlos Soublette #8-35',
ShipCity: 'San Cristóbal',
ShipRegion: 'Táchira',
ShipCountry: 'Venezuela',
},
{
OrderID: 11056,
CustomerID: 'EASTC',
OrderDate: '1998-04-28T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 278.96,
ShipName: 'Eastern Connection',
ShipAddress: '35 King George',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 11057,
CustomerID: 'NORTS',
OrderDate: '1998-04-29T00:00:00.000Z',
ShippedDate: '1998-05-01T00:00:00.000Z',
Freight: 4.13,
ShipName: 'North/South',
ShipAddress: 'South House 300 Queensbridge',
ShipCity: 'London',
ShipRegion: null,
ShipCountry: 'UK',
},
{
OrderID: 11058,
CustomerID: 'BLAUS',
OrderDate: '1998-04-29T00:00:00.000Z',
ShippedDate: null,
Freight: 31.14,
ShipName: 'Blauer See Delikatessen',
ShipAddress: 'Forsterstr. 57',
ShipCity: 'Mannheim',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11059,
CustomerID: 'RICAR',
OrderDate: '1998-04-29T00:00:00.000Z',
ShippedDate: null,
Freight: 85.8,
ShipName: 'Ricardo Adocicados',
{
OrderID: 11060,
CustomerID: 'FRANS',
OrderDate: '1998-04-30T00:00:00.000Z',
ShippedDate: '1998-05-04T00:00:00.000Z',
Freight: 10.98,
ShipName: 'Franchi S.p.A.',
ShipAddress: 'Via Monte Bianco 34',
ShipCity: 'Torino',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 11061,
CustomerID: 'GREAL',
OrderDate: '1998-04-30T00:00:00.000Z',
ShippedDate: null,
Freight: 14.01,
ShipName: 'Great Lakes Food Market',
ShipAddress: '2732 Baker Blvd.',
ShipCity: 'Eugene',
ShipRegion: 'OR',
ShipCountry: 'USA',
},
{
OrderID: 11062,
CustomerID: 'REGGC',
OrderDate: '1998-04-30T00:00:00.000Z',
ShippedDate: null,
Freight: 29.93,
ShipName: 'Reggiani Caseifici',
ShipAddress: 'Strada Provinciale 124',
ShipCity: 'Reggio Emilia',
ShipRegion: null,
ShipCountry: 'Italy',
},
{
OrderID: 11063,
CustomerID: 'HUNGO',
OrderDate: '1998-04-30T00:00:00.000Z',
ShippedDate: '1998-05-06T00:00:00.000Z',
Freight: 81.73,
ShipName: 'Hungry Owl All-Night Grocers',
ShipAddress: '8 Johnstown Road',
ShipCity: 'Cork',
ShipRegion: 'Co. Cork',
ShipCountry: 'Ireland',
},
{
OrderID: 11064,
CustomerID: 'SAVEA',
OrderDate: '1998-05-01T00:00:00.000Z',
ShippedDate: '1998-05-04T00:00:00.000Z',
Freight: 30.09,
ShipName: 'Save-a-lot Markets',
ShipAddress: '187 Suffolk Ln.',
ShipCity: 'Boise',
ShipRegion: 'ID',
ShipCountry: 'USA',
},
{
OrderID: 11065,
CustomerID: 'LILAS',
OrderDate: '1998-05-01T00:00:00.000Z',
ShippedDate: null,
Freight: 12.91,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 11066,
CustomerID: 'WHITC',
OrderDate: '1998-05-01T00:00:00.000Z',
ShippedDate: '1998-05-04T00:00:00.000Z',
Freight: 44.72,
ShipName: 'White Clover Markets',
ShipAddress: '1029 - 12th Ave. S.',
ShipCity: 'Seattle',
ShipRegion: 'WA',
ShipCountry: 'USA',
},
{
OrderID: 11067,
CustomerID: 'DRACD',
OrderDate: '1998-05-04T00:00:00.000Z',
ShippedDate: '1998-05-06T00:00:00.000Z',
Freight: 7.98,
ShipName: 'Drachenblut Delikatessen',
ShipAddress: 'Walserweg 21',
ShipCity: 'Aachen',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11068,
CustomerID: 'QUEEN',
OrderDate: '1998-05-04T00:00:00.000Z',
ShippedDate: null,
Freight: 81.75,
ShipName: 'Queen Cozinha',
ShipAddress: 'Alameda dos Canàrios, 891',
ShipCity: 'Sao Paulo',
ShipRegion: 'SP',
ShipCountry: 'Brazil',
},
{
OrderID: 11069,
CustomerID: 'TORTU',
OrderDate: '1998-05-04T00:00:00.000Z',
ShippedDate: '1998-05-06T00:00:00.000Z',
Freight: 15.67,
ShipName: 'Tortuga Restaurante',
ShipAddress: 'Avda. Azteca 123',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 11070,
CustomerID: 'LEHMS',
OrderDate: '1998-05-05T00:00:00.000Z',
ShippedDate: null,
Freight: 136,
ShipName: 'Lehmanns Marktstand',
ShipAddress: 'Magazinweg 7',
ShipCity: 'Frankfurt a.M.',
ShipRegion: null,
ShipCountry: 'Germany',
},
{
OrderID: 11071,
CustomerID: 'LILAS',
OrderDate: '1998-05-05T00:00:00.000Z',
ShippedDate: null,
Freight: 0.93,
ShipName: 'LILA-Supermercado',
ShipAddress: 'Carrera 52 con Ave. Bolívar #65-98 Llano Largo',
ShipCity: 'Barquisimeto',
ShipRegion: 'Lara',
ShipCountry: 'Venezuela',
},
{
OrderID: 11072,
CustomerID: 'ERNSH',
OrderDate: '1998-05-05T00:00:00.000Z',
ShippedDate: null,
Freight: 258.64,
ShipName: 'Ernst Handel',
ShipAddress: 'Kirchgasse 6',
ShipCity: 'Graz',
ShipRegion: null,
ShipCountry: 'Austria',
},
{
OrderID: 11073,
CustomerID: 'PERIC',
OrderDate: '1998-05-05T00:00:00.000Z',
ShippedDate: null,
Freight: 24.95,
ShipName: 'Pericles Comidas clásicas',
ShipAddress: 'Calle Dr. Jorge Cash 321',
ShipCity: 'México D.F.',
ShipRegion: null,
ShipCountry: 'Mexico',
},
{
OrderID: 11074,
CustomerID: 'SIMOB',
OrderDate: '1998-05-06T00:00:00.000Z',
ShippedDate: null,
Freight: 18.44,
ShipName: 'Simons bistro',
ShipAddress: 'Vinbæltet 34',
ShipCity: 'Kobenhavn',
ShipRegion: null,
ShipCountry: 'Denmark',
},
{
OrderID: 11075,
CustomerID: 'RICSU',
OrderDate: '1998-05-06T00:00:00.000Z',
ShippedDate: null,
Freight: 6.19,
ShipName: 'Richter Supermarkt',
ShipAddress: 'Starenweg 5',
ShipCity: 'Genève',
ShipRegion: null,
ShipCountry: 'Switzerland',
},
{
OrderID: 11076,
CustomerID: 'BONAP',
OrderDate: '1998-05-06T00:00:00.000Z',
ShippedDate: null,
Freight: 38.28,
ShipName: 'Bon app',
ShipAddress: '12, rue des Bouchers',
ShipCity: 'Marseille',
ShipRegion: null,
ShipCountry: 'France',
},
OrderID: 11077,
CustomerID: 'RATTC',
OrderDate: '1998-05-06T00:00:00.000Z',
ShippedDate: null,
Freight: 8.53,
ShipName: 'Rattlesnake Canyon Grocery',
ShipAddress: '2817 Milton Dr.',
ShipCity: 'Albuquerque',
ShipRegion: 'NM',
ShipCountry: 'USA',
},
]);
{
CustomerID: 'ANATR',
ContactName: 'Ana Trujillo',
CompanyName: 'Ana Trujillo Emparedados y helados',
Address: 'Avda. de la Constitución 2222',
Country: 'Mexico',
},
{
CustomerID: 'ANTON',
ContactName: 'Antonio Moreno',
CompanyName: 'Antonio Moreno Taquería',
Address: 'Mataderos 2312',
Country: 'Mexico',
},
{
CustomerID: 'AROUT',
ContactName: 'Thomas Hardy',
CompanyName: 'Around the Horn',
Address: '120 Hanover Sq.',
Country: 'UK',
},
{
CustomerID: 'BERGS',
ContactName: 'Christina Berglund',
CompanyName: 'Berglunds snabbköp',
Address: 'Berguvsvägen 8',
Country: 'Sweden',
},
{
CustomerID: 'BLAUS',