Инфраструктура ультрапривязанного форматирования на уровне ячеек
У меня есть InfraWistics UltraWinGrid, связанный с источником данных, который содержит сумму (десятичное число) и валюту (строку). Мне нужно отобразить сумму и валюту в формате:
Data source: Grid contents:
Amount Currency Amount
12.34 EUR EUR 12.34
22.33 USD USD 22.33
Я думаю о 3 вариантах:
- Заполните столбец "Количество" в сетке отформатированной строкой. Мне не нравится эта опция, потому что она испортит сортировку десятичных значений.
- Установите редактор для каждой ячейки (ячейка, а не столбец!) В событии InitializeRow. Однако я не знаю, какой редактор подойдет - какие-нибудь идеи?
- Отформатируйте столбец 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);
}