Blazor 그리드 선택 개요
Blazor Grid의 Ignite UI for Blazor Select 기능을 사용하면 간단한 마우스 상호 작용을 사용하여 데이터와 쉽게 상호 작용하고 조작할 수 있습니다. 사용 가능한 선택 모드는 세 가지입니다.
- 행 선택
- 셀 선택
- Column selection
이 부동산을RowSelection 통해 다음과 같이 지정할 수 있습니다:
- 없음
- 하나의
- 다중 선택
Blazor Grid Selection Example
아래 샘플은 세 가지 유형의 세포 선택 행동을 보여줍니다.IgbGrid 아래 버튼을 사용해 사용 가능한 선택 모드를 모두 활성화하세요.
Blazor Grid Selection Options
The Ignite UI for Blazor IgbGrid component provides three different selection modes - Row selection, Cell selection and Column selection. By default only Multi-cell selection mode is enabled in the IgbGrid. In order to change/enable selection mode you can use RowSelection, CellSelection or Selectable properties.
Blazor Grid Row Selection
속성은RowSelection 다음과 같은 옵션을 지정할 수 있게 해줍니다:
None- 행 선택은 해당 조건에서IgbGrid비활성화됩니다.Single- 한 행만 선택할 수 있습니다.IgbGridMultiple- 다중 행 선택은 행 선택기를 사용해 +와 같은 CTRL click 키 조합을 사용하거나, 셀이 집중되면 누 space key를 수 있습니다.
자세한 내용은 행 선택 항목을 참조하세요.
Blazor Grid Cell Selection
속성은CellSelection 다음과 같은 옵션을 지정할 수 있게 해줍니다:
None- 셀 선택은 비활성화됩니다.IgbGridSingle- 선택 가능한IgbGrid셀은 단 하나의 셀만 가능합니다.Multiple- 현재 이 상태는 선택의 기본 상태입니다.IgbGrid다중 셀 선택은 왼쪽 버튼 마우스를 연속으로 클릭한 후 셀 위를 마우스로 드래그하여 사용할 수 있습니다.
자세한 내용은 셀 선택 항목을 참조하세요.
Blazor Grid Column Selection
이 속성은Selectable 각 항목IgbColumn 별로 다음과 같은 옵션을 지정할 수 있게 해줍니다. 해당 열 선택은 이 속성이 참 또는 거짓으로 설정되면 각각 활성화되거나 비활성화됩니다.
이로 인해 다음 세 가지 변형이 발생합니다.
- 단일 선택 - 열 셀을 마우스로 클릭합니다.
- 다중 열 선택 - 열 셀을 누르고 CTRL + mouse click 누릅니다.
- 범위 열 선택 - 홀딩 SHIFT + mouse click 그 사이의 모든 것을 선택합니다.
자세한 내용은 열 선택 항목으로 이동하세요.
Blazor Grid Context Menu
Using the ContextMenu event you can add a custom context menu to facilitate your work with IgbGrid. With a right click on the grid's body, the event emits the cell on which it is triggered. The context menu will operate with the emitted cell.
다중 셀 선택이 있는 경우 선택된 셀이 다중 셀 선택 영역에 있는지 확인하는 로직을 넣습니다. 그렇다면 선택한 셀의 값도 내보냅니다.
기본적으로 주요 기능은 다음과 같습니다.
public void RightClick(MouseEventArgs e)
{
this.MenuX = e.ClientX + "px";
this.MenuY = e.ClientY + "px";
}
public void onMenuShow(IgbGridCellEventArgs e)
{
IgbGridCellEventArgsDetail detail = e.Detail;
this.ShowMenu = true;
this.ClickedCell = detail.Cell;
}
상황에 맞는 메뉴에는 다음과 같은 기능이 있습니다.
- 선택한 셀의 값을 복사합니다.
- 선택한 셀의 dataRow를 복사합니다.
- 선택한 셀이 다중 셀 선택 범위 내에 있는 경우 선택한 데이터를 모두 복사합니다.
public void CopyCellData()
{
this.ShowMenu = false;
this.SelectedData = this.ClickedCell.Value.ToString();
StateHasChanged();
}
public async void CopyRowData()
{
this.ShowMenu = false;
NwindDataItem rowData = this.NwindData.ElementAt(this.ClickedCell.Id.RowIndex);
this.SelectedData = JsonConvert.SerializeObject(rowData);
StateHasChanged();
}
public async void CopyCellsData()
{
this.ShowMenu = false;
var selectedData = await this.grid.GetSelectedDataAsync(true, false);
this.SelectedData = JsonConvert.SerializeObject(selectedData);
StateHasChanged();
}
The IgbGrid will fetch the copied data and will paste it in a container element.
그리드와 컨텍스트 메뉴를 결합하는 데 사용할 템플릿은 다음과 같습니다.
<div class="container vertical">
<div class="wrapper" oncontextmenu="event.preventDefault()">
<IgbGrid AutoGenerate="false"
CellSelection="GridSelectionMode.Multiple"
ContextMenu="onMenuShow"
@oncontextmenu="RightClick"
Name="grid"
@ref="grid"
Data="NwindData">
<IgbColumn Field="ProductID"
Header="Product ID">
</IgbColumn>
<IgbColumn Field="ProductName"
Header="Product Name">
</IgbColumn>
<IgbColumn Field="UnitsInStock"
Header="Units In Stock"
DataType="GridColumnDataType.Number">
</IgbColumn>
<IgbColumn Field="UnitPrice"
Header="Units Price"
DataType="GridColumnDataType.Number">
</IgbColumn>
<IgbColumn Field="Discontinued"
DataType="GridColumnDataType.Boolean">
</IgbColumn>
<IgbColumn Field="OrderDate"
Header="Order Date"
DataType="GridColumnDataType.Date">
</IgbColumn>
</IgbGrid>
<div class="selected-data-area">
@SelectedData
</div>
</div>
@if (ShowMenu)
{
<div id="menu" class="contextmenu" style="left: @MenuX; top: @MenuY">
<span id="copySingleCell" class="item" @onclick="CopyCellData">
<IgbIcon @ref=icon IconName="content_copy" Collection="material"></IgbIcon>Copy Cell Data
</span>
<span id="copyRow" class="item" @onclick="CopyRowData">
<IgbIcon IconName="content_copy" Collection="material"></IgbIcon>Copy Row Data
</span>
<span id="copyMultiCells" class="item" @onclick="CopyCellsData">
<IgbIcon IconName="content_copy" Collection="material"></IgbIcon>Copy Cells Data
</span>
</div>
}
</div>
여러 셀을 선택하고 마우스 오른쪽 버튼을 누릅니다. 상황에 맞는 메뉴가 나타나고 셀 데이터 복사를 선택하면 선택한 데이터가 오른쪽 빈 상자에 나타납니다.
결과는 다음과 같습니다.
Known Issues and Limitations
그리드에 세트가 없PrimaryKey 고 원격 데이터 시나리오가 활성화되어 있을 때(페이징, 정렬, 필터링, 스크롤 시 원격 서버에 표시할 데이터를 가져오기 요청이 트리거될 때), 데이터 요청이 완료된 후 다음 상태가 줄로 사라집니다:
- 행 선택
- 행 확장/축소
- 행 편집
- 행 고정
API References
Additional Resources
우리 커뮤니티는 활동적이며 항상 새로운 아이디어를 환영합니다.