本記事では、updateCell
を使用して、数量や単価を編集した際に、合計金額を自動で再計算して表示する方法を解説します。
IgrGrid の設定
IgrGrid のupdateCell
メソッドを利用すると、任意の行・列のセルを直接更新することができます。
以下の例では、数量 (quantity) または単価 (unitPrice) を編集すると、対応する行の合計金額 (total) を再計算し、updateCell
によって UI に反映します。
<IgrGrid ref={gridRef} data={sampleData} cellEditDone={onCellEditDone} primaryKey="id" width="100%" height="300px" > <IgrColumn field="product" header="Product" /> <IgrColumn field="quantity" header="Quantity" dataType="number" editable={true} /> <IgrColumn field="unitPrice" header="Unit Price" dataType="number" editable={true} /> <IgrColumn field="total" header="Total" dataType="number" editable={false} /> </IgrGrid>
updateCell の使用
ここでは、セルの編集完了イベント (cellEditDone) をフックして、編集された値をもとに計算を行い、updateCell を使って合計セルを更新します。
編集イベントからは以下のように情報が取得できます:
- e.detail.column.field:編集された列名
- e.detail.rowID:編集された行のID
- e.detail.newValue:新しい値
// グリッドコンポーネントへの参照を作成 const gridRef = useRef<IgrGrid>(null); // セル編集完了時のイベントハンドラ const onCellEditDone = (s: IgrGridBaseDirective, e: IgrGridEditDoneEventArgs) => { // 編集された列名(フィールド)を取得します const field = e.detail.column.field; // 編集された行の ID を取得します const rowID = e.detail.rowID; // グリッド参照がなければ何もしません if (!gridRef.current) return; // 「quantity」または「unitPrice」列が編集された場合のみ処理を行います if (field === "quantity" || field === "unitPrice") { // 編集された行のデータを取得します const rowData = gridRef.current.data.find((item: any) => item.id === rowID); if (!rowData) return; // 編集されたフィールドは新しい値、それ以外は既存値を使用します const quantity = Number(field === "quantity" ? e.detail.newValue : rowData.quantity); const unitPrice = Number(field === "unitPrice" ? e.detail.newValue : rowData.unitPrice); // 合計値を計算します const total = quantity * unitPrice; // 合計セルを更新します gridRef.current.updateCell(total, rowID, "total"); } };
実行結果
この設定を適用すると、IgrGrid の「合計」列は以下のように動作します。

ダウンロード後、以下のコマンドで実行できます。
npm ci npm run dev