【问题标题】:How to validate form data entry before navigation with WinForms in .NET using DataBindingNavigator?如何在使用 DataBindingNavigator 在 .NET 中使用 WinForms 导航之前验证表单数据输入?
【发布时间】:2011-08-30 23:29:57
【问题描述】:

我刚刚开始使用 C# 进行 .NET 开发。虽然我已经对语言本身感到满意,但我需要一些关于框架特性的帮助。

我正在构建一个 Windows 窗体应用程序来替换一个简单的 Access 数据库。我已经连接了数据源,在表单上删除了控件,将基本逻辑放置到位,没有问题。甚至发现我需要使用 tableAdapterManager.UpdateAll(...) 或类似方法将数据手动保存回数据库。

我目前的问题是如何在允许用户离开当前记录之前验证我的数据输入,但在谷歌搜索后我一直无法找到解决方案。

场景:

用户单击“添加”以获取新记录,填写一些数据但未填写必填字段之一。用户然后导航到不同的记录而不点击“保存”按钮。应用程序抛出异常,记录丢失。

我可以拦截什么事件,或者我需要重写什么函数来对表单数据进行导航前验证并在数据以某种方式无效时取消导航?

【问题讨论】:

    标签: c# winforms data-binding validation


    【解决方案1】:

    任何 Windows 窗体都可以处理FormClosing event,您可以在其中放置验证码。 FormClosing 事件具有 FormClosingEventArgs 对象,因此如果您的任何验证失败,您可以将其 Cancel 属性设置为 True 以防止导航离开。

    编辑

    对于使用 BindingNavigator 对象的表单,您应该能够处理其“验证”事件以达到类似的效果。在您的 BindingNavigator 的 Validating EventHandler 中,只需为其 CancelEventArgs 对象设置 Cancel 参数,以防您的任何验证失败。

    【讨论】:

    • 这解决了保存数据内容(通过验证取消)的问题,该表单显示没有导航的单个记录 - 直接的“在此处输入您的数据”表单。我所拥有的是一个表单,一次显示一个记录,该表单带有导航控件,允许用户滚动浏览数据库表中的记录并进行所需的任何编辑 - 类似于我们的用户习惯使用链接到的 Access 表单表。在允许他们离开当前记录之前,我需要能够验证数据输入(并将编辑保存到数据库中)。
    • 抱歉,我不能早点回来。我已经编辑了答案以包含您的要求。
    • 如果其他人有我遇到的问题 - 验证事件从未为 bindingnavigator 触发。控件不显示设计器中的属性,但您仍然可以设置它: bindingnavigator.CausesValidation = true;我在表单加载中执行此操作。仅此一项仍然无法做到。您还需要设置焦点。 bindingnavigator.focus();我在 bindingnavigator_ItemClicked 事件中执行此操作,因此无论单击什么按钮都会发生。我现在调用了验证!
    【解决方案2】:

    如果您使用 datagridview 对象来呈现值,则需要处理 RowValidating 事件

    【讨论】:

    • 不幸的是,根本没有使用 DataGridView。我有一个 DataBindingNavigator 和一组控件,这些控件将数据绑定到我的数据源中的字段。
    • 对于代码重用,如果您有许多表单需要进行验证,您可能需要考虑使用验证应用程序块:msdn.microsoft.com/en-us/library/ff650131.aspx
    • 感谢 Arun,这看起来很有趣。我怀疑它比我当前的问题需要更深入一些,并且不能解决我的直接问题。在这一点上,我的验证要求非常简单 - 我只需要检查必填字段中的空值,但我找不到可以执行此操作的位置以防止用户尝试离开页面。
    • 知道了。将发布另一个答案(带有超链接)
    猜你喜欢
    • 2017-04-29
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多