ReoGridのセルはセルボディをホストできます。セルボディはカスタムコンテンツをレンダリングし、ユーザーインタラクションを処理するコンポーネントです。ReoGridは一般的なUIコントロール用に多くの組み込みセルボディタイプを提供しています。
名前空間
using unvell.ReoGrid.CellTypes;
利用可能なセルタイプ
| クラス | サンプル | 説明 |
|---|---|---|
ButtonCell | ![]() | 汎用ボタン |
CheckBoxCell | ![]() | チェックボックス(true/false を切り替え) |
RadioButtonCell | ![]() | ラジオボタン(グループ内で相互排他) |
HyperlinkCell | ![]() | 自動ナビゲーション付きハイパーリンク |
DropdownListCell | ![]() | 単一項目選択用のドロップダウンリスト |
ComboListCell | テキスト入力とドロップダウン選択のコンボボックス | |
ProgressCell | ![]() | プログレスバー(値 0〜1) |
NegativeProgressCell | ![]() | 正/負のプログレスバー |
ImageCell | ![]() | 画像を表示 |
ImageButtonCell | ![]() | ボタン上の画像 |
DatePickerCell | ![]() | カレンダードロップダウン付き日付ピッカー |
ColumnDropdownListCell | 列データをソースとして使用するドロップダウンリスト |
セルボディの設定
// Via worksheet indexer
sheet[1, 2] = new ButtonCell("Click Me");
// Via cell instance
var cell = sheet.Cells["C3"];
cell.Body = new CheckBoxCell();
ICellBodyインターフェース
すべてのセルボディは ICellBody を実装しています。CellBody 基底クラスはデフォルトの実装を提供します。
| メンバー | 説明 |
|---|---|
OnSetup(Cell cell) | ボディがセルにアタッチされたときに呼び出される |
OnPaint(CellDrawingContext dc) | セルボディをレンダリング |
OnMouseDown/Up/Move/Enter/Leave | マウスインタラクションハンドラー(true を返すとイベントを消費) |
OnMouseWheel(e) | マウスホイールハンドラー |
OnKeyDown/Up(KeyCode) | キーボードハンドラー(true を返すと消費) |
OnStartEdit() | セルが編集モードに入るときに呼び出される(false を返すと防止) |
OnEndEdit(data, reason) | 編集終了時に呼び出される(変更されたデータまたは元のデータを返す) |
OnSetData(data) | セルデータが設定されたときに呼び出される(変更されたデータまたは元のデータを返す) |
OnGotFocus() / OnLostFocus() | フォーカス変更ハンドラー |
AutoCaptureMouse() | マウスイベントをキャプチャするかどうか(デフォルト: true) |
DisableWhenCellReadonly | セルが読み取り専用のときにボディを無効にするかどうか(デフォルト: true) |
Cell | 親セル(読み取り専用、OnSetup 後に利用可能) |
Clone() | セルボディのコピーを作成 |
カスタムセルボディの作成については、カスタムセルを参照してください。
ButtonCell
セルのデータをラベルとして表示するクリック可能なボタンです。

// With default text
sheet[1, 2] = new ButtonCell("Hello");
// Without text — uses cell data as label
sheet[1, 2] = new ButtonCell();
sheet[1, 2] = "Hello";
プロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
IsPressed | bool | ボタンが現在押されているかどうか |
イベント
| イベント | 説明 |
|---|---|
Click | ユーザーがボタンをクリックしたときに発生 |
メソッド
| メソッド | 説明 |
|---|---|
PerformClick() | プログラムでボタンクリックをシミュレート |
var button = new ButtonCell("Hello");
button.Click += (s, e) => MessageBox.Show("Button clicked");
sheet["C3"] = button;
// Programmatic click
button.PerformClick();
ボタンの外観のカスタマイズ
セルスタイルを通じてボタンラベルの色を変更します。
var cell = sheet.Cells["C3"];
cell.Style.TextColor = Color.Blue;
cell.Body = new ButtonCell("Hello");

CheckBoxCell
セルのデータを true と false の間で切り替えるチェックボックスです。

