无法退出空白的数据绑定文本框

时间:2018-10-12 01:33:50

标签: c# entity-framework validation

我正在构建一个Entity Framework数据库应用程序(C#,SQL Server)。我将文本框字段用于多个可选日期(DataTime?-可为空)。我有验证处理程序,该处理程序拒绝无法解析为日期的条目(DateTime.TryParse),但是将接受空白条目。问题在于,如果将条目保留为空白,则文本框字段将不允许焦点移开。即使Validating Handler批准了此操作(e.cancel = false)。已验证事件不会触发。我找不到后台失效的来源。

我不能使用DateTimePicker控件,因为它当然也不可以为空白-也不能对其进行格式化以匹配表单其余部分的字体和颜色。

其他信息-只要用户不“触摸”它们,便可以不停地通过这些字段(TAB)。在这种情况下,将同时触发Validating和Validated事件。但是,如果在该字段中输入了任何文本(然后删除了),则用户必须输入有效日期才能退出该字段。将触发Validating事件,但不会触发Validated事件。不会抛出异常,也不会给出任何其他反馈,只是使用户陷入困境。

其他信息-我在表单上找到“ AutoValidate”属性,并尝试将其设置为EnableAllowFocusChange;这允许用户退出空白字段,但也允许他们退出并输入无效的日期。它对于整个表单也是全局的,这使它成为不可接受的(非)解决方案。

这种隐藏的,无效的失效来自何处,我该如何拦截/取消/击败它?

已请求我的验证码:

    private void txb_ReleaseDate_Validating(object sender, CancelEventArgs e)
    {
        if (!EditMode["EmployeeRecord"]) return;              // NOT editing EmployeeRecord

        TextBox dataField = (TextBox)sender;
        Boolean isValid = true;

        DateTime testValue;


        if (!String.IsNullOrEmpty(dataField.Text))                   //  null is acceptable
        {
            isValid = DateTime.TryParse(dataField.Text, out testValue);

            if (!isValid)
            {
                MessageBox.Show("Enter a valid Date for Release, or leave BLANK.", "Invalid Entry", MessageBoxButtons.OK);
                e.Cancel = true;        
            }

        }

    }

    private void txb_ReleaseDate_Validated(object sender, EventArgs e)
    {
        MessageBox.Show("Validated Handler (Release Date) fired");

    }

正如我提到的,此代码正在按预期执行。 “已验证”代码仅用于跟踪目的,我不需要在那里执行任何操作。

在验证代码运行并获得批准后,某项正在取消验证 项。

0 个答案:

没有答案