gpt4 book ai didi

entity-framework-5 - DatePicker.Value.Set 绑定(bind)到数据源的错误

转载 作者:行者123 更新时间:2023-12-04 07:57:48 25 4
gpt4 key购买 nike

我有一个名为 binding 的 bindingsource 控件,在 VS2012 中的一个表单上,以及一个绑定(bind)到它的 DateTimePicker 控件。

对于绑定(bind)属性,我有 MinDate = 1/01/1753 和 MaxDate = 31/12/9998
值已通过从日历中选择 Today 来设定 2013 年 5 月 4 日上午 11:27

我设置了一个绑定(bind)源使用

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();

绑定(bind)源的使用方式如下;
 public void RefreshBindingDataSourceAndPosition(BindingSource binding)
{
binding.DataSource = this.bindingSource.DataSource; // error raised here
binding.Position = this.bindingSource.Position;
}

错误信息是

System.ArgumentOutOfRangeException crossed a native/managed boundary HResult=-2146233086 Message=Value of '1/01/0001 12:00:00 AM' is not valid for 'Value'. 'Value' should be between 'MinDate' and 'MaxDate'. Parameter name: Value Source=System.Windows.Forms ParamName=Value StackTrace: at System.Windows.Forms.DateTimePicker.set_Value(DateTime value) InnerException:



我可以通过不绑定(bind) Data Picker 并将其设置在 EventsBindingSource_CurrentChanged 事件中来解决该问题

然而,不得不这样做似乎很奇怪。我怎样才能让数据绑定(bind)工作?

[更新]
这个问题类似于 here 中描述的问题。
我试图在一个更简单的项目中重现该问题,以尝试找出原因,但是它在更简单的项目中有效。该项目也可以在另一台计算机上运行。
我的计算机同时使用 SQL Server 2012 和 2008R2 时出现此问题。我尝试在控制面板中更改日期格式和国家/地区。我也尝试了 format 属性的不同设置。我还尝试将日期字段设置为支持 null。

当我将错误复制到剪贴板时,它显示以下内容;

System.Reflection.TargetInvocationException occurred HResult=-2146232828 Message=Exception has been thrown by the target of an invocation. Source=mscorlib StackTrace: at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) InnerException: System.ArgumentOutOfRangeException HResult=-2146233086 Message=Value of '1/01/0001 12:00:00 AM' is not valid for 'Value'. 'Value' should be between 'MinDate' and 'MaxDate'. Parameter name: Value Source=System.Windows.Forms ParamName=Value StackTrace: at System.Windows.Forms.DateTimePicker.set_Value(DateTime value) 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; }

}

[更新]
一个类似的问题是 here

[更新]
另一个 here让我觉得我需要看看如何处理 key 。

[更新]
我在输出窗口中注意到以下内容
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in System.Windows.Forms.dll

[更新]
这导致我
here

打开调试选项后,我发现了一个错误
Invalid object name 'dbo.__MigrationHistory'.

然而,这是 EF5 中的一个已知错误

[更新]:我找到了另一个有类似未解决问题的人 here
发现我在运行.EXE时没有问题

[更新] 我可以通过禁用“异常跨越应用程序域或托管/ native 边界时中断”来跳过错误
在工具->选项->调试->常规

[更新] 我添加了以下内容,所以我可以检查控件属性。

    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, "");
}
}

最佳答案

异常的原因可能是 DatePicker 的 DataBinding "Value"属性已设置为 BindingSource 字段。
只需设置 DatePicker 的 DataBinding“Text”属性,数据绑定(bind)才能正常工作。
检查 DatePicker 的 DataBinding“值”属性字段中是否有值,一旦删除,问题就会消失。

关于entity-framework-5 - DatePicker.Value.Set 绑定(bind)到数据源的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15824070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com