Web Components Grid 選択の概要
Web Components Grid の Ignite UI for Web Components 選択機能を使用すると、単純なマウス操作を使用してデータを簡単に操作および操作できます。使用可能な選択モードは 3 つあります。
- 行の選択
- セルの選択
- 列の選択
rowSelection
プロパティを使用すると、以下を指定できます。
- None (なし)
- Single (単一)
- Multiple Select (複数選択)
Web Components Grid 選択の例
以下のサンプルは、IgcGridComponent
の 3 種類のセル選択動作を示しています。以下のボタンを使用して、利用可能な各選択モードを有効にします。
Web Components Grid 選択のオプション
Ignite UI for Web Components IgcGridComponent
コンポーネントは、行選択、セル選択、列選択の 3 つの選択モードを提供します。デフォルトでは、IgcGridComponent
で複数セル選択モードのみが有効になっています。選択モードの変更または有効化は、rowSelection
、cellSelection
または selectable
プロパティを使用します。
Web Components Grid 行選択
プロパティ rowSelection
を使用すると、次のオプションを指定できます。
None
-IgcGridComponent
の行選択が無効になります。Single
-IgcGridComponent
内の 1 行のみの選択が利用可能になります。Multiple
- 複数行の選択は、Ctrl + クリック、Space キー を押して行セレクターを使用することにより、複数行の選択が可能になります。
詳細については、行選択トピックを参照してください。
Web Components Grid セル選択
以下のオプションは、プロパティ cellSelection
で指定できます。
None
-IgcGridComponent
のセル選択が無効になります。Single
-IgcGridComponent
内の 1 セルのみの選択が利用可能になります。Multiple
-IgcGridComponent
の選択のデフォルト状態です。複数セルの選択は、マウスの左ボタンを連続してクリックした後、マウスをセル上にドラッグすることで利用できます。
詳細については、セル選択トピックを参照してください。
Web Components Grid 列選択
selectable
プロパティを使用して、IgcColumnComponent
ごとに以下のオプションを指定できます。このプロパティが true または false に設定されている場合、対応する列の選択がそれぞれ有効または無効になります。
以下の 3 つのバリエーションがあります。
- Single selection (単一選択) - 列セルをマウス クリックします。
- Multi column selection (複数列の選択) - Ctrl キーを押しながら列セルをマウス クリックします。
- Range column selection (列の範囲選択) - Shift キーを押しながら + マウス クリック、その間のすべての列が選択されます。
詳細については、列選択トピックを参照してください。
Web Components Grid コンテキスト メニュー
ContextMenu
イベントは、カスタム コンテキスト メニューを追加して、IgcGridComponent
での作業をアシストします。グリッドの本体を右クリックすると、イベントはトリガーされたセルを放出します。コンテキスト メニューは、放出されたセルで動作します。
複数セルの選択がある場合、選択したセルが複数セルの選択領域にあるかどうかをチェックするロジックを配置します。その場合、選択したセルの値も出力します。
基本的に、メイン関数は次のようになります。
public rightClick(event: any) {
const eventArgs = event.detail;
eventArgs.event.preventDefault();
this.multiCellArgs = {};
if (this.multiCellSelection) {
const node = eventArgs.cell.selectionNode;
const isCellWithinRange = this.grid.getSelectedRanges().some((range) => {
if (
node.column >= range.columnStart &&
node.column <= range.columnEnd &&
node.row >= range.rowStart &&
node.row <= range.rowEnd
) {
return true;
}
return false;
});
if (isCellWithinRange) {
this.multiCellArgs = { data: this.multiCellSelection.data };
}
}
this.contextmenuX = eventArgs.event.clientX;
this.contextmenuY = eventArgs.event.clientY;
this.clickedCell = eventArgs.cell;
this.toggleContextMenu();
}
以下はコンテキストメニューの機能です。
- 選択したセルの value のコピー。
- 選択したセルの dataRow のコピー。
- 選択したセルが複数セルの選択範囲内にある場合、選択したすべてのデータをコピーします。
public copySelectedRowData() {
const selectedData = this.grid.getRowData(this.clickedCell.id.rowID);
this.copyData(selectedData);
const selectedDataArea = document.getElementById('selectedArea');
selectedDataArea.innerText = JSON.stringify(selectedData);
this.toggleContextMenu();
}
public copySelectedCellData() {
const selectedData = this.clickedCell.value;
this.copyData(selectedData);
const selectedDataArea = document.getElementById('selectedArea');
selectedDataArea.innerText = JSON.stringify(selectedData);
this.toggleContextMenu();
}
public copySelectedData() {
const selectedData = this.grid.getSelectedData();
this.copyData(selectedData);
const selectedDataArea = document.getElementById('selectedArea');
selectedDataArea.innerText = JSON.stringify(selectedData);
this.toggleContextMenu();
}
private copyData(data: any[]) {
const tempElement = document.createElement('input');
document.body.appendChild(tempElement);
tempElement.setAttribute('id', 'temp_id');
(document.getElementById('temp_id') as HTMLInputElement).value = JSON.stringify(data);
tempElement.select();
document.execCommand('copy');
document.body.removeChild(tempElement);
}
IgcGridComponent
はコピーされたデータを取得し、コンテナ要素に貼り付けます。
グリッドとコンテキスト メニューを組み合わせるために使用するテンプレート:
<div class="container sample">
<div class="wrapper">
<igc-grid auto-generate="false" width="50%" height="100%" name="grid" id="grid">
<igc-column field="ProductID" header="Product ID">
</igc-column>
<igc-column field="ProductName" header="Product Name">
</igc-column>
<igc-column field="UnitsInStock" header="Units In Stock" data-type="number">
</igc-column>
<igc-column field="UnitPrice" header="Units Price" data-type="number">
</igc-column>
<igc-column field="Discontinued" data-type="boolean">
</igc-column>
<igc-column field="OrderDate" header="Order Date" data-type="date">
</igc-column>
</igc-grid>
<div id="selectedArea" class="selected-data-area">
</div>
</div>
</div>
<div id="menu" style="display: none;" class="contextmenu">
<span id="copySingleCell" class="item">
<igc-icon name="content_copy"></igc-icon>Copy Cell Data
</span>
<span id="copyRow" class="item">
<igc-icon name="content_copy"></igc-icon>Copy Row Data
</span>
<span id="copyMultiCells" class="item">
<igc-icon name="content_copy"></igc-icon>Copy Cells Data
</span>
</div>
</div>
複数のセルを選択し、マウスの右ボタンを押します。コンテキストメニューが表示され、セル データのコピー を選択すると、選択したデータが右側の空のボックスに表示されます。
結果:
既知の問題と制限
グリッドに primaryKey
が設定されておらず、リモート データ シナリオが有効になっている場合 (ページング、ソート、フィルタリング、スクロール時に、グリッドに表示されるデータを取得するためのリモート サーバーへのリクエストがトリガーされる場合)、データ要求が完了すると、行は次の状態を失います:
- 行の選択
- 行の展開/縮小
- 行の編集
- 行のピン固定
API リファレンス
その他のリソース
コミュニティに参加して新しいアイデアをご提案ください。