ReoGrid formats cell display and parsing through data formatters. Supported format types include numbers, dates, percent, currency, text, and custom formatters.

Namespace

using unvell.ReoGrid.DataFormat;

Applying Data Formats

Use SetRangeDataFormat on the worksheet:

var sheet = reoGridControl.CurrentWorksheet;

sheet.SetRangeDataFormat("A1:B2", CellDataFormatFlag.Number,
    new NumberDataFormatter.NumberFormatArgs
    {
        DecimalPlaces = 4,
        NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets,
        UseSeparator = true,
    });

With undo support:

reoGridControl.DoAction(new SetRangeDataFormatAction("A1:B2",
    CellDataFormatFlag.Number,
    new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 2 }));

Quick test:

sheet["B2"] = 12345;
sheet["C2"] = 12345.67890;
sheet["B3"] = -1234;
sheet["C3"] = -1234.56789;

52 (2)

CellDataFormatFlag Enum

ValueDescriptionArgument Type
GeneralAuto format (text and number)None
NumberNumeric formattingNumberDataFormatter.NumberFormatArgs
DateTimeDate and time formattingDateTimeDataFormatter.DateTimeFormatArgs
PercentPercentage formattingNumberDataFormatter.NumberFormatArgs
CurrencyCurrency formattingCurrencyDataFormatter.CurrencyFormatArgs
TextPlain text (no formatting)None
CustomCustom data formatterAny object

Number Format

Number format supports thousands separators, decimal places, and negative number styles.

322

sheet.SetRangeDataFormat("A1:E7", CellDataFormatFlag.Number,
    new NumberDataFormatter.NumberFormatArgs
    {
        DecimalPlaces = 4,
        UseSeparator = true,
    });

NumberFormatArgs Properties

PropertyTypeDefaultDescription
DecimalPlacesshort2Number of decimal places to display
UseSeparatorboolfalseShow thousands separator
NegativeStyleNumberNegativeStyleMinusHow to display negative numbers
CustomNegativePrefixstringnullCustom prefix for negative numbers (used with CustomSymbol style)
CustomNegativePostfixstringnullCustom postfix for negative numbers (used with CustomSymbol style)

NumberNegativeStyle Enum (Flags)

StyleValueExampleDescription
Minus (Default)0x1-123,456.789Regular minus sign
Red0x2123,456.789Red text, no minus
Brackets0x4(123,456.789)Surrounded by brackets
RedMinus0x3-123,456.789Red text with minus
BracketsMinus0x5(-123,456.789)Brackets with minus
RedBrackets0x6(123,456.789)Red text in brackets
RedBracketsMinus0x7(-123,456.789)Red, brackets, and minus
Prefix_Sankaku0x8โ–ฒ 123,456.789Japanese triangle prefix
CustomSymbol0xf0โ€”Use CustomNegativePrefix / CustomNegativePostfix

This is a flags enum โ€” values can be combined with |:

NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Brackets | NumberDataFormatter.NumberNegativeStyle.Red

Negative Number Example

323

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Number,
    new NumberDataFormatter.NumberFormatArgs
    {
        DecimalPlaces = 3,
        NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets,
        UseSeparator = true,
    });

sheet["B2"] = -12345.67;

DateTime Format

Specify a culture and format pattern using standard .NET datetime patterns:

48 (2)

sheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.DateTime,
    new DateTimeDataFormatter.DateTimeFormatArgs
    {
        CultureName = "en-US",
        Format = "yyyy/MM/dd",
    });

DateTimeFormatArgs Properties

PropertyTypeDefaultDescription
Formatstringnull.NET datetime format pattern (e.g., "yyyy/MM/dd", "MM/dd/yyyy HH:mm")
CultureNamestringnullCulture name for localization (e.g., "en-US", "ja-JP")

Note: DateTimeFormatArgs is a struct, not a class.

Percent Format

Values are displayed as percentages. Uses NumberFormatArgs for configuration:

49 (2)

sheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Percent,
    new NumberDataFormatter.NumberFormatArgs
    {
        DecimalPlaces = 2,
    });

A cell value of 0.5 displays as 50.00%.

Currency Format

Currency extends number formatting with a currency symbol placed before or after the value.

325

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Currency,
    new CurrencyDataFormatter.CurrencyFormatArgs
    {
        CultureEnglishName = "en-US",
        DecimalPlaces = 2,
        UseSeparator = true,
        PrefixSymbol = "$",
    });

sheet["B2"] = 1234;

CurrencyFormatArgs Properties

CurrencyFormatArgs inherits from NumberFormatArgs and adds currency-specific properties:

PropertyTypeDefaultDescription
PrefixSymbolstringnullSymbol placed before the number (e.g., "$", "$ ")
PostfixSymbolstringnullSymbol placed after the number (e.g., " USD", " ๅ††")
CultureEnglishNamestringnullCulture name (e.g., "en-US")
DecimalPlacesshort2Number of decimal places (inherited)
UseSeparatorboolfalseShow thousands separator (inherited)
NegativeStyleNumberNegativeStyleMinusNegative number display style (inherited)

Prefix with Space

324

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Currency,
    new CurrencyDataFormatter.CurrencyFormatArgs
    {
        CultureEnglishName = "en-US",
        DecimalPlaces = 2,
        UseSeparator = true,
        PrefixSymbol = "$ ",   // Note the trailing space
    });

Postfix Symbol

326

sheet.SetRangeDataFormat("B2", CellDataFormatFlag.Currency,
    new CurrencyDataFormatter.CurrencyFormatArgs
    {
        CultureEnglishName = "en-US",
        DecimalPlaces = 2,
        UseSeparator = true,
        PostfixSymbol = " USD",
    });

Text Format

Use Text to keep values as literal strings with no formatting:

51 (2)

sheet.SetRangeDataFormat(RangePosition.EntireRange, CellDataFormatFlag.Text, null);

Cell Data Format Properties

Access the format on individual cells:

var cell = sheet.Cells["A1"];

// Get the current format
CellDataFormatFlag format = cell.DataFormat;
object formatArgs = cell.DataFormatArgs;

// Set the format
cell.SetDataFormat(CellDataFormatFlag.Number,
    new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 3 });
PropertyTypeDescription
DataFormatCellDataFormatFlagThe cellโ€™s data format type
DataFormatArgsobjectFormat-specific arguments
CustomDataFormatterIDataFormatterCustom data formatter implementation

Custom Data Formatter

Implement IDataFormatter to create custom formatters:

public interface IDataFormatter
{
    string FormatCell(Cell cell);
    bool PerformTestFormat();
}
MethodDescription
FormatCell(Cell cell)Format the cellโ€™s data. Return a non-empty string on success, or null to skip.
PerformTestFormat()Return true to check data type before formatting, false to skip the check.

Apply with CellDataFormatFlag.Custom:

sheet.SetRangeDataFormat("A1", CellDataFormatFlag.Custom, myFormatterArgs);

// Or set on a cell directly
cell.CustomDataFormatter = new MyCustomFormatter();

See Custom Data Format for detailed examples.

Was this article helpful?