【问题标题】:How to format a date in a column using converters?如何使用转换器格式化列中的日期?
【发布时间】:2015-10-30 09:01:44
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# datagrid converter infragistics xamdatagrid


    【解决方案1】:

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

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

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

    核心命名空间:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        我尽量在这种情况下使用“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>
        

        可以在现场放置转换器,但我不确定为什么它在您的情况下不起作用。但是,当我的类型/对象比绑定到我本质上想要对其执行 ToString() 的字段的 DateTime 更复杂时,我发现在字段上放置一个转换器很有用。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-04
          • 2014-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多