var checkbox = new CheckBoxCell();
sheet["C1"] = new object[] { checkbox, "Auto destroy after 5 minutes." };
コンストラクター
| コンストラクター | 説明 |
|---|---|
CheckBoxCell() | チェックなしのチェックボックスを作成 |
CheckBoxCell(bool initChecked) | 初期チェック状態付きのチェックボックスを作成 |
プロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
IsChecked | bool | チェック状態の取得または設定 |
チェック状態の取得と設定
// Set via cell data
sheet[1, 2] = true; // check
sheet[1, 2] = false; // uncheck
// Get via cell data
bool isChecked = (sheet["C1"] as bool?) ?? false;
// Get/set via checkbox instance
checkbox.IsChecked = true;
bool state = checkbox.IsChecked;
イベント
| イベント | 説明 |
|---|---|
Click | ユーザーがチェックボックスをクリックしたときに発生(Spaceキーでは発生しない) |
CheckChanged | チェック状態が変更されたとき(マウスまたはキーボード)に発生 |
checkbox.Click += (s, e) => { /* handle click */ };
checkbox.CheckChanged += (s, e) =>
{
Console.WriteLine($"Checked: {checkbox.IsChecked}");
};
チェックボックスはセルデータを更新するため、CellDataChanged も発生します。
sheet.CellDataChanged += (s, e) =>
{
if (e.Cell.Position == new CellPosition("C1"))
Console.WriteLine("Checkbox changed: " + e.Cell.Data);
};
カスタム描画
OnContentPaint をオーバーライドしてチェックボックスの外観をカスタマイズします。
class MyCheckBox : CheckBoxCell
{
Image checkedImage, uncheckedImage;
public MyCheckBox()
{
checkedImage = Image.FromFile(@"...");
uncheckedImage = Image.FromFile(@"...");
}
protected override void OnContentPaint(CellDrawingContext dc)
{
dc.Graphics.DrawImage(
this.IsChecked ? checkedImage : uncheckedImage,
this.ContentBounds);
}
}

RadioButtonCell
CheckBoxCell を継承するラジオボタンです。同じグループ内のラジオボタンは互いにトグルします。

var radio = new RadioButtonCell();
sheet["C3"] = radio;
RadioButtonGroup
同時に1つのラジオボタンのみ選択できるように、共有の RadioButtonGroup を割り当てます。
var group = new RadioButtonGroup();
sheet[10, 2] = new object[,] {
{ new RadioButtonCell() { RadioGroup = group }, "Apple" },
{ new RadioButtonCell() { RadioGroup = group }, "Orange" },
{ new RadioButtonCell() { RadioGroup = group }, "Banana" },
};
RadioButtonGroupメンバー
| メンバー | 型 | 説明 |
|---|---|---|
RadioButtons | List<RadioButtonCell> | このグループ内のすべてのラジオボタン |
AddRadioButton(cell) | メソッド | グループにラジオボタンを手動で追加 |
Contains(cell) | メソッド | ラジオボタンがこのグループに属するか確認 |
プロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
RadioGroup | RadioButtonGroup | このラジオボタンが属するグループ |
IsChecked | bool | 選択状態の取得または設定(継承) |
イベント
// Click event
radio.Click += (s, e) => { /* handle */ };
// CheckChanged on all radios in a group
group.RadioButtons.ForEach(rb =>
rb.CheckChanged += (s, e) =>
Console.WriteLine("Selected: " + sheet[rb.Cell.Row, rb.Cell.Column + 1]));
DropdownListCell
ユーザーが項目のリストから選択できるドロップダウンリストです。

