ReoGridは、ユーザーによるデータの変更を防止するために、セルレベルおよびワークシートレベルの保護を提供しています。これには、個々のセルのロック、ワークシート全体のロック、ワークブックの読み取り専用化が含まれます。
セルレベルのロック
各セルには、セルを編集できるかどうかを制御する CellLock 型の IsLocked プロパティがあります。
CellLock列挙型
| 値 | 説明 |
|---|---|
Inherit | ワークシートからロック状態を継承(デフォルト) |
Locked | セルが明示的にロック — 編集不可 |
Unlocked | セルが明示的にロック解除 — 常に編集可能 |
個々のセルのロック
// Lock a specific cell
sheet.Cells["A1"].IsLocked = CellLock.Locked;
// Unlock a specific cell
sheet.Cells["B2"].IsLocked = CellLock.Unlocked;
// Reset to inherit from worksheet
sheet.Cells["A1"].IsLocked = CellLock.Inherit;
セル範囲のロック
複数のセルをロックするには、反復処理を行います:
sheet.IterateCells("A1:D10", (row, col, cell) =>
{
if (cell != null) cell.IsLocked = CellLock.Locked;
return true; // continue iteration
});
セルのReadOnlyプロパティ
個々のセルには、よりシンプルな読み取り専用フラグとして IsReadOnly プロパティもあります:
sheet.Cells["A1"].IsReadOnly = true;
注意: ロックされたセルが編集中の場合、
IsLockedをLockedに設定すると編集セッションが即座に終了します。AlwaysMoveSelectionToUnlockedCellが有効な場合、選択も最も近いロック解除されたセルに移動します。
ワークシートレベルのロック
ワークシート全体をロックまたはロック解除します:
// Lock the entire worksheet
sheet.IsLocked = true;
// Unlock the entire worksheet
sheet.IsLocked = false;
ワークシートがロックされている場合:
IsLocked = CellLock.InheritのセルはロックされますIsLocked = CellLock.Unlockedのセルは編集可能なままです- アクティブな編集セッションは即座に終了します
ロックされたセルの選択可能性
デフォルトでは、ロックされたセルは引き続き選択可能です。ロックされたセルの選択を防止するには:
sheet.IsLockedCellSelectable = false;
ロック解除されたセルへの選択移動
プログラムで最も近いロック解除されたセルに選択を移動します:
sheet.MoveSelectionRangeToUnlockedCell();
ロック解除セルへの自動移動
ワークシートがロックされている場合に、自動的にロック解除されたセルに選択を移動します:
sheet.Options.AlwaysMoveSelectionToUnlockedCell = true;
ワークブックレベルの読み取り専用
ワークブック全体(すべてのワークシート)を読み取り専用モードに設定します:
// Make the entire workbook read-only
reoGridControl.Readonly = true;
// Make it writable again
reoGridControl.Readonly = false;
これにより、すべてのワークシートで Edit_Readonly ワークシート設定が設定されます。
ワークシートの読み取り専用設定
ワークシート設定を使用して、個々のワークシートを読み取り専用にします:
// Make a single worksheet read-only
sheet.SetSettings(WorksheetSettings.Edit_Readonly, true);
// Check if read-only
bool isReadonly = sheet.HasSettings(WorksheetSettings.Edit_Readonly);
// Make writable
sheet.SetSettings(WorksheetSettings.Edit_Readonly, false);
範囲の読み取り専用
範囲インスタンスを通じてセル範囲を読み取り専用にします:
var range = sheet.Ranges["A1:D10"];
range.IsReadonly = true;
カスタムセルボディと読み取り専用
カスタムセルボディ(ボタン、チェックボックスなど)は、所有者セルが読み取り専用の場合に自動的に無効になります。この動作は DisableWhenCellReadonly プロパティで制御されます:
public class MyCustomCell : CellBody
{
// Override to keep the cell body active even when the cell is read-only
public override bool DisableWhenCellReadonly => false;
}
例外処理
コードが読み取り専用セルの変更を試みると、ReoGridは特定の例外をスローします:
| 例外 | 説明 |
|---|---|
OperationOnReadonlyCellException | 読み取り専用違反の基本例外 |
CellDataReadonlyException | 読み取り専用セルのデータ変更の試み(CellPos を提供) |
RangeContainsReadonlyCellsException | 読み取り専用セルを含む範囲への操作(Range を提供) |
これらの例外を処理します:
try
{
sheet["A1"] = "new value";
}
catch (CellDataReadonlyException ex)
{
Console.WriteLine($"Cannot modify cell at {ex.CellPos}: cell is read-only");
}
catch (RangeContainsReadonlyCellsException ex)
{
Console.WriteLine($"Range {ex.Range} contains read-only cells");
}
よくあるパターン
編集可能な領域を持つテンプレート
特定のセルのみが編集可能なフォームテンプレートを作成します:
var sheet = grid.CurrentWorksheet;
// Set up the template with labels
sheet["A1"] = "Name:";
sheet["A2"] = "Email:";
sheet["A3"] = "Phone:";
// Make the label cells locked
sheet.Cells["A1"].IsLocked = CellLock.Locked;
sheet.Cells["A2"].IsLocked = CellLock.Locked;
sheet.Cells["A3"].IsLocked = CellLock.Locked;
// Explicitly unlock the input cells
sheet.Cells["B1"].IsLocked = CellLock.Unlocked;
sheet.Cells["B2"].IsLocked = CellLock.Unlocked;
sheet.Cells["B3"].IsLocked = CellLock.Unlocked;
// Lock the worksheet — only B1:B3 remain editable
sheet.IsLocked = true;
// Optionally auto-move to unlocked cells
sheet.Options.AlwaysMoveSelectionToUnlockedCell = true;
関連トピック
- セル編集 — セルの編集動作
- ワークシート設定 — すべてのワークシート設定
- データバリデーション — ユーザー入力のバリデーション