Ignite UI for Web Components의 Web Components 계층적 그리드 열 이동 기능을 사용하면 빠르고 쉽게 열을 재정렬할 수 있습니다. 이는 열 이동 API를 통해 수행하거나 마우스나 터치 제스처를 통해 헤더를 다른 위치로 끌어서 놓아서 수행할 수 있습니다. Web Components 계층적 그리드에서 고정 및 고정 해제된 열과 다중 열 헤더에 대한 열 이동을 활성화할 수 있습니다.
열과 열 그룹 간의 재정렬은 계층 구조에서 동일한 수준에 있고 둘 다 동일한 그룹에 있는 경우에만 허용됩니다. 최상위 열인 경우 열/열 그룹 간 이동이 허용됩니다.
열 머리글이 템플릿화되어 있고 열 이동이 활성화되어 있거나 해당 열이 그룹화 가능한 경우 템플릿 요소는 draggable 속성을 false로 설정해야 합니다!
고정된 영역이 최대 허용 너비(총 IgcHierarchicalGridComponent 너비의 80%)를 초과하는 경우 시각적 단서는 최종 사용자에게 놓기 작업이 금지되고 고정이 불가능하다는 것을 알립니다. 즉, 고정된 영역에 열을 놓을 수 없습니다.
import'igniteui-webcomponents-grids/grids/combined';
import { IgcHierarchicalGridComponent, IgcPaginatorComponent, IgcColumnComponent } from'igniteui-webcomponents-grids/grids';
import HierarchicalCustomers from'./HierarchicalCustomers.json';
import { IgcColumnTemplateContext } from'igniteui-webcomponents-grids/grids';
import { html, nothing } from'lit-html';
import"igniteui-webcomponents-grids/grids/themes/light/bootstrap.css";
import"./index.css";
exportclassSample{
private hierarchicalGrid1: IgcHierarchicalGridComponent
private paginator: IgcPaginatorComponent
private column1: IgcColumnComponent
private column2: IgcColumnComponent
private column3: IgcColumnComponent
private column4: IgcColumnComponent
private column5: IgcColumnComponent
private column6: IgcColumnComponent
private column7: IgcColumnComponent
private column8: IgcColumnComponent
private column9: IgcColumnComponent
private column10: IgcColumnComponent
private _bind: () =>void;
constructor() {
var hierarchicalGrid1 = this.hierarchicalGrid1 = document.getElementById('hierarchicalGrid1') as IgcHierarchicalGridComponent;
var paginator = this.paginator = document.getElementById('paginator') as IgcPaginatorComponent;
var column1 = this.column1 = document.getElementById('column1') as IgcColumnComponent;
var column2 = this.column2 = document.getElementById('column2') as IgcColumnComponent;
var column3 = this.column3 = document.getElementById('column3') as IgcColumnComponent;
var column4 = this.column4 = document.getElementById('column4') as IgcColumnComponent;
var column5 = this.column5 = document.getElementById('column5') as IgcColumnComponent;
var column6 = this.column6 = document.getElementById('column6') as IgcColumnComponent;
var column7 = this.column7 = document.getElementById('column7') as IgcColumnComponent;
var column8 = this.column8 = document.getElementById('column8') as IgcColumnComponent;
var column9 = this.column9 = document.getElementById('column9') as IgcColumnComponent;
var column10 = this.column10 = document.getElementById('column10') as IgcColumnComponent;
this._bind = () => {
hierarchicalGrid1.data = this.hierarchicalCustomers;
column1.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column2.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column3.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column4.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column5.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column6.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column7.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column8.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column9.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column10.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
}
this._bind();
}
private _hierarchicalCustomers: any[] = HierarchicalCustomers;
publicgethierarchicalCustomers(): any[] {
returnthis._hierarchicalCustomers;
}
public hierarchicalGridPinHeaderTemplate = (ctx: IgcColumnTemplateContext) => {
const column = (ctx asany).column;
return html`<div><spanstyle="float:left">${column.field}</span><spanstyle="float:right" @pointerdown=${(e: any) => this.toggleColumnPin(column)}>📌</span></div>`;
};
publictoggleColumnPin(field: IgcColumnComponent) {
if(field) {
field.pinned = !field.pinned;
}
}
}
new Sample();
ts
<!DOCTYPE html><html><head><title>Sample | Ignite UI | Web Components | infragistics</title><metacharset="UTF-8" /><linkrel="shortcut icon"href="https://static.infragistics.com/xplatform/images/browsers/wc.png" ><linkrel="stylesheet"href="https://fonts.googleapis.com/icon?family=Material+Icons" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Titillium Web" /><linkrel="stylesheet"href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" /><linkrel="stylesheet"href="/src/index.css"type="text/css" /></head><body><divid="root"><divclass="container sample ig-typography"><divclass="container fill"><igc-hierarchical-gridauto-generate="false"moving="true"name="hierarchicalGrid1"id="hierarchicalGrid1"><igc-paginatorname="paginator"id="paginator"per-page="15"></igc-paginator><igc-columnfield="CustomerID"data-type="string"name="column1"id="column1"></igc-column><igc-columnfield="Company"data-type="string"width="150px"name="column2"id="column2"></igc-column><igc-columnfield="ContactName"data-type="string"width="150px"name="column3"id="column3"></igc-column><igc-columnfield="ContactTitle"data-type="string"width="150px"name="column4"id="column4"></igc-column><igc-columnfield="Address"data-type="string"name="column5"id="column5"></igc-column><igc-columnfield="City"data-type="string"name="column6"id="column6"></igc-column><igc-columnfield="PostalCode"data-type="string"name="column7"id="column7"></igc-column><igc-columnfield="Country"data-type="string"name="column8"id="column8"></igc-column><igc-columnfield="Phone"data-type="string"name="column9"id="column9"></igc-column><igc-columnfield="Fax"data-type="string"name="column10"id="column10"></igc-column><igc-row-islandchild-data-key="Orders"auto-generate="false"moving="true"><igc-columnfield="OrderID"data-type="number"></igc-column><igc-columnfield="EmployeeID"data-type="number"></igc-column><igc-columnfield="OrderDate"data-type="date"></igc-column><igc-columnfield="RequiredDate"data-type="date"></igc-column><igc-columnfield="ShippedDate"data-type="date"></igc-column><igc-columnfield="ShipVia"data-type="number"></igc-column><igc-columnfield="Freight"data-type="number"></igc-column><igc-columnfield="ShipName"data-type="string"></igc-column><igc-columnfield="ShipAddress"data-type="string"></igc-column><igc-columnfield="ShipCity"data-type="string"></igc-column><igc-columnfield="ShipPostalCode"data-type="string"></igc-column><igc-columnfield="ShipCountry"data-type="string"></igc-column><igc-row-islandchild-data-key="OrderDetails"auto-generate="false"moving="true"><igc-columnfield="ProductID"data-type="number"></igc-column><igc-columnfield="UnitPrice"data-type="number"></igc-column><igc-columnfield="Quantity"data-type="number"></igc-column><igc-columnfield="Discount"data-type="number"></igc-column></igc-row-island></igc-row-island></igc-hierarchical-grid></div></div></div><!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><scriptsrc="src/index.ts"></script><% } %>
</body></html>html
/* shared styles are loaded from: *//* https://static.infragistics.com/xplatform/css/samples */css
이 샘플이 마음에 드시나요? 당사의 완전한 Ignite UI for Web Components 툴킷에 액세스하여 몇 분 만에 나만의 앱을 빌드하기 시작하세요. 무료로 다운로드하세요.
끌어서 놓기 기능 외에도 열 이동 기능은 프로그래밍 방식으로 열 이동/열 재정렬을 허용하는 API 메서드도 제공합니다.
moveColumn- 다른 열(대상) 앞이나 뒤로 열을 이동합니다. 첫 번째 매개변수는 이동할 컬럼이고, 두 번째 매개변수는 대상 컬럼입니다. 또한 대상 열 앞이나 뒤에 열을 배치할지 여부를 결정하는 선택적인 세 번째 매개 변수 Position (DropPosition 값을 나타냄)을 허용합니다.
// Move the ID column after the Name columnconst idColumn = grid.getColumnByName("ID");
const nameColumn = grid.getColumnByName("Name");
grid.moveColumn(idColumn, nameColumn, DropPosition.AfterDropTarget);
typescript
move- 열을 지정된 표시 인덱스로 이동합니다. 전달된 인덱스 매개변수가 유효하지 않은 경우(음수이거나 열 수를 초과하는 경우) 또는 열이 이 인덱스로 이동할 수 없는 경우(다른 그룹 내에 있는 경우) 작업이 수행되지 않습니다.
// Move the ID column at 3rd position.const idColumn = grid.getColumnByName("ID");
idColumn.move(3);
typescript
열 이동 기능을 사용할 때 작업이 성공하면 ColumnMovingEnd 이벤트가 발생합니다. 또한 끌어서 놓기 기능과 비교할 때 열 이동 기능을 사용하려면 moving 속성을 true로 설정할 필요가 없습니다.
이벤트
열의 끌어서 놓기 작업을 탭하기 위한 수단을 제공하기 위해 열 이동과 관련된 여러 이벤트가 있습니다. 이는 ColumnMovingStart, ColumnMoving 및 ColumnMovingEnd 입니다.
를 구독할 수 있습니다. ColumnMovingEnd의 이벤트 IgcHierarchicalGridComponent 열을 새 위치로 놓을 때 일부 사용자 지정 논리를 구현합니다. 예를 들어, 드롭을 취소할 수 있습니다. 범주 열 뒤의 연간 변동률(%) 다음 코드 스니펫의 열입니다.
<igc-hierarchical-gridid="dataGrid"auto-generate="false"moving="true"><igc-columnfield="Category"></igc-column><igc-columnfield="Change On Year(%)"data-type="Number" ></igc-column></igc-hierarchical-grid>html
constructor() {
var dataGrid = this.dataGrid = document.getElementById('dataGrid') as IgcHierarchicalGridComponent;
dataGrid.data = this.data;
dataGrid.addEventListener("columnMovingEnd", this.onColumnMovingEnd);
}
typescript
publiconColumnMovingEnd(event) {
if (event.detail.source.field === "Category" && event.detail.target.field === "Change On Year(%)") {
event.detail.cancel = true;
}
}
typescript
스타일링
사전 정의된 테마 외에도 사용 가능한 CSS 속성 중 일부를 설정하여 그리드를 추가로 사용자 정의할 수 있습니다.
import'igniteui-webcomponents-grids/grids/combined';
import { IgcHierarchicalGridComponent, IgcPaginatorComponent, IgcColumnComponent } from'igniteui-webcomponents-grids/grids';
import HierarchicalCustomers from'./HierarchicalCustomers.json';
import { IgcColumnTemplateContext } from'igniteui-webcomponents-grids/grids';
import { html, nothing } from'lit-html';
import"igniteui-webcomponents-grids/grids/themes/light/bootstrap.css";
import"./index.css";
exportclassSample{
private grid: IgcHierarchicalGridComponent
private paginator: IgcPaginatorComponent
private column1: IgcColumnComponent
private column2: IgcColumnComponent
private column3: IgcColumnComponent
private column4: IgcColumnComponent
private column5: IgcColumnComponent
private column6: IgcColumnComponent
private column7: IgcColumnComponent
private column8: IgcColumnComponent
private column9: IgcColumnComponent
private column10: IgcColumnComponent
private _bind: () =>void;
constructor() {
var grid = this.grid = document.getElementById('grid') as IgcHierarchicalGridComponent;
var paginator = this.paginator = document.getElementById('paginator') as IgcPaginatorComponent;
var column1 = this.column1 = document.getElementById('column1') as IgcColumnComponent;
var column2 = this.column2 = document.getElementById('column2') as IgcColumnComponent;
var column3 = this.column3 = document.getElementById('column3') as IgcColumnComponent;
var column4 = this.column4 = document.getElementById('column4') as IgcColumnComponent;
var column5 = this.column5 = document.getElementById('column5') as IgcColumnComponent;
var column6 = this.column6 = document.getElementById('column6') as IgcColumnComponent;
var column7 = this.column7 = document.getElementById('column7') as IgcColumnComponent;
var column8 = this.column8 = document.getElementById('column8') as IgcColumnComponent;
var column9 = this.column9 = document.getElementById('column9') as IgcColumnComponent;
var column10 = this.column10 = document.getElementById('column10') as IgcColumnComponent;
this._bind = () => {
grid.data = this.hierarchicalCustomers;
column1.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column2.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column3.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column4.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column5.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column6.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column7.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column8.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column9.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
column10.headerTemplate = this.hierarchicalGridPinHeaderTemplate;
}
this._bind();
}
private _hierarchicalCustomers: any[] = HierarchicalCustomers;
publicgethierarchicalCustomers(): any[] {
returnthis._hierarchicalCustomers;
}
public hierarchicalGridPinHeaderTemplate = (ctx: IgcColumnTemplateContext) => {
const column = (ctx asany).column;
return html`<div><spanstyle="float:left">${column.field}</span><spanstyle="float:right" @pointerdown=${(e: any) => this.toggleColumnPin(column)}>📌</span></div>`;
};
publictoggleColumnPin(field: IgcColumnComponent) {
if(field) {
field.pinned = !field.pinned;
}
}
}
new Sample();
ts
<!DOCTYPE html><html><head><title>Sample | Ignite UI | Web Components | infragistics</title><metacharset="UTF-8" /><linkrel="shortcut icon"href="https://static.infragistics.com/xplatform/images/browsers/wc.png" ><linkrel="stylesheet"href="https://fonts.googleapis.com/icon?family=Material+Icons" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Kanit&display=swap" /><linkrel="stylesheet"href="https://fonts.googleapis.com/css?family=Titillium Web" /><linkrel="stylesheet"href="https://static.infragistics.com/xplatform/css/samples/shared.v8.css" /><linkrel="stylesheet"href="/src/index.css"type="text/css" /></head><body><divid="root"><divclass="container sample ig-typography"><divclass="container fill"><igc-hierarchical-gridauto-generate="false"moving="true"name="grid"id="grid"id="grid"><igc-paginatorname="paginator"id="paginator"per-page="15"></igc-paginator><igc-columnfield="CustomerID"data-type="string"name="column1"id="column1"></igc-column><igc-columnfield="Company"data-type="string"width="150px"name="column2"id="column2"></igc-column><igc-columnfield="ContactName"data-type="string"width="150px"name="column3"id="column3"></igc-column><igc-columnfield="ContactTitle"data-type="string"width="150px"name="column4"id="column4"></igc-column><igc-columnfield="Address"data-type="string"name="column5"id="column5"></igc-column><igc-columnfield="City"data-type="string"name="column6"id="column6"></igc-column><igc-columnfield="PostalCode"data-type="string"name="column7"id="column7"></igc-column><igc-columnfield="Country"data-type="string"name="column8"id="column8"></igc-column><igc-columnfield="Phone"data-type="string"name="column9"id="column9"></igc-column><igc-columnfield="Fax"data-type="string"name="column10"id="column10"></igc-column><igc-row-islandchild-data-key="Orders"auto-generate="false"moving="true"><igc-columnfield="OrderID"data-type="number"></igc-column><igc-columnfield="EmployeeID"data-type="number"></igc-column><igc-columnfield="OrderDate"data-type="date"></igc-column><igc-columnfield="RequiredDate"data-type="date"></igc-column><igc-columnfield="ShippedDate"data-type="date"></igc-column><igc-columnfield="ShipVia"data-type="number"></igc-column><igc-columnfield="Freight"data-type="number"></igc-column><igc-columnfield="ShipName"data-type="string"></igc-column><igc-columnfield="ShipAddress"data-type="string"></igc-column><igc-columnfield="ShipCity"data-type="string"></igc-column><igc-columnfield="ShipPostalCode"data-type="string"></igc-column><igc-columnfield="ShipCountry"data-type="string"></igc-column><igc-row-islandchild-data-key="OrderDetails"auto-generate="false"moving="true"><igc-columnfield="ProductID"data-type="number"></igc-column><igc-columnfield="UnitPrice"data-type="number"></igc-column><igc-columnfield="Quantity"data-type="number"></igc-column><igc-columnfield="Discount"data-type="number"></igc-column></igc-row-island></igc-row-island></igc-hierarchical-grid></div></div></div><!-- This script is needed only for parcel and it will be excluded for webpack -->
<% if (false) { %><scriptsrc="src/index.ts"></script><% } %>
</body></html>html