0

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

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

因为,我需要对这些列进行排序,因此我想保留它们的日期时间而不是字符串/varchar

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

4

1 回答 1

0

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

如果您真的想保留 datetime 类型的列,DateTime您应该将所有输入数据转换为您选择的一种格式。您仍然可以通过在运行时转换为特定的文化来以不同的方式显示(在内部它们将保持默认文化)它们(尽管如果此数据不是只读的,则需要额外的代码和注意)

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

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

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

这是 List 的属性,它填充DataGridView

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

关于排序问题 - 实现自定义排序相对容易,它将比较不显示strings但它们的底层DateTime属性

于 2013-02-25T17:15:01.910 回答