Blazor 그리드 셀 편집
Blazor Grid의 Ignite UI for Blazor Blazor Grid 구성 요소 내의 개별 셀 콘텐츠에 대한 뛰어난 데이터 조작 기능을 제공하고 React CRUD 작업을 위한 강력한 API와 함께 제공됩니다. 이는 스프레드시트, 데이터 테이블, 데이터 그리드와 같은 앱의 기본 기능으로, 사용자가 특정 셀 내에서 데이터를 추가, 편집 또는 업데이트할 수 있도록 해줍니다. 기본적으로 Ignite UI for Blazor의 그리드는 셀 편집에 사용됩니다. 그리고 기본 셀 편집 템플릿으로 인해 열 데이터 유형 Top of Form을 기반으로 하는 다양한 편집기가 있습니다.
또한 데이터 업데이트 작업에 대한 사용자 정의 템플릿을 정의하고 변경 사항 커밋 및 삭제에 대한 기본 동작을 재정의할 수 있습니다.
Blazor 그리드 셀 편집 및 템플릿 편집 예
셀 편집
UI를 통한 편집
다음 방법 중 하나로 편집 가능한 셀에 초점이 맞춰지면 특정 셀에 대한 편집 모드로 들어갈 수 있습니다.
- 두 번 클릭하면;
- 한 번 클릭 시 - 이전에 선택한 셀이 편집 모드이고 현재 선택한 셀이 편집 가능한 경우에만 한 번 클릭하면 편집 모드로 들어갑니다. 이전에 선택한 셀이 편집 모드가 아닌 경우 한 번 클릭하면 편집 모드로 들어가지 않고 셀이 선택됩니다.
- 키를 누르면 Enter;
- 키를 누르면 F2;
다음 방법 중 하나로 변경 사항을 커밋하지 않고 편집 모드를 종료할 수 있습니다.
- 키를 누를 때 Escape;
- 정렬, 필터링, 검색 및 숨기기 작업을 수행할 때
다음 방법 중 하나로 편집 모드를 종료하고 변경 사항을 커밋 할 수 있습니다.
- 키를 누르면 Enter;
- 키를 누르면 F2;
- 키를 누를 때 Tab;
- 다른 셀을 한 번 클릭하면 -
IgbGrid
에서 다른 셀을 클릭하면 변경 사항이 제출됩니다. - 페이징, 크기 조정, 고정 또는 이동과 같은 작업을 수행하면 편집 모드가 종료되고 변경 사항이 제출됩니다.
참고 수직 또는 수평으로 스크롤하거나
IgbGrid
외부를 클릭하면 셀은 편집 모드로 유지됩니다. 이는 셀 편집과 행 편집 모두에 유효합니다.
API를 통한 편집
IgbGrid
API를 통해 셀 값을 수정할 수도 있지만 기본 키가 정의된 경우에만 가능합니다.
this.grid.UpdateCell(newValue, rowID, 'ReorderLevel')
셀을 업데이트하는 또 다른 방법은 다음과 같은 방법을 사용하는 Update
것입니다. Cell
@code { private UpdateCell() { IgbCell cell = this.grid1.GetCellByColumn(rowIndex, "ReorderLevel"); cell.Update(70); } }
셀 편집 템플릿
일반 편집 항목에서 기본 셀 편집 템플릿에 대해 자세히 알아보고 확인할 수 있습니다.
셀에 적용될 사용자 정의 템플릿을 제공하려는 경우 해당 템플릿을 셀 자체나 헤더에 전달할 수 있습니다. 먼저 평소와 같이 열을 만듭니다.
<IgbColumn Field="Race" DataType="GridColumnDataType.String" InlineEditorTemplateScript="WebGridCellEditCellTemplate" Editable="true" Name="column1" @ref="column1"> </IgbColumn>
템플릿을 전달합니다.
*** In JavaScript ***
igRegisterScript("WebGridCellEditCellTemplate", (ctx) => {
let cellValues = [];
let uniqueValues = [];
for(const i of ctx.cell.grid.data){
const field = ctx.cell.column.field;
if(uniqueValues.indexOf(i[field]) === -1 )
{
cellValues.push(html`<igc-select-item value=${i[field]}>${(i[field])}</igc-select-item>`);
uniqueValues.push(i[field]);
}
}
return html`<div>
<igc-select position-strategy="fixed" @igcChange=${ e => ctx.cell.editValue = e.detail.value}>
${cellValues}
</igc-select>
</div>`;
}, false);
추가 참조를 위해 위의 작업 샘플을 여기에서 찾을 수 있습니다.
그리드 엑셀 스타일 편집
Excel 스타일 편집을 사용하면 사용자는 Excel을 사용하는 것처럼 셀을 탐색하고 신속하게 편집할 수 있습니다.
이 사용자 정의 기능을 구현하려면 IgbGrid
이벤트를 활용하면 됩니다. 먼저 그리드의 keydown 이벤트에 연결하고 거기에서 두 가지 기능을 구현할 수 있습니다.
- 상수 편집 모드
- Enter / Shift+Enter 탐색
다음 적격 지수를 찾는 주요 부분은 다음과 같습니다.
자세한 내용은 전체 샘플을 확인하세요.
Blazor Grid Excel 스타일 편집 샘플
위 접근 방식의 주요 이점은 다음과 같습니다.
- 지속적인 편집 모드: 셀이 선택된 동안 입력하면 입력된 값으로 즉시 편집 모드로 들어가 기존 값을 대체합니다.
- Enter / Shift+Enter 를 사용하여 탐색할 때 데이터가 아닌 행은 건너뜁니다. 이를 통해 사용자는 해당 값을 빠르게 순환할 수 있습니다.
CRUD 작업
일부 CRUD 작업을 수행하면 필터링, 정렬, 그룹화 등 적용된 모든 파이프가 다시 적용되고 뷰가 자동으로 업데이트된다는 점에 유의하세요.
IgbGrid
기본 CRUD 작업을 위한 간단한 API를 제공합니다.
새 레코드 추가
IgbGrid
구성 요소는 제공된 데이터를 데이터 소스 자체에 추가하는 AddRow
메서드를 노출합니다.
@code { //Assuming we have a `GetNewRecord` method returning the new row data. const record = this.GetNewRecord(); this.GridRef.AddRow(record); }
그리드에서 데이터 업데이트
그리드의 데이터 업데이트는 UpdateRow
및 UpdateCell
메소드를 통해 이루어지지만 그리드의 PrimaryKey가 정의된 경우에만 가능합니다. 또한 해당 업데이트 방법을 통해 셀 및/또는 행 값을 직접 업데이트할 수도 있습니다.
@code { // Updating the whole row this.grid.UpdateRow(newData, this.selectedCell.cellID.rowID); // Just a particular cell through the Grid API this.grid.UpdateCell(newData, this.selectedCell.cellID.rowID, this.selectedCell.column.field); // Directly using the cell `update` method this.selectedCell.Update(newData); // Directly using the row `update` method IgbRowType row = this.grid.GetRowByKey(rowID); row.Update(newData); }
그리드에서 데이터 삭제
DeleteRow
메서드는 PrimaryKey
가 정의된 경우에만 지정된 행을 제거한다는 점을 기억하세요.
@code { // Delete row through Grid API this.grid.DeleteRow(this.selectedCell.cellID.rowID); // Delete row through row object IgbRowType row = this.grid.GetRowByIndex(rowIndex); row.Del(); }
편집 이벤트에 대한 셀 유효성 검사
IgbGrid
의 편집 이벤트를 사용하면 사용자가 IgbGrid
와 상호 작용하는 방식을 변경할 수 있습니다.
이 예에서는 CellEdit
이벤트에 바인딩하여 입력된 데이터를 기반으로 셀의 유효성을 검사합니다. 셀의 새 값이 사전 정의된 기준을 충족하지 않는 경우 이벤트를 취소하여 데이터 소스에 도달하지 못하게 합니다.
가장 먼저 해야 할 일은 그리드의 이벤트에 바인딩하는 것입니다.
<IgbGrid CellEditScript="HandleCellEdit" />
CellEdit
셀의 값이 커밋되려고 할 때마다 내보냅니다. CellEdit 정의에서 조치를 취하기 전에 특정 열을 확인해야 합니다.
*** In JavaScript *** igRegisterScript("HandleCellEdit", (ev) => { var d = ev.detail; if (d.column != null && d.column.field == "UnitsOnOrder") { if (d.newValue > d.rowData.UnitsInStock) { d.cancel = true; alert("You cannot order more than the units in stock!") } } }, false);
주문 단위 열 아래의 셀에 입력된 값이 사용 가능한 금액(재고 단위 아래의 값)보다 큰 경우 편집이 취소되고 사용자에게 취소 알림이 표시됩니다.
IgbGrid
에 적용된 위의 검증 결과는 아래 데모에서 볼 수 있습니다.
스타일링
사전 정의된 테마 외에도 사용 가능한 CSS 속성 중 일부를 설정하여 그리드를 추가로 사용자 정의할 수 있습니다. 일부 색상을 변경하려면 먼저 그리드에 대한 클래스를 설정해야 합니다.
<IgbGrid Class="grid"></IgbGrid>
그런 다음 해당 클래스에 대한 관련 CSS 속성을 설정합니다.
.grid { --ig-grid-edit-mode-color: orange; --ig-grid-cell-editing-background: lightblue; }