Инфраструктура ультрапривязанного форматирования на уровне ячеек

У меня есть InfraWistics UltraWinGrid, связанный с источником данных, который содержит сумму (десятичное число) и валюту (строку). Мне нужно отобразить сумму и валюту в формате:

Data source:          Grid contents: 
Amount   Currency     Amount
12.34    EUR          EUR 12.34
22.33    USD          USD 22.33

Я думаю о 3 вариантах:

  1. Заполните столбец "Количество" в сетке отформатированной строкой. Мне не нравится эта опция, потому что она испортит сортировку десятичных значений.
  2. Установите редактор для каждой ячейки (ячейка, а не столбец!) В событии InitializeRow. Однако я не знаю, какой редактор подойдет - какие-нибудь идеи?
  3. Отформатируйте столбец Amount (уровень столбца!) В методе InitializeLayout, каким-то образом зависящим от столбца Currency (столбец Currency существует в сетке как скрытый столбец) - но я не знаю, возможно ли это - кто-нибудь знает как? Или есть другие предложения?

2 ответа

Я сделал это, используя вариант 2, используя EditorWithText, У меня есть 2 столбца подряд - десятичный Value столбец и строка FormatString колонка. Вот что я сделал для независимого форматирования в Value колонка.

grid.InitializeRow += (sender, e) =>
{
    DefaultEditorOwnerSettings settings = new DefaultEditorOwnerSettings();
    settings.DataType = typeof(Decimal);
    settings.Format = (string)e.Row.Cells["FormatString"].Value;
    EditorWithText editor = new EditorWithText(new DefaultEditorOwner(settings));
    e.Row.Cells["Value"].Editor = editor;  
}

Squillman ответ работает нормально.

К сожалению, код создает экземпляр EditorWithText для каждой строки.

Вот почему я добавил это:

Dictionary<string, EditorWithText> dic = new Dictionary<string, EditorWithText>();

EditorWithText getEditor(string format)
{
    EditorWithText ed;
    if (!dic.TryGetValue(format, out ed))
    {
        ed = new EditorWithText(
            new DefaultEditorOwner(
                new DefaultEditorOwnerSettings { Format = format }));

        dic.Add(format, ed);
    }
    return ed;
}

Таким образом, существует только один экземпляр EditorWithText в существующем формате.

grid.InitializeRow += (sender, e) =>
{
    e.Row.Cells["Value"].Editor = getEditor((string)e.Row.Cells["FormatString"].Value);
}
Другие вопросы по тегам