C# 运行调试器时ArgumentOutOfRangeException与数据绑定[VS2010] 问题
假设您有一个要对其执行数据绑定的类。看起来是这样的:C# 运行调试器时ArgumentOutOfRangeException与数据绑定[VS2010] 问题,c#,winforms,visual-studio-2010,data-binding,datetimepicker,C#,Winforms,Visual Studio 2010,Data Binding,Datetimepicker,假设您有一个要对其执行数据绑定的类。看起来是这样的: public class DataClass { private DateTime date; public DataClass() { date = new DateTime(2014, 1, 1); } public DateTime Date { get { return date; } set { date = value; }
public class DataClass
{
private DateTime date;
public DataClass()
{
date = new DateTime(2014, 1, 1);
}
public DateTime Date
{
get { return date; }
set { date = value; }
}
}
现在假设您有一个表单,并且希望在该表单中的DateTimePicker上绑定DataClass的实例。创建和初始化数据绑定如下(设计器代码):
然后(不可避免地)绑定到日期选择器(设计器代码):
并将所需对象设置为数据源:
bindingSource.DataSource = new DataClass();
当您尝试调试应用程序时,会出现以下异常:
ArgumentOutOfRangeException值'1/1/0001 00:00:00'对'Value'无效“值”应介于“MinDate”和“MaxDate”之间
有趣的是,当你尝试运行应用程序时,一切都很好
尝试的解决方案
我尝试将数据源更新模式设置为“从不”,我尝试将格式类型设置为“日期时间”,我尝试将空值设置为类似“01/01/2000”(不带引号)的值,猜猜看,什么都没有发生
现在有一些解决方案,例如
- 不要使用数据绑定或
- 子类化日期选择器和“覆盖”值,这样就不会因为给它一个如此低的值而惩罚你(甚至更好)
- 找出为什么绑定过程会将未使用的值传递给绑定控件,而所需的值就在对象中
还有一件更重要的事:问题是,在.net framework 3.5上不可复制,我使用的是4.0。我发现在绑定DateTimePicker(在.net 4.5中)的Value属性时也有同样的问题 将同一DateTime结构绑定到选择器的Text属性时,问题消失了 这有点违反直觉,但它在两方面都很好(显示现有值和将选定日期存储到结构中) 它仍然会抛出类型为“system.argumentoutofrangeexception”的第一次意外异常,但dll会捕获该异常,在绑定到Value属性时不会捕获相同的异常 希望这能帮助别人 关于,,
Leo Prast此代码必须正常工作。
dateTimePicker.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.bindingSource, "Date", true));
bindingSource.DataSource = new DataClass();