надоевший Binding (Master - Detail)
От: DoMage  
Дата: 02.03.07 06:30
Оценка:
Дорброго дня всем!

Задача следующая — есть 2 ComboBox (GridView, и т. п. — не важно).
Есть DataSet, в котором есть связанные таблицы (предположим, таблица Vendors и PriceTemplates, связанные по полю VendorFk в таблице PriceTempalte).
Есть 2 ComboBox, в первом из которых выбирается Vendor, во втором, соответсвтенно, PriceTemplate из всех, принадлежащих данному вендору.
Для этого есть следующий код:

 VendorComboBox.DataSource = Global.dataSet;
 VendorComboBox.DataMember = "Vendors";
 VendorComboBox.DisplayMember = "SmallName";
 VendorComboBox.ValueMember = "Vendor";
 VendorComboBox.DataBindings.Add("SelectedValue", Global.dataSet, "Vendors.Vendor"); //1

 PriceTemplateComboBox.DataSource = Global.dataSet;
 PriceTemplateComboBox.DataMember = "Vendors.FK_Vendors_VendorPrices";
 PriceTemplateComboBox.DisplayMember = "Name";
 PriceTemplateComboBox.ValueMember = "PriceTemplate";

где FK_Vendors_VendorPrices — связь между таблицами Vendors и VendorPrices соответственно.

Проблема: Binding не срабатывает. Во втором ComboBox всегда список из элементов, относящихся к первому вендору.
Как добиться рабчего состояния?

PS: на месте "//1" пытался использовать
VendorComboBox.DataBindings.Add("SelectedValue", Global.dataSet, "PriceTemplates.VendorFk");

что также не помогло.


05.03.07 14:56: Перенесено модератором из '.NET' — TK
Re: Используй component BindingSource
От: Oleksandr V. Krysan  
Дата: 02.03.07 12:47
Оценка:
Используй component BindingSource
Posted via RSDN NNTP Server 2.0
Re: надоевший Binding (Master - Detail)
От: _FRED_ Черногория
Дата: 02.03.07 16:38
Оценка:
Здравствуйте, DoMage, Вы писали:

DM>Задача следующая — есть 2 ComboBox (GridView, и т. п. — не важно).


Описывай всё-таки подробнее. Не ленись
Например, у комбобокса нет свойства DataMember
Help will always be given at Hogwarts to those who ask for it.
Re[2]: надоевший Binding (Master - Detail)
От: DoMage  
Дата: 05.03.07 06:27
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, DoMage, Вы писали:


DM>>Задача следующая — есть 2 ComboBox (GridView, и т. п. — не важно).


_FR>Описывай всё-таки подробнее. Не ленись

_FR>Например, у комбобокса нет свойства DataMember

Да, правда... Это модифицированный ComboBox (Janus Combo Box)...
Но и обычные комбобоксы никак не получается так связать...
Можно ли где-нибудь найти ксуочек кода такой связи?
Re[2]: Используй component BindingSource
От: DoMage  
Дата: 05.03.07 06:28
Оценка:
Здравствуйте, Oleksandr V. Krysan, Вы писали:

OVK>Используй component BindingSource


А каким образом?
Re[3]: Используй component BindingSource
От: Овощ http://www.google.com
Дата: 06.03.07 11:32
Оценка:
Здравствуйте, DoMage, Вы писали:

DM>Здравствуйте, Oleksandr V. Krysan, Вы писали:

OVK>>Используй component BindingSource
DM>А каким образом?

Значит есть экземпляр типизированного DataSet'а (dataSetMasterDetails) таблицами Master и Details, и relation'ом (с именем "FK_Master_Details") между ними.
Для отображения понадобятся два BindingSourc'а, которые настраиваются следующим образом:

        private void Form1_Load(object sender, EventArgs e)
        {
            LoadDataSet(dataSetMasterDetails);

            
            bindingSourceMaster.DataSource = dataSetMasterDetails;
            bindingSourceMaster.DataMember = "Master";

            bindingSourceDetails.DataSource = bindingSourceMaster;
            bindingSourceDetails.DataMember = "FK_Master_Details";
            

            // Наглядное отображение
            dataGridViewMaster.DataSource = bindingSourceMaster;
            dataGridViewDetails.DataSource = bindingSourceDetails;
            bindingNavigator1.BindingSource = bindingSourceMaster;
        }

Вот и все. Теперь при изменении выделенной строки в первом гриде, во втором автоматически будут отображаться дочерние строки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.