DatePicker.Value.Set错误绑定到数据源(DatePicker.Value.Set

2019-08-19 15:54发布

我有一个名为结合,在VS2012窗体上的BindingSource的控制,并且绑定了一个DateTimePicker控件。

为绑定属性我为MinDate = 1753年1月1日和MAXDATE = 31/12/9998价值已经被从压延2013年5月4日上午11点27分采摘今天集

我设置的BindingSource了使用

var dset = base.Context.ContactEvents;
var qry = dset.Where(p => p.Id > 0).OrderBy(x => x.Id);
qry.Load();
this.bindingSource.DataSource = dset.Local.ToBindingList();

BindingSource的被以下面的方式使用;

 public void RefreshBindingDataSourceAndPosition(BindingSource binding)
  {
    binding.DataSource = this.bindingSource.DataSource;  // error raised here
    binding.Position = this.bindingSource.Position;
  }

错误信息

System.ArgumentOutOfRangeException越过天然的/管理的HResult边界= -2146233086“1/01/0001 12:00:00 AM”的消息=值是无效的“价值”。 “值”应为MinDate和MaxDate'之间。 参数名称:值源= System.Windows.Forms的PARAMNAME =值堆栈跟踪:在System.Windows.Forms.DateTimePicker.set_Value(DateTime值)的InnerException:

我可以通过不具约束力的数据选择器,并在EventsBindingSource_CurrentChanged事件中设置它解决问题

然而,它似乎很奇怪有这样做。 我怎样才能获得绑定的工作?

[更新]这个问题类似于描述的在这里我试图重现该问题的一个简单的项目,以试图找出原因,但它工作在简单的项目。 另外,项目工程另一台计算机上。 我的电脑与SQL Server 2012的和2008R2上出现问题。 我曾试图改变在控制面板中的日期格式和国家。 此外,我已经尝试了Format属性不同的设置。 我也曾尝试设置日期字段,以支持空。

当我的错误复制到剪贴板,它显示了以下内容:

System.Reflection.TargetInvocationException发生的HResult = -2146232828消息=异常已被调用的目标抛出。 源= mscorlib程序堆栈跟踪:在System.RuntimeMethodHandle.InvokeMethod在System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(对象目标,对象[]参数,签名Sig,布尔构造)(对象OBJ,对象[]参数,对象[]参数)的InnerException: System.ArgumentOutOfRangeException的HResult = -2146233086消息= '1/01/0001 12:00:00 AM' 的值是无效的 '价值'。 “值”应为MinDate和MaxDate'之间。 参数名称:值源= System.Windows.Forms的PARAMNAME =值堆栈跟踪:在System.Windows.Forms.DateTimePicker.set_Value(DateTime值)的InnerException:

我的EF类是如下

public class ContactEvent : LoggedEntity
{

    public virtual SortableBindingList<ContactEventAttendee> Attendees { get; private set; }
    public virtual ContactEventType ContactEventType { get; set; }
    public string Details { get; set; }
    public DateTime? EventTime { get; set; }
    public virtual SortableBindingList<ContactEventItem> Items { get; private set; }
    public int State { get; set; }
    public string Title { get; set; }
    public override string ToString()
    {
        return "Contact Events";
    }
}

它继承

public abstract class LoggedEntity
{

   public LoggedEntity()
    {
        this.RowId = Guid.NewGuid();
        this.RowVersionId = 0;
        AppDomain dm = AppDomain.CurrentDomain;  // Gets the current application domain for the current Thread.
        object s = AppDomain.CurrentDomain.GetData("SiteNumber");
        this.SourceSiteNumber = Convert.ToInt32(s);
    }

    public LoggedEntity(int SiteNumber)
    {
        // the following 3 are used to identify the version 
        this.RowId = Guid.NewGuid();
        this.RowVersionId = 0;
        this.SourceSiteNumber = SiteNumber;
    }

    public int Id { get; set; }
    public Guid RowId { get; set; }

    [ConcurrencyCheck]
    public int RowVersionId { get; set; }
    public int SourceSiteNumber { get; set; }

}

[更新]类似的问题是在这里

[更新]另外一个在这里让我觉得我需要看看密钥如何被处理。

[更新]我注意到在输出窗口中的以下

A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in System.Windows.Forms.dll

[更新]这使我在这里

并打开调试选项后,我发现了一个错误

Invalid object name 'dbo.__MigrationHistory'.

当然,这是在EF5一个已知的bug

[更新]:我发现其他人有类似的未决问题在这里发现我没有问题,运行.EXE时

[更新]我可以通过禁用“休息的时候例外跨应用程序域或管理工具 - 中/本地边界>选项 - > Debugging->常规跳过错误

[更新]我加入下面,所以我可以检查控制特性。

  private void EventsBindingSource_BindingComplete(object sender, BindingCompleteEventArgs e) { // If the BindingComplete state is anything other than success, // set the ErrorProvider to the error message. if (e.BindingCompleteState != BindingCompleteState.Success) { errorProvider1.SetError((Control)e.Binding.BindableComponent, e.ErrorText); var errdesc = e.ErrorText; var ctrl = (Control)e.Binding.BindableComponent; var info = string.Format( "{0} {1}",errdesc, ctrl.ToString()); Debug.Print(info); // "Value of '1/1/0001 12:00:00 AM' is not valid for 'Value'. 'Value' should be between 'MinDate' and 'MaxDate'.\r\nParameter name: Value System.Windows.Forms.DateTimePicker, Value: 1/1/1900 12:00:00 AM" } else { errorProvider1.SetError((Control)e.Binding.BindableComponent, ""); } } 

Answer 1:

异常的原因可能是的DatePicker的数据绑定的“值”属性已被设置为一个BindingSource的领域。 只有的DatePicker的数据绑定“文本”属性需要的数据绑定正常工作进行设置。 检查是否有在的DatePicker的数据绑定的“值”属性字段中的值,一旦去除这个问题就会消失。



Answer 2:

看来,问题的关键是属性是可空的DateTime。 可能用于转录的的DateTimePicker部件空值是“1 / 01/0001 12:00:00 AM”,其创建与MINVALUE和MaxValue的的结构的问题。 使用数据绑定的高级选项卡中有一个选项设置的值将用于空来解决这个将其值设置为NULL作为为MinDate,或者我们可以用值'01 / 01/0001 12设置为MinDate的一种方式:00:00 AM”。 尽管我有限的经验,我认为,这可能是你的问题的根源。 链接http://msdn.microsoft.com/en-us/library/aa480734.aspx可以看到属性数据绑定的高级选项卡上的东西。



文章来源: DatePicker.Value.Set Error binding to datasource