React Tree Grid Row Adding
IgrTreeGrid
는 인라인 행 추가를 통해 데이터 조작을 수행하는 편리한 방법과 React CRUD 작업을 위한 강력한 API를 제공합니다. 그리드 템플릿에서 편집 작업이 활성화된 IgrActionStrip
구성 요소를 추가하고 행을 마우스오버하고 제공된 버튼을 사용하고 ALT + +를 눌러 행 추가 UI를 생성하거나 ALT + SHIFT + +를 눌러 선택한 행에 대한 자식을 추가하는 UI를 생성합니다.
React Tree Grid Row 추가 예제
export class EmployeesNestedTreeDataItem {
public constructor (init: Partial<EmployeesNestedTreeDataItem> ) {
Object .assign(this , init);
}
public Age: number ;
public HireDate: string ;
public ID: number ;
public Name: string ;
public Phone: string ;
public OnPTO: boolean ;
public ParentID: number ;
public Title: string ;
}
export class EmployeesNestedTreeData extends Array <EmployeesNestedTreeDataItem > {
public constructor (items: Array <EmployeesNestedTreeDataItem> | number = -1 ) {
if (Array .isArray(items)) {
super (...items);
} else {
const newItems = [
new EmployeesNestedTreeDataItem(
{
Age : 55 ,
HireDate : `2008-03-20` ,
ID : 1 ,
Name : `Johnathan Winchester` ,
Phone : `0251-031259` ,
OnPTO : false ,
ParentID : -1 ,
Title : `Development Manager`
}),
new EmployeesNestedTreeDataItem(
{
Age : 42 ,
HireDate : `2014-01-22` ,
ID : 4 ,
Name : `Ana Sanders` ,
Phone : `(21) 555-0091` ,
OnPTO : true ,
ParentID : -1 ,
Title : `CEO`
}),
new EmployeesNestedTreeDataItem(
{
Age : 49 ,
HireDate : `2014-01-22` ,
ID : 18 ,
Name : `Victoria Lincoln` ,
Phone : `(071) 23 67 22 20` ,
OnPTO : true ,
ParentID : -1 ,
Title : `Accounting Manager`
}),
new EmployeesNestedTreeDataItem(
{
Age : 61 ,
HireDate : `2010-01-01` ,
ID : 10 ,
Name : `Yang Wang` ,
Phone : `(21) 555-0091` ,
OnPTO : false ,
ParentID : -1 ,
Title : `Localization Manager`
}),
new EmployeesNestedTreeDataItem(
{
Age : 43 ,
HireDate : `2011-06-03` ,
ID : 3 ,
Name : `Michael Burke` ,
Phone : `0452-076545` ,
OnPTO : true ,
ParentID : 1 ,
Title : `Senior Software Developer`
}),
new EmployeesNestedTreeDataItem(
{
Age : 29 ,
HireDate : `2009-06-19` ,
ID : 2 ,
Name : `Thomas Anderson` ,
Phone : `(14) 555-8122` ,
OnPTO : false ,
ParentID : 1 ,
Title : `Senior Software Developer`
}),
new EmployeesNestedTreeDataItem(
{
Age : 31 ,
HireDate : `2014-08-18` ,
ID : 11 ,
Name : `Monica Reyes` ,
Phone : `7675-3425` ,
OnPTO : false ,
ParentID : 1 ,
Title : `Software Development Team Lead`
}),
new EmployeesNestedTreeDataItem(
{
Age : 35 ,
HireDate : `2015-09-17` ,
ID : 6 ,
Name : `Roland Mendel` ,
Phone : `(505) 555-5939` ,
OnPTO : false ,
ParentID : 11 ,
Title : `Senior Software Developer`
}),
new EmployeesNestedTreeDataItem(
{
Age : 44 ,
HireDate : `2009-10-11` ,
ID : 12 ,
Name : `Sven Cooper` ,
Phone : `0695-34 67 21` ,
OnPTO : true ,
ParentID : 11 ,
Title : `Senior Software Developer`
}),
new EmployeesNestedTreeDataItem(
{
Age : 44 ,
HireDate : `2014-04-04` ,
ID : 14 ,
Name : `Laurence Johnson` ,
Phone : `981-443655` ,
OnPTO : false ,
ParentID : 4 ,
Title : `Director`
}),
new EmployeesNestedTreeDataItem(
{
Age : 25 ,
HireDate : `2017-11-09` ,
ID : 5 ,
Name : `Elizabeth Richards` ,
Phone : `(2) 283-2951` ,
OnPTO : true ,
ParentID : 4 ,
Title : `Vice President`
}),
new EmployeesNestedTreeDataItem(
{
Age : 39 ,
HireDate : `2010-03-22` ,
ID : 13 ,
Name : `Trevor Ashworth` ,
Phone : `981-443655` ,
OnPTO : true ,
ParentID : 5 ,
Title : `Director`
}),
new EmployeesNestedTreeDataItem(
{
Age : 44 ,
HireDate : `2014-04-04` ,
ID : 17 ,
Name : `Antonio Moreno` ,
Phone : `(505) 555-5939` ,
OnPTO : false ,
ParentID : 18 ,
Title : `Senior Accountant`
}),
new EmployeesNestedTreeDataItem(
{
Age : 50 ,
HireDate : `2007-11-18` ,
ID : 7 ,
Name : `Pedro Rodriguez` ,
Phone : `035-640230` ,
OnPTO : false ,
ParentID : 10 ,
Title : `Senior Localization Developer`
}),
new EmployeesNestedTreeDataItem(
{
Age : 27 ,
HireDate : `2016-02-19` ,
ID : 8 ,
Name : `Casey Harper` ,
Phone : `0342-023176` ,
OnPTO : true ,
ParentID : 10 ,
Title : `Senior Localization`
}),
new EmployeesNestedTreeDataItem(
{
Age : 25 ,
HireDate : `2017-11-09` ,
ID : 15 ,
Name : `Patricia Simpson` ,
Phone : `069-0245984` ,
OnPTO : false ,
ParentID : 7 ,
Title : `Localization Intern`
}),
new EmployeesNestedTreeDataItem(
{
Age : 39 ,
HireDate : `2010-03-22` ,
ID : 9 ,
Name : `Francisco Chang` ,
Phone : `(91) 745 6200` ,
OnPTO : false ,
ParentID : 7 ,
Title : `Localization Intern`
}),
new EmployeesNestedTreeDataItem(
{
Age : 25 ,
HireDate : `2018-03-18` ,
ID : 16 ,
Name : `Peter Lewis` ,
Phone : `069-0245984` ,
OnPTO : true ,
ParentID : 7 ,
Title : `Localization Intern`
}),
];
super (...newItems.slice(0 ));
}
}
}
ts コピー import React from 'react' ;
import ReactDOM from 'react-dom/client' ;
import './index.css' ;
import { IgrTreeGridModule, IgrActionStripModule } from "@infragistics/igniteui-react-grids" ;
import { IgrTreeGrid, IgrActionStrip, IgrGridEditingActions, IgrColumn } from "@infragistics/igniteui-react-grids" ;
import { ComponentRenderer, WebTreeGridDescriptionModule, WebActionStripDescriptionModule } from "@infragistics/igniteui-react-core" ;
import { EmployeesNestedTreeDataItem, EmployeesNestedTreeData } from './EmployeesNestedTreeData' ;
import "@infragistics/igniteui-react-grids/grids/themes/light/bootstrap.css" ;
const mods : any [] = [
IgrTreeGridModule,
IgrActionStripModule
];
mods.forEach((m) => m.register());
export default class Sample extends React.Component <any, any> {
private treeGrid: IgrTreeGrid
private treeGridRef(r: IgrTreeGrid) {
this .treeGrid = r;
this .setState({});
}
constructor (props: any ) {
super (props);
this .treeGridRef = this .treeGridRef.bind(this );
}
public render (): JSX .Element {
return (
<div className ="container sample ig-typography" >
<div className ="container fill" >
<IgrTreeGrid
autoGenerate ={false}
ref ={this.treeGridRef}
id ="treeGrid"
data ={this.employeesNestedTreeData}
primaryKey ="ID"
foreignKey ="ParentID"
rowEditable ={true} >
<IgrActionStrip
>
<IgrGridEditingActions
addRow ={true}
addChild ={true} >
</IgrGridEditingActions >
</IgrActionStrip >
<IgrColumn
field ="Name"
header ="Full Name"
dataType ="string"
resizable ={true}
sortable ={true}
filterable ={true}
editable ={true} >
</IgrColumn >
<IgrColumn
field ="Age"
dataType ="number"
resizable ={false}
sortable ={false}
filterable ={false}
editable ={true} >
</IgrColumn >
<IgrColumn
field ="Title"
dataType ="string"
resizable ={true}
sortable ={true}
filterable ={true}
editable ={true} >
</IgrColumn >
<IgrColumn
field ="HireDate"
header ="Hire Date"
dataType ="date"
resizable ={true}
sortable ={true}
filterable ={true}
editable ={true} >
</IgrColumn >
</IgrTreeGrid >
</div >
</div >
);
}
private _employeesNestedTreeData: EmployeesNestedTreeData = null ;
public get employeesNestedTreeData(): EmployeesNestedTreeData {
if (this ._employeesNestedTreeData == null )
{
this ._employeesNestedTreeData = new EmployeesNestedTreeData();
}
return this ._employeesNestedTreeData;
}
private _componentRenderer: ComponentRenderer = null ;
public get renderer(): ComponentRenderer {
if (this ._componentRenderer == null ) {
this ._componentRenderer = new ComponentRenderer();
var context = this ._componentRenderer.context;
WebTreeGridDescriptionModule.register(context);
WebActionStripDescriptionModule.register(context);
}
return this ._componentRenderer;
}
}
const root = ReactDOM.createRoot (document.getElementById('root' ));
root.render (<Sample /> );
tsx コピー
이 샘플이 마음에 드시나요? Ignite UI for React 전체에 액세스하고 몇 분 만에 나만의 앱을 빌드하기 시작하세요. 무료로 다운로드하세요.
행 추가 사용법
그런 다음 바인딩된 데이터 소스를 정의하고 rowEditable
IgrActionStrip
true로 설정하고 편집 작업이 활성화된 구성 요소를 정의합니다 IgrTreeGrid
. 입력은 addRow
행을 추가하는 UI를 생성하는 버튼의 가시성을 제어합니다.
<IgrTreeGrid autoGenerate ={false} primaryKey ="ID" foreignKey ="ParentID" rowEditable ={true} >
<IgrColumn field ="Name" header ="Name" dataType ="string" > </IgrColumn >
<IgrColumn field ="Title" header ="Title" dataType ="string" > </IgrColumn >
<IgrColumn field ="HireDate" header ="Hire Date" dataType ="date" > </IgrColumn >
<IgrColumn field ="OnPTO" header ="On PTO" dataType ="boolean" > </IgrColumn >
<IgrActionStrip >
<IgrGridEditingActions addRow ={true} > </IgrGridEditingActions >
</IgrActionStrip >
</IgrTreeGrid >
tsx
참고 : 행 추가 작업에는 기본 키 설정이 필수입니다.
참고 : 기본 키를 제외한 모든 열은 기본적으로 UI를 추가하는 행에서 편집 가능합니다. 특정 열에 대한 편집을 비활성화하려면 editable
열의 입력을 false
로 설정해야 합니다.
참고 : add row 및 add child 버튼의 가시성을 제어하는 입력은 IgrGridEditingActions
액션 스트립 컨텍스트(버튼이 표시되는 레코드를 미세 조정하는 유형 IgrRowType
)를 사용할 수 있습니다.
내부 BaseTransactionService
는 자동으로 제공됩니다 IgrTreeGrid
. 행 상태가 제출되거나 취소될 때까지 보류 중인 셀 변경 내용을 보유합니다.
프로그래밍 방식으로 행 추가 시작
IgrTreeGrid
두 개의 서로 다른 공용 메서드를 사용하여 Add Row UI를 프로그래밍 방식으로 생성할 수 있습니다. 하나는 UI가 생성되어야 하는 행을 지정하기 위해 행 ID를 허용하는 것이고 다른 하나는 인덱스로 작동하는 것입니다. 이러한 메서드를 사용하여 현재 데이터 뷰 내의 아무 곳에나 UI를 생성할 수 있습니다. 페이지를 변경하거나 필터링된 행을 지정하는 것은 지원되지 않습니다.
를 사용하려면 beginAddRowById
its(PK)로 작업의 컨텍스트로 사용할 행을 지정해야 합니다 RowID
. 그런 다음 메서드는 최종 사용자가 지정된 행에 대한 행 추가 작업 스트립 단추를 클릭한 것처럼 작동하여 그 아래에 UI를 생성합니다. 두 번째 매개 변수는 행이 컨텍스트 행에 자식으로 추가되는지 아니면 형제로 추가되는지를 제어합니다. 첫 번째 매개 변수를 전달 null
하여 UI가 그리드의 첫 번째 행으로 생성되도록 할 수도 있습니다.
this .treeGrid.beginAddRowById('ALFKI' , true );
this .treeGrid.beginAddRowById(null );
typescript
이 메서드는 beginAddRowByIndex
비슷하게 작동하지만 컨텍스트로 사용할 행은 index에 의해 지정됩니다.
this .treeGrid.beginAddRowByIndex(10 , true );
this .treeGrid.beginAddRowByIndex(null );
typescript
포지셔닝
행 추가 UI의 기본 위치는 최종 사용자가 행 추가 버튼을 클릭한 행 아래에 있습니다.
스크롤하면 IgrTreeGrid
행 추가 UI가 자동으로 완전히 표시됩니다.
행 추가 UI의 오버레이는 스크롤 중에 위치를 유지합니다.
행동
행 추가 UI는 최종 사용자에게 일관된 편집 환경을 제공하도록 설계되었으므로 행 편집 UI와 동작이 동일합니다. 자세한 내용은 트리 그리드 행 편집 항목을 참조하세요.
행 추가 UI를 통해 새 행이 추가된 후 해당 위치 및/또는 가시성은 의 정렬, 필터링 및 그룹화 상태에 IgrTreeGrid
따라 결정됩니다. 이러한 상태가 적용되지 않은 경우 IgrTreeGrid
마지막 레코드로 표시됩니다. 스낵바가 간략하게 표시되며, 최종 사용자가 보이지 않는 경우 해당 위치로 스크롤 IgrTreeGrid
하는 데 사용할 수 있는 버튼이 포함되어 있습니다.
키보드 탐색
ALT + + - 행 추가를 위한 편집 모드로 들어갑니다.
ALT + SHIFT + + - Enters edit mode for adding a child
ESC는 변경 사항을 제출하지 않고 행 추가 모드를 종료합니다.
Tab 키를 누르면 행의 편집 가능한 한 셀에서 다음 셀로, 가장 오른쪽의 편집 가능한 셀에서 CANCEL 및 DONE 버튼으로 초점을 이동합니다. 완료 버튼을 통한 탐색은 현재 편집된 행 내에서 편집 가능한 가장 왼쪽 셀로 이동합니다.
기능 통합
의 데이터 뷰 IgrTreeGrid
가 수정되면 모든 행 추가 작업이 중지됩니다. 최종 사용자가 변경한 모든 내용이 제출됩니다. 데이터 보기를 변경하는 작업에는 정렬, 그룹화, 필터링, 페이징 등이 포함되지만 이에 국한되지는 않습니다.
행 추가 작업이 완료된 후 요약이 업데이트됩니다. 정렬, 필터링 등과 같은 다른 데이터 보기 종속 기능에도 동일하게 적용됩니다.
행 추가 오버레이 사용자 정의
텍스트 사용자 정의
RowAddTextDirective
를 사용하여 오버레이를 추가하는 행의 텍스트를 사용자 정의할 수 있습니다.
gridRef.current.rowAddTextTemplate = (ctx: IgrGridEmptyTemplateContext) => {
return (
<>
<span > Adding Row</span >
</>
);
}
tsx
스타일링
행 추가 UI는 IgrActionStrip
편집 작업의 버튼, 편집 편집기 및 오버레이, 최종 사용자가 새로 추가된 행으로 스크롤할 수 있는 스낵바로 구성됩니다. 이러한 구성 요소의 스타일을 지정하려면 해당 항목의 포괄적인 가이드를 참조할 수 있습니다.
API 참조
추가 리소스
우리 커뮤니티는 활동적이며 항상 새로운 아이디어를 환영합니다.