xamDataGrid форматирует числовые поля до 4 знаков после запятой

У меня есть проект WPF, содержащий форму с Infragistics xamDataGrid. Данные, отображаемые в этом xamDataGrid, изменяются в зависимости от вызывающего объекта.

Я пытаюсь отформатировать числовой столбец (Rate) для отображения 4 знаков после запятой. Я нашел несколько сайтов с инструкциями о том, как это сделать с помощью XAML, но, поскольку данные в этой сетке являются динамическими, мне нужно сделать это в коде программной части. (Предпочтительно С#, но я могу справиться с VB.NET.)

В настоящее время вызывающий абонент передает мне данные для отображения в сетке, а также столбцы, которые следует скрыть, а какие столбцы доступны для редактирования. Таким образом, я могу передать мне список столбцов для форматирования и строку формата для использования.

Мне просто нужно выяснить, как указать xamDataGrid форматировать столбец или поле определенным образом.

Для тех из вас, кто хочет увидеть 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>

person DeadZone    schedule 26.12.2014    source источник


Ответы (1)


Ладно, поборовшись с сеткой и поискав пару дней, я наткнулся на волшебную поисковую строку, которая нашла для меня ответ. Я нашел это сообщение на форумах поддержки Infragistics (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;
            }
        }
    }
}
person DeadZone    schedule 29.12.2014