Visual Studio 2010: проблемы привязки - PullRequest
2 голосов
/ 05 апреля 2011

У меня есть приложение C # Windows Forms, которое мы изначально написали в VS2008 и портировали на VS2010.У него есть привязка между объектом, который мы написали, с двумя свойствами даты, привязанными к двум элементам управления выбора даты и времени.

Вот код конструктора, показывающий привязки одного из сборщиков даты и времени;другое идентично, за исключением, конечно, имени:

private System.Windows.Forms.DateTimePicker dtTradeDate;
this.dtTradeDate = new System.Windows.Forms.DateTimePicker();
// 
// dtTradeDate
// 
this.dtTradeDate.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.bsWorkflowItem, "TradeDate", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
this.dtTradeDate.Format = System.Windows.Forms.DateTimePickerFormat.Short;
this.dtTradeDate.Location = new System.Drawing.Point(383, 43);
this.dtTradeDate.Name = "dtTradeDate";
this.dtTradeDate.Size = new System.Drawing.Size(99, 20);
this.dtTradeDate.TabIndex = 37;

Свойства объекта устанавливаются как свойства get / set:

public DateTime TradeDate
{
    get { return _tradeDate; }
    set { _tradeDate = value; }
}

Когда форма запускается, мы связываем привязкуисточник формы для объекта.Вы можете видеть, что я добавил некоторый явный код, чтобы избежать ситуации, которая возникает ниже, но это не имеет никакого эффекта:

//Initializing workflow item object
_wfItem = new CamraWorkflowItem(UserSession.User);

_wfItem.TradeDate = DateTime.Today;
_wfItem.EffectiveDate = DateTime.Today;
loading.IncrementLoadingSteps(2);

dtEffDate.Value = DateTime.Today;
dtTradeDate.Value = DateTime.Today;

bsWorkflowItem.DataSource = _wfItem;

Теперь вот действительно очень странная часть.Это прекрасно работает в VS2008, а также на двух рабочих станциях VS2010 моих коллег.Однако это не работает на моем.Когда он достигает последней строки, я получаю следующее исключение:

Исключение System.ArgumentOutOfRangeException перешло собственную / управляемую границу
Сообщение = Значение '01.01.10001 12:00:00 AM'недопустимо для' Value '.Значение должно быть между MinDate и MaxDate.Имя параметра: Значение
Источник = System.Windows.Forms
ParamName = Значение StackTrace: в System.Windows.Forms.DateTimePicker.set_Value (значение DateTime) InnerException:

I'mв недоумении здесь.Если я отключаю обе привязки, все работает нормально, но, очевидно, мне нужна привязка для обновления объекта.Также странно, если я смотрю на значения обеих этих дат в отладчике (с показом окна исключения), я вижу правильную дату;см. ниже:

Ceci n'est pas un exception

Значения даты на объекте одинаковы, поэтому они, очевидно, находятся в допустимом диапазоне дат элемента управления.

Этопохоже на ошибку в Visual Studio ... за исключением того, что она работает на компьютерах моих коллег с той же версией .NET и Visual Studio.Я провел целый день, взламывая это, и я в растерянности ... Ваша помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

У меня есть ответ ... или, точнее, неприятный обходной путь.

Разрывая привязки данных в конструкторе, затем вставляя код, который был ранее сгенерирован дизайнером для выполнения привязки после , где я связываю источник привязки с объектом ... это работает:

        bsWorkflowItem.DataSource = _wfItem;
        this.dtTradeDate.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.bsWorkflowItem, "TradeDate", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
        this.dtEffDate.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.bsWorkflowItem, "EffectiveDate", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));  

Геттеры и сеттеры теперь работают правильно, а свойства правильно связаны. Никаких исключений не происходит.

Но это просто не имеет никакого смысла для меня. У кого-нибудь есть идея, почему?

0 голосов
/ 05 апреля 2011

На вашем месте я бы:

  • Отладка с точкой останова на установщике и получателе свойства CamraWorkflowItem.TradeDate и убедитесь, что она имеет ожидаемое значение.

  • Разместите полную трассировку стека.

...