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;
}
実行結果
