【问题标题】:How to allow nulls in a DataGridTextColumn with StringFormat如何在具有 StringFormat 的 DataGridTextColumn 中允许空值
【发布时间】:2013-07-23 16:10:23
【问题描述】:

DataGrid我有一个专栏:

<DataGridTextColumn Header="Freeze First Day" Binding="{Binding FirstDay, StringFormat=\{0:d\}}"/>

并且我希望能够允许将字段从填充更改为空白。 (FirstDay 的类型为DateTime。)但是,当我离开编辑“无法转换值''”时,我得到了一个错误。我已经尝试了多种方法来解决这个问题,但我没有看到找到可行的方法。

【问题讨论】:

  • 您能显示您输入的数据类型吗?您可以提供输入数据和错误的屏幕截图,它可能会有所帮助。
  • @AnatoliyNikolaev 问题是当我已经输入了一个现有的有效日期并且我想完全删除它并且在该字段中根本没有任何值 - 那就是我收到错误的时候。跨度>

标签: wpf wpfdatagrid string-formatting datagridtextcolumn


【解决方案1】:

现在,我想 - 我为你的问题找到了根源 发生这种情况是因为您设置了 StringFormat。每当您删除内容时,该值就会变为空。 StringFormat 无法处理 NULL 值,因此会引发异常。

作为一种解决方法,您可以使用 Converter 并在那里您可以使用 ToString() 方法转换对象,如果不是 NULL 则返回

//IN THE CONVERTER - YOU CAN RETURN AS,
{
     return (value!=null?value.ToString("{0:d}"):value);
} 

【讨论】:

  • 你的回答让我很顺利。我确实添加了一个Converter 并且刚刚为Convert 方法返回了value,并为ConvertBack 方法使用了代码return (string)value == "\b" ? DBNull.Value : value;。成功了。
【解决方案2】:

考虑检查 Binding 属性是否为可为空的 DateTime 类型。

private DateTime? firstDay;
public DateTime? FirstDay
{
get
{ 
   return firstDay;
}
set
{
   firstDay=value;
}
}

【讨论】:

  • 也许我不好看,但对我来说,这个设计不起作用。为了让DatePicker 成功运行。
猜你喜欢
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多