Entity Framework 4 Привязка данных в WinForms ComboBox с внешними ключами - PullRequest
2 голосов
/ 17 февраля 2011

Я использую Entity Framework 4, мне нужно получить WinForms для привязки клиентов и котировок в качестве отношения Master - Detail.

У меня есть таблица котировок, которую я выкладываю в виде подробностей в форме Windows.

Таблица котировок имеет 3 внешних ключа для таблицы клиентов. (поля CustomerId, SiteCustomerId, InvoiceCustomerId, которые все ссылаются на поле Id в таблице Customer).

В форме есть 3 панели «Клиенты» с полями «Имя клиента» в поле со списком и другие поля «Сведения о клиенте» в текстовых окнах.

Как подключить поля со списком, чтобы они отображали всех возможных клиентов в раскрывающемся списке из таблицы клиентов и имели правильное выбранное значение, а также сохраняли в правильном поле CustomerId в таблице предложений.

Моя (неудачная) попытка:

     Context = new Entities();
        quoteBindingSource.DataSource = Context.Quote;
    customersBindingSource.DataSource = Context.Customers;

        comboBox1.DataSource = customersBindingSource;
                    comboBox1.DisplayMember = "Customer";
                    comboBox1.ValueMember = "Id";

                    comboBox1.DataBindings.Clear();
                    comboBox1.DataBindings.Add("SelectedValue", quoteBindingSource, "CustomerId");

comboBox9.DataSource = customersBindingSource;
            comboBox9.DisplayMember = "Customer";
            comboBox9.ValueMember = "Id";

            comboBox9.DataBindings.Clear();
            comboBox9.DataBindings.Add("SelectedValue", quoteBindingSource, "InvoiceCustomerId");

            comboBox6.DataSource = customersBindingSource;
            comboBox6.DisplayMember = "Customer";
            comboBox6.ValueMember = "Id";

            comboBox6.DataBindings.Clear();
            comboBox6.DataBindings.Add("SelectedValue", quoteBindingSource, "SiteCustomerId");

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

спасибо за вашу версию проекта WinForms :) Ну, бывает, что либо что-то не так, либо мы обнаружили какую-то ошибку. В таких ситуациях обычно безопаснее предположить, что нам не хватает каких-то знаний. Решение простое, но странное: в каждом Combobox вы делаете:

comboBox9.DataBindings.Add("SelectedValue", quoteBindingSource, "InvoiceCustomerId");

Что нужно сделать, чтобы улучшить ситуацию со значениями, возвращающимися к старым, так это:

comboBox9.DataBindings.Add(new Binding("SelectedValue", quoteBindingSource, "InvoiceCustomerId",true));

Теперь есть вопрос. Зачем ? Когда вы смотрите на подсказку IntelliSense для метода Add коллекции DataBindings, вы видите что-то. как это:

Создает System.Windows.Forms.Binding, используя указанное имя свойства элемента управления, источник данных и элемент данных, и добавляет его в коллекцию

По моему скромному мнению, после прочтения этого описания результат двух строк кода, приведенных выше, должен быть практически одинаковым. Почему это не так? Что ж, будем надеяться, что это только наша нехватка знаний, иначе это ошибка :)

2 голосов
/ 17 февраля 2011

Ну, ваш подход не так плох, как вы сказали. Первое: вам нужен этот оператор Clear ()? Какова цель использования этого здесь? Во-вторых, вы можете попытаться изменить свой код следующим образом и посмотреть, поможет ли он:

quoteBindingSource.DataSource = Context.Quote;
customersBindingSource.DataSource = Context.Customers; 

до

.......
List<Quote> quotes;
List<Customer> customers;
.....
quotes = Context.Quote.ToList();
customers = Context.Customers.ToList(); 
.....
quoteBindingSource.DataSource = quotes;
customersBindingSource.DataSource = customers; 

, а затем в каждом ComboBox вместо:

comboBox6.DataSource = customersBindingSource;

вы делаете:

comboBox6.DataSource = customers;

Также убедитесь, что внешние ключи действительно правильно определены для таблиц, поскольку в противном случае вы должны использовать свойства навигации вместо ссылок на ключи при добавлении DataBinding в ComboBoxes. Когда дело доходит до сохранения, в контексте есть метод SaveChanges (), посмотрите его. Надеюсь, это поможет.

Я рекомендую книгу Джули Лерман на EF4 (второе издание) под названием Программирование Entity Framework

...