Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Binding ComboBox в DataGridView


Автор: godor2008 30.8.2011, 00:19
Всем привет! Кто знает как можно решить такую задачку:
Есть класс Report

Код

public class Report
    {
        public virtual int Id { get; private set; }
        public virtual Employee Employee { get; set; }
        public virtual IList<Expense> Expenses { get; set; }
        public virtual IList<MoneyTransfer> Transfers { get;  set; }
        public virtual string Comment { get; set; }
 
        public  Report()
        {
            Expenses = new List<Expense>();
            Transfers = new List<MoneyTransfer>();
        }
    }


Данный класс содержит 2 коллекции Expenses и Transfers. Transfers состоит из классов MoneyTransfer:
Код

public class MoneyTransfer
    {
        public virtual int Id { get; private set; }
        public virtual Report Report { get; set; }
        public virtual Currency ReceivedCurrency { get; set; }
        public virtual string Comment { get; set; }
    }


В свою очередь,MoneyTransfer имеет свойство класса Currency:
Код

public class Currency
    {
        public virtual  int Id { get; private set; }
        public virtual string Name { get; set; }
    }


Также, отдельно есть список нескольких валют:
Код

IList<Currency> CurrencyList

Заполняется он из БД.

Есть dataGridView. Хочу в нем отобразить коллекцию Transfers. Но чтобы в таблице в колонке "Валюта" был comboBox со всеми возможными валютами из CurrencyList. И в нем выбиралась указанная валюта из MoneyTransfer.

Тоесть:
Код

                 DataGridViewComboBoxColumn Column3 = new DataGridViewComboBoxColumn();
                Column3.HeaderText = "Валюта";
                Column3.DataPropertyName = "ReceivedCurrency";
                Column3.DisplayMember = "Name";
                Column3.ValueMember = "Currency";

                 //Заполняем валютами выпадающий список
                 foreach (Currency cur in CurrencyList)
                {
                    Column3.Items.Add(cur);
                }

                dataGridView1.DataSource = report.Transfers;
                dataGridView1.Columns.Add(Column3);


В итоге, стоит только выбрать любую валюту из выпадающего списка как появляется dataGridView.DateError
В comboBox изначально ничего выбрано, хотя должно.


Если создать отдельный comboBox от dataGridView
Код

                    comboBox3.DataBindings.Clear();
                    comboBox3.DataBindings.Add("SelectedItem",report.Transfers,"ReceivedCurrency");
                    comboBox3.DisplayMember = "Name"; //то что будет отображаться
                    comboBox3.ValueMember = "Currency"; //то с чем будет ассоциироватьс
                    comboBox3.DataSource = CurrencyList;

То работает почти как задумано.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)