Привязка данных к вычисляемым свойствам в Entity Framework - PullRequest
3 голосов
/ 09 декабря 2010

Я пытаюсь найти эффективный способ привязки данных к вычисляемым полям модели Entity Framework в winforms. Я использую Visual Studio 2008 и .NET Framework 3.5. Примером может служить EntityX, скажем, у меня есть columnA и columnB, и я хочу вычисляемое свойство с именем sumAB. То, как я это делал, было с частичными классами:

public partial class EntityX 
{
    public int sumAB 
    {
        get 
        {
            return this.columnA + this.columnB;
        }
    }
}

Затем я использую Visual Studio для добавления EntityX в качестве источника данных, чтобы я мог использовать автоматическое перетаскивание данных. У меня проблема в том, что вычисленные свойства не отображаются в полях источника данных. Я ищу способ автоматического связывания данных для вычисляемых полей.

Я знаю, что мог бы сделать это вручную, но тогда мне пришлось бы также вручную написать весь код привязки, чтобы обновить поле при изменении columnA или columnB. У меня также нет доступа для вычисления этого поля на стороне сервера SQL.

Кто-нибудь знает какие-либо способы выполнения этого или каких-либо других аналогичных направлений для продолжения?

Спасибо!

UPDATE

Я проверил это на другом компьютере, используя Visual Studio 2010 и .NET 4, и все еще получаю такое же поведение. Интересно, что я могу вручную создать текстовое поле и добавить привязку данных, и она будет работать нормально, как показано ниже:

sumABTextBox.DataBindings.Add(
  new System.Windows.Forms.Binding("Text", EntityXBindingSource, "sumAB", true));

Это также сработало, если я поместил свойство в файл .edmx, но это нежелательно, поскольку оно будет стираться при каждом обновлении базы данных.

Есть еще идеи?

ОБНОВЛЕНИЕ 2

Все еще нет решения ... Мне пришлось использовать альтернативы в моем коде, чтобы уложиться в сроки. Я все еще очень заинтересован в этом, если кто-нибудь найдет ответ ...

Ответы [ 2 ]

1 голос
/ 15 декабря 2010

В основном я вчера задал тот же вопрос (WPF, а не WinForms) - Показать вычисляемое свойство в Entity Framework и пользовательском интерфейсе WPF .

Короче говоря, я не смог найти никакой автоматической поддержки. Мне пришлось создать столбцы в моем DataGridView для каждого вычисляемого свойства. Затем, чтобы сообщить DataGridView, что эти свойства обновлены, я должен вызвать OnPropertyChanged ("ComputedPropertyName") в частичном методе OnChanged.

, например

public partial class Test
{
    public int AB
    {
        get { return A * B; }
    }

    public partial void OnAChanged()
    {
        OnPropertyChanged("AB");
    }
    public partial void OnBChanged()
    {
        OnPropertyChanged("AB");
    }
}

Если для этого есть автоматический способ, я бы тоже хотел знать.

1 голос
/ 09 декабря 2010

Звучит странно для меня.Потому что я использую тот же подход в своем проекте (Entity Framework, Self Tracking Entities, WCF, Winforms).

Я построил простое приложение winforms, чтобы проверить его, и свойство "computed" просто отображается в свойстве databindings.Text элемента управления textbox.

Я создал простой класс:

public partial class Test
{
    public int A { get; set; }
    public int B { get; set; }

    public Test()
    {
    }
}
public partial class Test
{
    public int AB
    {
        get { return A * B; }
    }
}

Добавлен источник связывания в форму (источник данных указывает на объект типа Test) и три текстовых поля, связанные с источником связывания, и свойства: A, B и AB.В конструкторе формы я создал экземпляр теста, заполнил значения для A и B, установил bindingsource.DataSource для созданного экземпляра и считает, что в форме он отличный:)

Этот простой тестовый случай не будетотличается от вашей ситуации, кроме того, что вы работаете с объектами, которые вне курса только объекты.Я действительно не вижу проблемы из вашего описания ... Любые дальнейшие комментарии могут помочь мне помочь вам в дальнейшем ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...