ReoGrid
DOCUMENT
Data validation

Data validation

ReoGrid can block invalid input while a user edits cells. Attach an IValidator to a cell or range to reject characters and final text that fail your rules.

Where it runs

  • During edit typing (per character) via IValidator.IsValidChar.
  • When the edit text changes or finishes via IValidator.Validate.
  • When copying data into a validated cell/range (the target’s validator must accept the incoming text).

If validation fails, the keystroke or edit is cancelled and the cell keeps its previous value. ReoGrid does not show a built-in message; expose one yourself if needed (for example via your validator or UI).

Apply a validator

using unvell.ReoGrid.Edit;

var sheet = grid.CurrentWorksheet;

// Apply to a range (all cells share the validator instance)
sheet.Ranges["C1:C20"].Validator = new NumericValidator(); // digits, '-' or '.'

// Clear validation
sheet.Ranges["C1:C20"].Validator = null;

Built-in numeric validator

NumericValidator accepts digits, minus sign, and decimal point by default. Pass a regex pattern to change what counts as numeric:

// allow digits only
sheet.Ranges["D1:D50"].Validator = new NumericValidator("^[0-9]+$");

Create a custom validator

Implement IValidator for your own rules (length, whitelist, regex, etc.).

using System.Collections.Generic;
using System.Text.RegularExpressions;
using unvell.ReoGrid.Edit;

class UppercaseValidator : IValidator
{
    private readonly Regex pattern = new Regex("^[A-Z]*$");

    public bool IsValidChar(string text) => pattern.IsMatch(text);

    public IList<IValidationFailure> Validate(string text)
    {
        if (pattern.IsMatch(text)) return null;
        return new List<IValidationFailure> { new SimpleFailure("Uppercase letters only") };
    }
}

class SimpleFailure : IValidationFailure
{
    public string Message { get; }
    public SimpleFailure(string message) { Message = message; }
}

// Apply
sheet.Ranges["A1:A100"].Validator = new UppercaseValidator();

Tips

  • Keep validators fast—methods run on every key press.
  • If you want to show messages, handle failed validation in your UI (for example, subscribe to edit events and inspect your validator).
  • Validation is enforced for user edits and copy/paste into validated cells; programmatic assignments you make in code should already be correct.

Listen for validation status

ReoGrid raises Worksheet.CellValidation every time a validator runs. Use it to surface “OK/NG” status or custom messages:

sheet.CellValidation += (s, e) =>
{
    if (!e.IsValid)
    {
        var msg = string.Join("\n", e.Failures?.Select(f => f.Message) ?? Array.Empty<string>());
        ShowStatus($"Validation failed at {e.Cell?.Position}: {msg}");
        // e.IsValid = true; // optionally override and allow
    }
    else
    {
        ShowStatus("OK");
    }
};

You can also do quick, inline checks in the edit events (CellEditTextChanging / CellEditCharInputed) for simple scenarios—see Cell Edit.


Was the content of the page helpful?

© 2012-2026UNVELL Inc.