xamDataGrid将数字字段格式化为4位小数

时间:2014-12-26 20:03:09

标签: wpf infragistics xamdatagrid

我有一个WPF项目,其中包含一个带有Infragistics xamDataGrid的表单。此xamDataGrid中显示的数据会根据调用方的不同而更改。我要做的是格式化数字列(Rate)以显示4个小数位。我发现有几个站点有关于如何使用XAML执行此操作的说明,但由于此网格中的数据是动态的,因此我需要在代码隐藏中执行此操作。 (最好是c#,但我可以使用VB.Net进行管理。)调用者当前将数据传递给网格中显示的数据以及要隐藏的列和可编辑的列。所以我可以让它传递一个列的列表格式和要使用的格式字符串。我只需要弄清楚如何告诉xamDataGrid以某种方式格式化列或字段。

对于那些想要查看XAML的人,无论如何,这里是数据网格的XAML:

<igWPF:XamDataGrid x:Name="GrdMaint"
                   Margin="10"
                   DataSource="{Binding Source={StaticResource cvsDataGrid}}"
                   BorderBrush="Black"
                   BorderThickness="1"
                   HorizontalAlignment="Stretch"
                   VerticalAlignment="Stretch" 
                   IsSynchronizedWithCurrentItem="True"
                   Theme="Office2k7Blue" 
                   GroupByAreaLocation="None" 
                   FieldLayoutInitialized="GrdMaint_OnFieldLayoutInitialized"
                   PreviewMouseDoubleClick="GrdMaint_OnPreviewMouseDoubleClick"
                   RecordUpdated="GrdMaint_RecordUpdated">

    <igWPF:XamDataGrid.FieldSettings>
        <igWPF:FieldSettings AllowRecordFiltering="True" 
                             FilterLabelIconDropDownType="MultiSelectExcelStyle" 
                             Width="Auto" />
    </igWPF:XamDataGrid.FieldSettings>

    <igWPF:XamDataGrid.FieldLayoutSettings>
        <igWPF:FieldLayoutSettings HighlightAlternateRecords="True" 
                                   FilterUIType="LabelIcons" 
                                   AllowDelete ="False" 
                                   AutoGenerateFields="True" />
    </igWPF:XamDataGrid.FieldLayoutSettings>
</igWPF:XamDataGrid>

1 个答案:

答案 0 :(得分:1)

好吧,在与网格战斗并搜索了几天后,我偶然发现了一个神奇的搜索字符串,为我找到了答案。我在Infragistics支持论坛上发现了this post(StackOverflow已经破坏了我。它在这里好得多。)这使我能够提出这个解决方案。在OnFieldLayoutInitialized事件中,我可以遍历每个字段并确定是否要格式化该字段。在我的例子中,我正在检查字段名称是否在字段名称/格式字符串的字典中。如果是,我应用格式字符串。

private void GrdMaint_OnFieldLayoutInitialized(object sender, FieldLayoutInitializedEventArgs e)
{
    Dictionary<string,string> NumericColumnsToFormat = _Vm.GetNumericColumnFormats(_currentStep);

    foreach (var fld in e.FieldLayout.Fields)
    {
        // apply custom numeric format to specific field, if necessary.
        if (NumericColumnsToFormat.Keys.Contains(fld.Name))
        {
            string formatString = NumericColumnsToFormat[fld.Name];
            if (!string.IsNullOrEmpty(formatString))
            {
                var numberEditorStyle = new Style(typeof(XamNumericEditor));
                numberEditorStyle.Setters.Add(new Setter(XamNumericEditor.FormatProperty, formatString));
                fld.Settings.EditorStyle = numberEditorStyle;
            }
        }
    }
}