DataGridView CausesValidation不起作用

时间:2013-02-25 15:46:55

标签: c# winforms datagridview

我想从DataGridView关闭所有类型的验证,但设置DataGridview.CausesValidation=false不起作用,它总是抛出异常“输入数据无法识别”

DataGridView绑定到DataTable,该DataTable具有DateTime数据类型的列,但我想添加一些自定义日期格式,这些格式对某些文化无效,例如2013年12月11日,10-12-2013,11 / 11/2013。

因为,我需要对这些列进行排序,因此,我想将它们保留为datetime而不是string / varchar

它是一个C#WinForm应用程序。

1 个答案:

答案 0 :(得分:0)

默认情况下,不会进行任何验证。它不是DataGridView验证数据,而是基础类型,在您的情况下DateTime

如果您确实要保留DateTime类型的日期时间列,则应将所有输入数据转换为您选择的单一格式。您仍然可以通过在运行时转换为特定文化来显示(在内部它们将保留在默认文化中)不同(尽管如果此数据不是只读的,则需要额外的代码和小心)

以下是我的意思的代码段 - 您将数据DateTime存储在文化A(由Thread或您自己定义)中,并将其显示为转换为特定文化B的字符串。

当用户尝试以任何格式输入日期时,它将被正确解析并保存在文化B中(但是用户将在该特定文化A中看到它)。

这里的问题 - 如果客户在保存后在B之外的任何其他文化中输入日期,它将在视觉上转换为B.

这是填充DataGridView

的List的属性
        private DateTime _dt1; 
        public string dt1 { 
            get 
            {
                return _dt1.ToString(new CultureInfo("nl-NL"));
            } 
            set
            {
                _dt1 = DateTime.Parse(value);
            }
        }

关于排序问题 - 实现自定义排序相对容易,它会比较未显示的strings,但它们的基础DateTime属性