我想从DataGridView
关闭所有类型的验证,但设置DataGridview.CausesValidation=false
不起作用,它总是抛出异常“输入数据无法识别”
DataGridView
绑定到DataTable,该DataTable具有DateTime数据类型的列,但我想添加一些自定义日期格式,这些格式对某些文化无效,例如2013年12月11日,10-12-2013,11 / 11/2013。
因为,我需要对这些列进行排序,因此,我想将它们保留为datetime而不是string / varchar
它是一个C#WinForm应用程序。
答案 0 :(得分:0)
默认情况下,不会进行任何验证。它不是DataGridView
验证数据,而是基础类型,在您的情况下DateTime
。
如果您确实要保留DateTime
类型的日期时间列,则应将所有输入数据转换为您选择的单一格式。您仍然可以通过在运行时转换为特定文化来显示(在内部它们将保留在默认文化中)不同(尽管如果此数据不是只读的,则需要额外的代码和小心)
以下是我的意思的代码段 - 您将数据DateTime
存储在文化A(由Thread
或您自己定义)中,并将其显示为转换为特定文化B的字符串。
当用户尝试以任何格式输入日期时,它将被正确解析并保存在文化B中(但是用户将在该特定文化A中看到它)。
这里的问题 - 如果客户在保存后在B之外的任何其他文化中输入日期,它将在视觉上转换为B.
这是填充DataGridView
private DateTime _dt1;
public string dt1 {
get
{
return _dt1.ToString(new CultureInfo("nl-NL"));
}
set
{
_dt1 = DateTime.Parse(value);
}
}
关于排序问题 - 实现自定义排序相对容易,它会比较未显示的strings
,但它们的基础DateTime
属性