我有一个WPF项目,其中包含一个带有Infragistics xamDataGrid的表单。 此 xamDataGrid 中显示的数据因调用方而异。
我正在尝试做的是格式化数字列(Rate)以显示4位小数。我找到了几个网站,其中包含有关如何使用 XAML 执行此操作的说明,但由于此网格中的数据是动态的,因此我需要在代码隐藏中执行此操作。(最好是 C#,但我可以用 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>
好吧,在与网格战斗并搜索了几天之后,我偶然发现了为我找到答案的神奇搜索字符串。 我在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;
}
}
}
}