React Hierarchical Grid 行の編集
React Hierarchical Grid の Ignite UI for React 行編集機能を使用すると、IgrHierarchicalGrid
内でデータを直接編集できます。データを操作するこの便利な方法に加えて、完全な CRUD 操作のための強力な API があります。行をクリックして Enter キーを押すと、グリッド行の編集を実行できます。もう 1 つの簡単な方法は、変更する必要がある行をマウスでダブルクリックすることです。
React Hierarchical Grid 行編集の例
以下の手順では、IgrHierarchicalGrid
で行編集を有効にする方法を示します。セル値を変更してから同じ行の他のセルをクリックまたはナビゲーションした場合も [完了] ボタンを使用して確定するまで行値を更新しません。または [キャンセル] ボタンを使用して破棄します。
[!Note] 行が編集モードにある場合、他の行のセルをクリックすると [完了] ボタンが押されたように動作し、前の行の変更をすべての変更をサブミットします。新しくフォーカスされたセルが編集可能な場合、新しい行も編集モードになります。ただし、セルが編集可能でない場合は、前の行のみが編集モードを終了します。
行編集の使用
次に IgrHierarchicalGrid
をバインドしたデータソースで定義し、rowEditable
を true に設定してバインドします。
<IgrHierarchicalGrid
autoGenerate="false"
data={this.singersData}
ref={this.hierarchicalGridRef}
id="hierarchicalGrid"
primaryKey="ID"
rowEditable="true">
<IgrColumn
field="Artist"
header="Artist"
dataType="String"
></IgrColumn>
<IgrColumn
field="Photo"
header="Photo"
dataType="Image"
editable="false"
></IgrColumn>
<IgrColumn
field="Debut"
header="Debut"
dataType="Number"
></IgrColumn>
<IgrColumn
field="GrammyNominations"
header="Grammy Nominations"
dataType="Number"
></IgrColumn>
<IgrColumn
field="GrammyAwards"
header="Grammy Awards"
dataType="Number"
></IgrColumn>
<IgrRowIsland
childDataKey="Albums"
autoGenerate="false"
primaryKey="Album"
rowEditable="true">
<IgrColumn
field="Album"
header="Album"
dataType="String"
></IgrColumn>
<IgrColumn
field="LaunchDate"
header="Launch Date"
dataType="Date"
></IgrColumn>
<IgrColumn
field="BillboardReview"
header="Billboard Review"
dataType="String"
></IgrColumn>
<IgrColumn
field="USBillboard200"
header="US Billboard 200"
dataType="String"
></IgrColumn>
<IgrRowIsland
childDataKey="Songs"
autoGenerate="false"
primaryKey="Number"
rowEditable="true">
<IgrColumn
field="Number"
header="No."
dataType="String"
></IgrColumn>
<IgrColumn
field="Title"
header="Title"
dataType="String"
></IgrColumn>
<IgrColumn
field="Released"
header="Released"
dataType="Date"
></IgrColumn>
<IgrColumn
field="Genre"
header="Genre"
dataType="String"
></IgrColumn>
</IgrRowIsland>
</IgrRowIsland>
<IgrRowIsland
childDataKey="Tours"
autoGenerate="false"
primaryKey="Tour"
rowEditable="true">
<IgrColumn
field="Tour"
header="Tour"
dataType="String"
></IgrColumn>
<IgrColumn
field="StartedOn"
header="Started on"
dataType="String"
></IgrColumn>
<IgrColumn
field="Location"
header="Location"
dataType="String"
></IgrColumn>
<IgrColumn
field="Headliner"
header="Headliner"
dataType="String"
></IgrColumn>
</IgrRowIsland>
</IgrHierarchicalGrid>
[!Note] プライマリキーは行編集操作で必須です。
[!Note] 個々の列の編集を有効にする必要はありません。
IgrHierarchicalGrid
のrowEditable
プロパティを使用すると、定義されたfield
プロパティを持つすべての行 (主行を除く) が編集可能になります。特定の列の編集を無効にしたい場合は、その列のeditable
入力を false に設定するだけです。
[!Note]
IgrHierarchicalGrid
は、行の状態が送信されるかキャンセルされるまで保留中のセルの変更を保持する内部プロバイダーであるBaseTransactionService
を利用します。
位置
オーバーレイのデフォルトの位置は編集モードで行の下にあります。
行の下にスペースがない場合、オーバーレイが行の上に表示されます。
一番上または下に表示されると、オーバーレイは閉じられるまでスクロール時にこの位置を保持します。
動作
行が編集モードの場合、編集が継続します。同じ行のセルがクリックされたかどうか。
[完了] ボタンをクリックすると行編集を完了し、変更をデータソースまたはトランザクションへサブミットします。更に行が編集モードを完了します。
[キャンセル] ボタンがをクリックすると現在の行のすべての変更を元に戻し、行編集モードを終了します。
行が編集モードにある場合、他の行のセルをクリックすると現在の行編集を終了し、行の新規の変更をサブミット ([完了] ボタンをクリックした場合と同じ) します。フォーカスのある新しいセルが編集可能かどうか、新しい行が編集モードに入るかどうか、セルが編集できない場合は前の行のみ編集モードを終了します。
行が編集モードの時にグリッドがスクロールされると行が表示領域外になりますが、
IgrHierarchicalGrid
は編集モードのままです。IgrHierarchicalGrid
をスクロールすると編集行は再度表示されますが編集行が編集モードのままになります。IgrHierarchicalGrid
以外をクリックしたときにセルも編集モードに残ります。ソート、フィルタリング、検索、および非表示操作を実行すると、現在の行のすべての変更が元に戻され、行の編集モードを終了します。
ページング、サイズ変更、ピン固定、移動操作を実行すると、編集モードを終了して最新の値を送信します。
編集した各セルは行編集が終了するまで変更スタイルを取得します。
IgrHierarchicalGrid
がトランザクションで提供されない場合の動作です。トランザクションが有効な場合、すべての変更がコミットされるまでセル編集スタイルが適用されます。
キーボード ナビゲーション
Enter と F2 で行編集モードに入ります
Esc で行編集モードを終了し、行の編集モード時に変更されたいずれのセルの変更もサブミットしません
Tab - 行の編集可能なセルから次のセルへフォーカスを移動、右端の編集可能なセルから [キャンセル] と [完了] ボタンへ移動します。[完了] ボタンからのナビゲーションは現在の編集行内で編集可能なセルへ移動します。
機能の統合
すべてのデータ変更操作は行変更操作を終了し、現在の行の変更をサブミットします。ソート、グループの変更、フィルタリング条件、ページングなどが含まれます。
行編集が終了した後に集計が更新されます。同様にソートやフィルタリングなどの他の機能が有効になります。
行編集オーバーレイのカスタマイズ
テキストのカスタマイズ
テンプレート化を使用した行編集オーバーレイのテキストのカスタマイズが可能です。
RowChangesCount
プロパティが公開されて変更されたセルのカウントを保持します。
function rowEditTextTemplate(ctx: IgrGridRowEditTextTemplateContext) {
return (
<>
Changes: {ctx.dataContext.implicit}
</>
);
}
ボタンのカスタマイズ
テンプレート化を使用した行編集オーバーレイのボタンのカスタマイズも可能です。
function rowEditActionsTemplate(ctx: IgrGridRowEditActionsTemplateContext) {
const endRowEdit = ctx.dataContext.implicit;
return (
<>
<button onClick={(event) => endRowEdit(false, event)}>Cancel</button>
<button onClick={(event) => endRowEdit(true, event)}>Apply</button>
</>
);
}
スタイル設定
定義済みのテーマに加えて、利用可能な CSS プロパティのいくつかを設定することで、グリッドをさらにカスタマイズできます。 一部の色を変更したい場合は、最初にグリッドのクラスを設定する必要があります。
<IgrHierarchicalGrid className="grid"></IgrHierarchicalGrid>
次に、そのクラスに関連する CSS プロパティを設定します。
.grid {
--ig-banner-banner-background: #e3e3e3;
--ig-banner-banner-message-color: #423589;
}
デモ
既知の問題と制限
- グリッドに
primaryKey
が設定されておらず、リモート データ シナリオが有効になっている場合 (ページング、ソート、フィルタリング、スクロール時に、グリッドに表示されるデータを取得するためのリモート サーバーへのリクエストがトリガーされる場合)、データ要求が完了すると、行は次の状態を失います:
- 行の選択
- 行の展開/縮小
- 行の編集
- 行のピン固定
API リファレンス
rowEditable
RowEditEnter
RowEdit
RowEditDone
endEdit
field
editable
primaryKey
IgrHierarchicalGrid
その他のリソース
コミュニティに参加して新しいアイデアをご提案ください。