IgbGrid では、BodyTemplate を活用することでセル内に独自のコンポーネントを埋め込むことができます。この記事では、bool 型の列に IgbCheckbox を表示し、行ごとにチェック状態を制御する方法を紹介します。
IgbColumn の設定
以下のように IgbColumn の Field に bool 型プロパティ(例:IsChecked)を指定し、Editable=”false” を設定することでセル編集を無効化し、チェックボックス操作のみで状態を変更できるようにします。
チェックボックスは BodyTemplate を以下のように使用して明示的に埋め込む形となります。
Checked
属性にセルの値(context.Cell.Value)をバインドしますChange
イベントでチェック状態が変更された際にハンドラを呼び出し、データソースに反映します
<IgbColumn Field="@nameof(Person.IsChecked)" DataType="GridColumnDataType.Boolean" Editable="false"> <BodyTemplate> <IgbCheckbox @key="context.Cell.Id.RowID" Checked="@Convert.ToBoolean(context.Cell.Value.ToString())" Change="(args => OnChange(args, context))"> </IgbCheckbox> </BodyTemplate> </IgbColumn>
チェック変更イベントの実装
チェック状態が変化したとき、該当行のデータを更新するための処理を OnChange メソッドで記述します。
private void OnChange(IgbCheckboxChangeEventArgs args, IgbCellTemplateContext context) { // 変更された行の ID を取得 var rowId = int.Parse(context.Cell.Id.RowID); // 対象の Person オブジェクトを検索 var person = _sampleData.FirstOrDefault(p => p.Id == rowId); // Person オブジェクトが見つからない場合は何もしない if (person is null) return; // チェックボックスの状態をデータに反映 person.IsChecked = args.Detail.Checked; }
実行結果
