2013-03-05 2 views
0

Я использую Entity Framework в первый раз (сначала база данных, инфраструктура сущности 5) в приложении форм Windows (vs2010, .net 4). У меня возникли проблемы со связыванием между объектом объекта и элементами форм Windows. У меня есть элементы управления textbox, datetimepicker и combobox. Когда я открываю окно со связанными элементами управления, в элементах управления отображаются правильные данные. Однако, когда я изменяю значение в одном из своих элементов управления и выхожу из элемента управления, значение возвращается к исходному значению в элементе управления, как если бы значение не попадало на объект. Вот код их фрагменты:Объект привязки объекта привязки к объекту 5 с контролем окон

Моя сущность объект:

namespace Entities 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class ExternalDocument 
    { 
     public int ExternalDocumentID { get; set; } 
     public bool Active { get; set; } 
     public bool Closed { get; set; } 
     public Nullable<int> CompanyID { get; set; } 
     public Nullable<int> ContactID { get; set; } 
     public string DocumentNbr { get; set; } 
     public Nullable<System.DateTime> DocumentDate { get; set; } 
     public Nullable<System.DateTime> DateReceived { get; set; } 

     public virtual Company Company { get; set; } 
     public virtual Contact Contact { get; set; } 
    } 
} 

связывание данные:

private void SetDataBindings() 
     { 
      LoadComboBoxValues(); 
      this.textDocumentNbr.DataBindings.Add("Text", this.document, "DocumentNbr"); 
      this.textDocumentNbr.Leave += new EventHandler(textDocumentNbr_Leave); 
      this.dateDocument.DataBindings.Add(new Binding("Value", this.document, "DocumentDate")); 
      this.dateReceived.DataBindings.Add("Value", this.document, "DateReceived"); 
      this.comboCompanyID.DataBindings.Add("SelectedValue", document, "CompanyID"); 
     } 

Я задавался вопрос, есть ли рамки сущности ошибка, когда свойство объекта является но я не смог найти хороший способ поймать любые подобные ошибки. У моего объекта фреймворка объекта нет метода < PropertyName> Изменение, созданного для более ранних версий инфраструктуры сущностей. Я пытался перехвата ошибок, когда фокус покидает элемент управления, но думаю, что это не может быть лучшим способом:

private void dateDocument_Leave(object sender, EventArgs e) 
     { 

      string errorString = this.entitiesController.GetValidationErrors(); 
      this.errorDocumentDate.SetError(this.dateDocument, errorString); 
     } 



public string GetValidationErrors() 
     { 
      string errorString = ""; 

      List<DbEntityValidationResult> errorList = (List<DbEntityValidationResult>)this.finesse2Context.GetValidationErrors(); 
      if (errorList.Count > 0) 
      { 
       foreach(var eve in errorList) 
       { 
        errorString += "Entity of type " + eve.Entry.Entity.GetType().Name + " in state" + eve.Entry.State + " has the following validation errors:"; ; 
        foreach (var ve in eve.ValidationErrors) 
        { 
         errorString += "- Property: " + ve.PropertyName + " Error: " + ve.ErrorMessage; 
        } 
       } 
      } 

      return errorString; 
     } 

Любая помощь будет оценена. Благодаря!

ответ

0

Получено, что исключение получено, когда привязка накладывает на объект с нулевым значением значение nullable, если для привязки не указано значение «formattingEnabled».

Таким образом, связывание, как это работает:

this.dateDocument.DataBindings.Add(new Binding("Value", this.document, "DocumentDate", true)); 

в то время как это не делает:

this.dateDocument.DataBindings.Add(new Binding("Value", this.document, "DocumentDate")); 

Я до сих пор неясно, каким образом я мог ловушку, тип ошибки, поскольку Binding просто перехватывает ошибку и заменяет значение в элементе управления исходным значением.

Смежные вопросы