コンストラクター
| コンストラクター | 説明 |
|---|---|
DropdownListCell() | 空のドロップダウンリスト |
DropdownListCell(params string[] candidates) | 文字列項目付きのドロップダウン |
DropdownListCell(IEnumerable<string> candidates) | 文字列コレクション付きのドロップダウン |
DropdownListCell(ReferenceRange refRange) | セル範囲をデータソースとして使用するドロップダウン |
var dropdown = new DropdownListCell(
"Apple", "Orange", "Banana", "Pear",
"Pumpkin", "Cherry", "Coconut"
);
sheet["B2"] = dropdown;
プロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
SelectedItem | object | 現在選択されている項目 |
SelectedIndex | int | 選択された項目のインデックス |
イベント
| イベント | 説明 |
|---|---|
SelectedItemChanged | 選択された項目が変更されたときに発生 |
dropdown.SelectedItemChanged += (s, e) =>
{
Console.WriteLine("Selected: " + dropdown.SelectedItem);
};
選択された項目はセルデータとしても設定されるため、CellDataChanged も発生します。
詳細はドロップダウンリストセルを参照してください。
ComboListCell
テキスト入力フィールドとドロップダウン選択リストを組み合わせたコンボボックスです。入力中のオートコンプリートをサポートします。
コンストラクター
| コンストラクター | 説明 |
|---|---|
ComboListCell() | 空のコンボリスト |
ComboListCell(params string[] candidates) | 文字列項目付き |
ComboListCell(IEnumerable<string> candidates) | 文字列コレクション付き |
ComboListCell(ReferenceRange refRange) | セル範囲をデータソースとして使用 |
var combo = new ComboListCell("Apple", "Orange", "Banana");
sheet["B2"] = combo;
プロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
SelectedItem | object | 現在選択されている項目 |
SelectedIndex | int | 選択された項目のインデックス |
EnableAutoCompletion | bool | 入力中のオートコンプリートを有効化(デフォルト: true) |
AutoCompleteComparerator | Func<string, string, bool> | オートコンプリート用のカスタム比較関数 |
CandidationListSearchProvider | Func<object, IList<string>> | 候補リスト用のカスタム検索プロバイダー |
イベント
| イベント | 説明 |
|---|---|
SelectedItemChanged | 選択された項目が変更されたときに発生 |
DropdownCell(基底クラス)
DropdownCell はすべてのドロップダウンセルタイプの抽象基底クラスです。カスタムドロップダウンコントロールを作成するために拡張できます。

プロパティ
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
PullDownOnClick | bool | false | セルクリックでドロップダウンパネルを開く |
DropdownButtonSize | RGSize | 16x16 | ドロップダウンボタンのサイズ |
DropdownButtonAutoHeight | bool | true | ボタンの高さをセルに合わせて自動調整 |
IsDropdown | bool | false | ドロップダウンパネルが現在開いているかどうか |
DropdownPanelHeight | int | 200 | ドロップダウンパネルの高さ |
MinimumDropdownWidth | int | 40 | ドロップダウンパネルの最小幅 |
MaximumDropdownWidth | int | 1200 | ドロップダウンパネルの最大幅 |
DropdownControl | Control | null | ドロップダウンパネルに表示されるコントロール |
DropdownButtonStyle | DropdownCellStyle | — | ドロップダウンボタンのスタイル |
メソッド
| メソッド | 説明 |
|---|---|
PushDown(bool forceCellEdit = true) | ドロップダウンパネルを開く |
PullUp() | ドロップダウンパネルを閉じる |
イベント
| イベント | 説明 |
|---|---|
DropdownOpened | ドロップダウンパネルが開いたときに発生 |
DropdownClosed | ドロップダウンパネルが閉じたときに発生 |
カスタムドロップダウンコントロールの作成についてはカスタムドロップダウンセルの作成方法を参照してください。
ProgressCell
水平プログレスバーを表示します。セル値(0〜1)が塗りつぶし量を決定します。
sheet["B2"] = new ProgressCell();
sheet["B2"] = 0.7; // 70% progress
プロパティ
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
TopColor | SolidColor | LightSkyBlue | プログレスバーの上部グラデーション色 |
BottomColor | SolidColor | SkyBlue | プログレスバーの下部グラデーション色 |
var progress = new ProgressCell
{
TopColor = SolidColor.LightGreen,
BottomColor = SolidColor.Green,
};
sheet["B2"] = progress;
sheet["B2"] = 0.5;
NegativeProgressCell
正の値と負の値の両方のプログレスバーを表示します。正の値は中央から右に、負の値は左に伸びます。

sheet["B2"] = new NegativeProgressCell();
sheet["B2"] = -0.3; // 30% negative progress
プロパティ
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
PositiveColor | SolidColor | LightGreen | 正の値の色 |
NegativeColor | SolidColor | LightCoral | 負の値の色 |
LinearGradient | bool | true | グラデーションシェーディングを適用 |
DisplayCellText | bool | true | セルテキスト値を表示 |
LimitedInsideCell | bool | true | バーをセル境界内に制限 |
HyperlinkCell
クリック可能なハイパーリンクです。セルデータを表示テキストとナビゲーションURLとして使用します。

