Infragistics ultrawingrid单元级格式化

时间:2014-08-18 14:06:07

标签: formatting ultrawingrid

我有一个Infragistics UltraWinGrid绑定到一个数据源,其中包含金额(十进制)和货币(字符串)。我需要显示格式化的金额和货币:

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

我正在考虑3个选项:

  1. 填充"金额"带有格式化字符串的网格中的列。我不喜欢这个选项,因为它会搞乱十进制值的排序。
  2. 在InitializeRow事件中的每个CELL(Cell,而不是Column!)上设置编辑器。但是,我不知道哪个编辑器适合 - 任何想法?
  3. 在InitializeLayout方法中以某种方式格式化Amount列(Column level!)取决于Currency列(Grid列中的Currency列作为隐藏列) - 但我不知道这是否可行 - 是吗?谁知道怎么样? 或者还有其他建议吗?

2 个答案:

答案 0 :(得分:1)

我使用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;  
}

答案 1 :(得分:0)

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);
}