如何使用转换器格式化列中的日期?

时间:2015-10-30 09:01:44

标签: c# datagrid converter infragistics xamdatagrid

我的数据网格中有一个列,这是正确的数据绑定和工作。现在,我想影响它的格式。所以我已经实现了转换器并将其连接到现场。

<local:DateTimeFormat x:Key="IncludeTime" />
...
<igDP:Field Name="CreatedOn"
            Label="Label"
            Converter="{StaticResource IncludeTime}">
</igDP:Field>

显然,出了点问题,因为我看到窗户没有变化。但是,当我在转换器中放置一个断点时,它会被击中,当我在立即窗口中执行该语句时,它会获得所谓的字符串。

public class DateTimeFormat : IValueConverter
{
  public object Convert(object v, Type t, object p, CultureInfo c)
  {
    if (v is DateTime)
      return System.Convert.ToDateTime(v).ToString("yyyy-MM-dd HH:mm:ss");
    return Binding.DoNothing;
  }
  ...
}

我的猜测是我没有将转换器的输出连接到标记的正确部分,但它击败了我如何解决它。

请注意,我正在寻找将转换器应用于数据网格中的字段的一般方法,因此样式不会这样做(尽管可能有一种方法涵盖日期,时间和货币)

3 个答案:

答案 0 :(得分:2)

我在尝试格式化字符串时遇到了同样的问题。我通过在FieldSettings上设置EditAsType属性来修复它。

EditAsType = "{x:Type core:String}"

当然,您可以使用DateTime或其他类型替换String。

核心命名空间:

xmlns:core = "clr-namespace:System;assembly=mscorlib"

答案 1 :(得分:1)

您想要查看的任何格式只需为XamDateTimeEditor创建样式并在那里指定格式(掩码)。你的代码是正确的,并返回正确的值,但用于显示该值的编辑器需要知道它,否则它将只显示默认格式的值。 (或ValueToDisplayTextConverter可用于在任何类型的控件中显示任何类型的文本。如数字编辑器中的字母数字文本等。)

如果您使用简单的文本编辑器,您应该能够看到转换器返回的值。

<igEditors:XamDateTimeEditor Format="MM/dd/yy HH:mm:ss" Width="200" Height="30" Mask="mm/dd/yy hh:mm:ss" />

答案 2 :(得分:0)

我尝试在这种情况下使用'ValueToDisplayTextConverters'。

xmlns:ie="http://infragistics.com/Editors"
...
<local:DateTimeFormat x:Key="IncludeTime" />
...
<igDP:Field Name="CreatedOn"
        Label="Label">
    <igDP:Field.Settings>
        <igDP:FieldSettings>
            <igDP:FieldSettings.EditorStyle>
                <Style TargetType="{x:Type ie:XamDateTimeEditor}" BasedOn="{StaticResource {x:Type ie:XamDateTimeEditor}}">
                    <Setter Property="ValueToDisplayTextConverter" Value="{StaticResource IncludeTime}" />
                </Style>
            </igDP:FieldSettings.EditorStyle>
        </igDP:FieldSettings>
    </igDP:Field.Settings>
</igDP:Field>

将转换器放在Field上是可能的,虽然我不确定为什么它在你的情况下不起作用。但是,我发现在Field上放置一个转换器是有用的,因为我有一个更复杂的类型/对象,而不是绑定到该字段的DateTime,我基本上想要对它执行ToString()。

它还会更改记录的DataItem上的值的类型,这可能会在以后导致排序或导出时出现问题。例如,将数据转换为字段转换器中的字符串意味着将对字符串值而不是DateTime进行排序。您可以通过编写自定义的SortComparer来解决这个问题,但是您需要编写更多代码,这可能不是必需的。