// Auto-navigate to URL on click
sheet[1, 2] = new HyperlinkCell("http://www.google.com", true);
// Or set URL and display text separately
sheet[1, 2] = new HyperlinkCell("http://www.google.com", false);
sheet[1, 2] = "Google";
コンストラクター
| コンストラクター | 説明 |
|---|---|
HyperlinkCell() | 自動ナビゲーション有効のハイパーリンク |
HyperlinkCell(string url) | URLと自動ナビゲーション有効のハイパーリンク |
HyperlinkCell(string url, bool autoNavigate) | 自動ナビゲーション設定可能なハイパーリンク |
プロパティ
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
LinkURL | string | null | ナビゲーションURL |
AutoNavigate | bool | true | クリック時に自動的にナビゲート |
LinkColor | SolidColor | Blue | 未訪問リンクの色 |
VisitedColor | SolidColor | Purple | 訪問済みリンクの色 |
ActivateColor | SolidColor | Red | リンクが押されているときの色 |
イベント
| イベント | 説明 |
|---|---|
Click | リンクがクリックされたときに発生(AutoNavigate が true の場合はナビゲーション後) |
var link = new HyperlinkCell("http://myurl.com", false);
link.Click += (s, e) => { /* custom handler */ };
sheet["A1"] = link;
メソッド
| メソッド | 説明 |
|---|---|
PerformClick() | プログラムでクリックをシミュレート |
ImageCell
セル内に画像を表示します。

var image = Image.FromFile("photo.jpg");
sheet[2, 6] = new ImageCell(image);
コンストラクター
| コンストラクター | 説明 |
|---|---|
ImageCell() | 空の画像セル |
ImageCell(Image image) | 指定された画像の画像セル |
ImageCell(Image image, ImageCellViewMode viewMode) | 表示モード付きの画像セル |
プロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
Image | Image | 表示する画像 |
ViewMode | ImageCellViewMode | 画像の表示方法 |
ImageCellViewMode列挙型
| 値 | 説明 |
|---|---|
Stretch | セル境界に合わせて拡大(デフォルト) — 画像が歪む場合があります |
Zoom | セル境界内に収まるように比例スケーリング |
Clip | 元のサイズを保持し、セル境界でクリップ |
var imgCell = new ImageCell(img, ImageCellViewMode.Zoom);
sheet["F6"] = imgCell;
セル配置スタイルで画像位置を制御します。
var cell = sheet.Cells["F6"];
cell.Style.HAlign = ReoGridHorAlign.Center;
cell.Style.VAlign = ReoGridVerAlign.Middle;
ImageButtonCell
画像を表示するボタンです。ButtonCell を継承します。

sheet["C3"] = new ImageButtonCell(Image.FromFile("Save-32.png"));
プロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
Image | Image | ボタンに表示する画像 |
ButtonCell から Click イベントと PerformClick() メソッドを継承します。
DatePickerCell
日付選択用の月カレンダー付きドロップダウンセルです。WinFormsのみ。

sheet["B2"] = new DatePickerCell();
選択された日付はセルのデータとして保存されます。
注意:
DatePickerCellはWinFormsエディションでのみ利用可能です。WPFについては日付ピッカーセルの作成方法を参照してください。
ColumnDropdownListCell
列データを選択ソースとして使用するドロップダウンリストです。WinFormsのみ。
sheet["B2"] = new ColumnDropdownListCell();
セルボディのサイズ
セルボディのサイズは、パディングスタイルを含む親セルによって決定されます。セルボディを大きくするには、複数のセルを結合します。
sheet.MergeRange("B2:D4");
sheet["B2"] = new ButtonCell("Large Button");
プラットフォーム対応
| セルタイプ | WinForms | WPF |
|---|---|---|
| ButtonCell | はい | はい |
| CheckBoxCell | はい | はい |
| RadioButtonCell | はい | はい |
| HyperlinkCell | はい | はい |
| ImageCell | はい | はい |
| ImageButtonCell | はい | はい |
| ProgressCell | はい | はい |
| NegativeProgressCell | はい | はい |
| DropdownCell | はい | はい |
| DropdownListCell | はい | はい |
| ComboListCell | はい | はい |
| ColumnDropdownListCell | はい | いいえ |
| DatePickerCell | はい | いいえ |
| カスタムセルボディ | はい | はい |
デモプロジェクト
組み込みセルタイプの例はデモプロジェクトに含まれています。
WinForms:

WPF:

関連トピック
- カスタムセル — カスタムセルボディの作成
- ドロップダウンリストセル — ドロップダウンリストの詳細
- カスタムドロップダウンセルの作成方法 — カスタムドロップダウンチュートリアル
- 日付ピッカーセルの作成方法 — WPF日付ピッカーチュートリアル
- セル — セルのプロパティとデータ








