使用 DataRow 的 DataBinding - 问题

Posted

技术标签:

【中文标题】使用 DataRow 的 DataBinding - 问题【英文标题】:DataBinding with a DataRow - problems 【发布时间】:2009-10-21 08:21:02 【问题描述】:

我目前正在用 c# 编写一个项目,但遇到了问题。我将简要介绍一下我的表单:

它在表单的下半部分有一个单行选择的datagridview,并且是只读的。在表单的上半部分,我有各种组件,这些组件数据绑定到 datagridview 上的选定行。我这样做是因为数据库中的列太多,无法在 datagridview 中显示而不会严重弄乱 UI。这工作正常,格式和解析事件被正确调用。

我有一个添加新记录按钮,它将上半部分的控件重新绑定到一个新的数据行(它还不是数据表的一部分),这就是我遇到问题的地方。首先,当直接绑定到数据行时,控件似乎不像绑定到数据表时那样对 DBNull 值满意。但这很好,我只是在绑定之前为新行分配了默认值。但是,由于某种原因,当直接绑定到一行时,似乎没有触发 Format 和 Parse 事件,我不知道为什么?我需要这些的主要原因是我有一个日期值列,理想情况下需要为空(从 UI 角度来看是空白),所以我将 DateTime.MinValue 分配为新行的默认值,然后我在格式上查找它/ 解析事件并进行必要的转换。

我想我的主要问题是为什么绑定到数据行会引发 DBNull 异常,当绑定到相同列中具有相同空值的数据表时不会引发异常并且列约束具有“允许空值”。我的另一个问题是当组件绑定到数据行时为什么不触发 Format / Parse 事件?

【问题讨论】:

【参考方案1】:

我在强迫 datagridview 提交时遇到了很多困难,经过一番谷歌搜索后,我想出了一个 hack 或解决方法。我从您的 cmets 中猜测,您的列中的 null 值与导致异常的 DBNull 之间一定存在一些差异?

您的一些源代码可能有助于在这种情况下进一步尝试并帮助您。

(附注:我知道这更像是一个评论而不是一个答案,但我还不能添加 cmets,所以请不要为此投反对票,或者至少解释一下原因)

【讨论】:

没问题,现在这是一个相当老的问题,并且后来发现数据表处理空值的方式有点时髦,我想它们是在 .NET 具有 Nullable 类型/泛型之前构思的。因此,我已经从他们那里转移到 POCO 上,这减轻了很多压力。

以上是关于使用 DataRow 的 DataBinding - 问题的主要内容,如果未能解决你的问题,请参考以下文章

MySqlDataAdapter.update()不会使用DataRelation更新DataRow

Android11——DataBinding的使用

DataBinding:DataBinding的基本用法

如何使用相同的代码从 DataRow 或 DataReader 中读取数据?

DataBinding学习记录

DataBinding学习记录