Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何清除(WPF)数据网格中的单元格(使其获得空值)?_Wpf_Binding_Wpfdatagrid - Fatal编程技术网

如何清除(WPF)数据网格中的单元格(使其获得空值)?

如何清除(WPF)数据网格中的单元格(使其获得空值)?,wpf,binding,wpfdatagrid,Wpf,Binding,Wpfdatagrid,我们有一个绑定到可为null的sql整数值的列。当用户试图“清除”数据网格中的单元格时,我们会得到验证错误 “……无法转换” 如何将其设为空并将“null”值绑定到基础列 我已经用谷歌搜索这个问题两天了,发现了什么。我试图编辑我对你的评论HCL,但它永远不会保存 我熟悉IValueConverters。我写了一个来处理我们的百分比(因此用户可以输入“50%”,然后将其转换为“.5”)。我试图做一些非常类似的事情,但当值返回为Null(我编写了一个虚拟IValueConterter来调试它)时,我

我们有一个绑定到可为null的sql整数值的列。当用户试图“清除”数据网格中的单元格时,我们会得到验证错误

“……无法转换”

如何将其设为空并将“null”值绑定到基础列

我已经用谷歌搜索这个问题两天了,发现了什么。我试图编辑我对你的评论HCL,但它永远不会保存

我熟悉
IValueConverters
。我写了一个来处理我们的百分比(因此用户可以输入“50%”,然后将其转换为“.5”)。我试图做一些非常类似的事情,但当值返回为
Null
(我编写了一个虚拟
IValueConterter
来调试它)时,我只希望它以
Null
的形式保存到数据库中。也许我只需要将它设置为
DBNullValue
?这看起来像是一个很大的工作,我认为可能有一个内置的财产。我尝试在列(
DataGridBoundColumn
)上使用
TargetNullValue
属性,并将其设置为
DBNull.Value
,但它没有更改值(基于我的虚拟
IValueConverter
,它仍然作为常规(字符串)
NULL

我只是希望能够为这个(整型)列将空值保存到数据库中

**最新添加**

很好的一点,我忘记了整个世界有时不是胡闹

我正在绑定到一个SQL表。该列是一个允许
NULL
s的
int


这些列是使用
AutoGeneratingColumn
创建的,因此它基本上只是“自动”地将它们连接起来(某些样式,例如右对齐,在该方法中应用,但不适用于该列)。它采用这种方法,因为该应用程序几乎是一种“访问”替换。我们的首席信息官要求我们删除用户的访问权限,所以这就是解决方案(创建我们自己的MS访问权限)。无论如何,因为它可以打开任何表(并创建表、列等),所以它只是“自动生成”基于打开的表的列。虽然,由于应用程序本身知道某些列,例如折扣Pct,但当遇到其中一列时,它确实会执行一些“特殊操作”(如分配
IValueConverter
I上文所述)。虽然,正如我所说的……对于这个特定的列,没有对它做任何“特殊”的处理。它只是一个“自动生成”的常规SQL整数(可为null)。

我决定对这个字段也使用IValueConverter路径

以下是我写的(它是有效的,我仍然觉得一定有更简单的方法!哈哈):


我刚找到我要找的房子

TargetNullValue

这篇文章解释道:


问题是,这些列是使用“AutoGenerateColumns”生成的(因为数据源…一个sql表…是“动态的”)。如果我能弄清楚如何获取表列(原语)类型,我已经知道如何查看它是否可为null,那么我可以为该列设置此值。(我还是不明白为什么AutoGenerateColumns不能自动处理这个问题!!)

根据Shayne的自我回答,我发现DataGridBoundColumn对象上可以使用TargetNullValue属性。您可以使用所述的附加逻辑使其具有条件。不幸的是,该帖子没有解释如何将其逻辑与DataGrid相关联,因此我的解决方案如下:

<DataGrid AutoGenerateColumns="True" AutoGeneratingColumn="m_grid_AutoGeneratingColumn"/>

我对这个问题非常失望。我希望这能帮助到别人。

我们能看到验证代码吗?没有。这是一个非常普通的网格。我知道如何获取类型…它作为“e.PropertyType”传递给AutoGenerateColumn处理程序。问题是,它不是真正的“类型”…它不可为Null,但数据库列可为Null。因此,我只需按列名对其进行硬编码。:(谢谢,尽管我遇到的问题是我的DataGridTextColumn不会接受TargetNullValue-VS说我尝试时它不在架构中。啊!没关系,我找到了它,它需要:
<DataGrid AutoGenerateColumns="True" AutoGeneratingColumn="m_grid_AutoGeneratingColumn"/>
public void m_grid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    // Make all columns nullable
    ((DataGridBoundColumn)e.Column).Binding.TargetNullValue = string.Empty;
}