【问题标题】:Infragistics ultrawingrid cell-level formattingInfragistics ultrawingrid 单元级格式化
【发布时间】:2014-08-18 14:06:06
【问题描述】:
我有一个 Infragistics UltraWinGrid 绑定到包含金额(十进制)和货币(字符串)的数据源。我需要显示金额和货币格式:
Data source: Grid contents:
Amount Currency Amount
12.34 EUR EUR 12.34
22.33 USD USD 22.33
我正在考虑 3 个选项:
- 使用格式化字符串填充网格中的“金额”列。我不喜欢这个选项,因为它会弄乱十进制值的排序。
- 在 InitializeRow 事件中为每个 CELL(单元格,而不是列!)设置一个编辑器。但是,我不知道哪个编辑器适合 - 有什么想法吗?
- 在 InitializeLayout 方法中格式化金额列(列级别!)以某种方式依赖于货币列(货币列作为隐藏列存在于网格中) - 但我不知道这是否可能 - 有人知道吗如何?
或者还有其他建议吗?
【问题讨论】:
标签:
formatting
ultrawingrid
【解决方案1】:
我已经使用选项 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;
}
【解决方案2】:
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);
}