保護とロック

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;

注意: ロックされたセルが編集中の場合、IsLockedLocked に設定すると編集セッションが即座に終了します。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;

関連トピック


ページの内容は役に立ちましたか?