Sha*_*yne 5 wpf binding wpfdatagrid
我们有一个绑定到可以为空的sql整数值的列.当用户尝试"清除"中的单元格时DataGrid,我们会收到验证错误
"......无法转换".
如何将其设为空并将"null"值绑定到基础列?
我已经用Google搜索了这个问题2天了,发现了什么.我试着把你的评论编辑给你HCL,但它永远不会保存.
我很熟悉IValueConverters.我写了一个来处理我们的百分比(因此用户可以输入"50%"并将其转换为".5").我正在尝试做一些非常相似的事情,但当值回来时Null(我写了一个假人IValueConterter来调试它),我只是想把它作为一个保存到数据库中Null.也许我只需要设置它DBNullValue?对于我认为可能具有内置属性的东西来说,这看起来似乎很多.我尝试使用TargetNullValue列(DataGridBoundColumn)上的属性并将其设置为DBNull.Value,但它没有更改值(基于我的虚拟,IValueConverter它仍然作为常规(字符串)进入NULL.
我只是希望能够为此(整数类型)列保存空值到数据库.
**最新添加**
好点HCL,我忘了整个世界有时不是ADO.
我绑定到SQL表.有问题的列是int允许NULLs的.
这些列是使用创建的AutoGeneratingColumn,因此它基本上只是"自动地"将它们挂钩(某些样式,例如Right Justify,在此方法中应用,但不适用于此列).它采用这种方法,因为该应用程序几乎是"访问"的替代品.我们的CIO强制要求我们从用户中删除Access,因此这就是解决方案(创建我们自己的MS Access).无论如何,因为它可以打开任何表(并创建表,列等),它只是根据打开的表"自动生成"列.虽然,由于应用程序固有地知道某些列,例如Discount_Pct,当它遇到其中一列时,它会做一些"特殊的东西"(比如指定IValueConverter我上面描述的那些).虽然,就像我说的......对于这个特殊的专栏,没有任何"特殊"的做法.它只是一个常规的SQL整数(可空),它是"AutoGenerated".
小智 5
延伸 Shayne 的自我回答,我发现 TargetNullValue 属性在 DataGridBoundColumn 对象上可用。您可以使用此注释中描述的附加逻辑来使其成为条件。不幸的是,那篇文章没有解释如何将其逻辑与 DataGrid 关联起来,所以这是我的解决方案:
<DataGrid AutoGenerateColumns="True" AutoGeneratingColumn="m_grid_AutoGeneratingColumn"/>
Run Code Online (Sandbox Code Playgroud)
和...
public void m_grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
// Make all columns nullable
((DataGridBoundColumn)e.Column).Binding.TargetNullValue = string.Empty;
}
Run Code Online (Sandbox Code Playgroud)
我对这个问题感到非常沮丧。我希望这可以帮助别人。