DateTime需要转换为字符串wpf

时间:2012-07-13 09:54:53

标签: c# wpf

<DataGrid....
<DataGrid.Resources>
  <DataTemplate DataType="{x:Type DateTime}">
        <TextBlock Text="{Binding StringFormat={}{0:d}}"  />
  </DataTemplate>
</DataGrid.Resources>
...
 <DataGridTemplateColumn Header="Время оплаты">
    <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
                <TextBlock VerticalAlignment="Center" Text="{Binding date_payment}"  Width="Auto" Height="Auto" />
           </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

但此列的类型为DateTime ... 我需要在此类型(字符串)上转换此列,因为我需要在此列上重命名值行,我使用事件LoadingRow所以

DataRowView item = e.Row.Item as DataRowView;
DataRow row = item.Row;
var time = row[4];
if (Convert.ToString(time) == "01.01.0001 0:00:00")
{
   row[4] = "No payment";
}

但是错了,行没有转换成字符串,请帮忙

3 个答案:

答案 0 :(得分:3)

首先,您有一个单元格模板和一个数据模板。选一个。其次,既然你有一个数据模板,那么没有理由创建转换器,更不用说代码隐藏事件处理程序了。您可以在一个带触发器的地方保留所有相关的代码和文本字符串(如果需要本地化的话?):

<DataTemplate TargetType="{x:Type DateTime}">
  <TextBlock x:Name="text" Text="{Binding StringFormat={}{0:d}}"/>
  <DataTemplate.Triggers>
    <DataTrigger Binding="{Binding}" Value="{x:Static DateTime.MinValue}">
      <Setter TargetName="text" Property="Text" Value="No payment"/>
    </DataTrigger>
  </DataTemplate.Triggers>
</DataTemplate>

答案 1 :(得分:2)

如果它是Nullable值,您可以使用

Binding="{Binding date_payment, TargetNullValue={}Дата отсутствует}"

如果没有,请使用IValueConverter检查MinDate。 这是Example如何使用转换器和转换器

public class DateConverter:IValueConverter
{
    private const string NoDate = "Дата отсутствует";
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if(value is DateTime)
        {
            var date = (DateTime) value;
            if(date==DateTime.MinValue)
                return NoDate;
            return date.ToString();
        }
        return NoDate;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

答案 2 :(得分:1)

你应该使用Converter:

public class MyConverter : IValueConverter {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            if (value == DateTime.MinValue) {
                return "No payment";
            }
            return value.ToString();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
            throw new NotImplementedException();
        }
    }

只需将转换器添加到绑定中即可。