2009-09-02 1 views
0

В двух словах: у меня есть DataSet с несколькими DataTables внутри, которые связаны через несколько DataRelations. Я создал форму, использующую привязку данных в этом DataSet, и вы могли бы сказать, что это довольно сложно.Сопоставление данных, набор данных с данными и обновление одного DataTable из базы данных

Сценарии следующие: основная цель формы - вставка новой записи. Чтобы он был вставлен, необходимо установить различные отношения родитель-ребенок. Все работает отлично с привязкой данных, но проблема следующая: когда пользователь хочет ввести нового «ребенка» для одного из этих отношений родитель-ребенок, открывается новая форма, он вводит его, yada yada yada, - и это работает. Проблема заключается в том, как я должен вернуть эти новые данные в исходную форму, чтобы они отображались в родительском-дочернем поле со списком?

Один из способов, которым я знаю, - это обновить всю форму; но я ищу решение для обновления только DataTable, содержащего эти данные. Я попытался получить новый DataTable со свежими данными из БД, и слияние его с DataTable в DataSet, но это не работает: «Ребенок строка имеет несколько родителей» исключение:

// basically just a Select * using dataadapter, 
// nothing programmatically added 
DataTable table = tableModule.GetPlainTable(); 
existingDataSet.Tables["tableName"].Merge(table); 

Эквивалент пример того, что я пытаюсь сделать, - это иметь форму заказа, с помощью команды «Комбобокс клиента». Справа от выпадающего списка появляется кнопка «Добавить», которая открывает новую форму «Добавить клиента». Просто, чтобы упомянуть (возможно, это актуально), внутри БД таблица «Клиенты» относится к таблице «Города», и эти данные также связаны в форме данных в форме заказов ...

EDIT: одно решение, о котором я могу думать, это «вручную» цикл во всем новом DataTable и найти все строки, которые не находятся в исходном DataTable внутри DataSet, но я не уверен, что это сработает либо ...

Любая помощь/предложение/объяснение/толчок в правильном направлении было бы очень полезно :)

ответ

0

Ну, я как-то решил проблему с ручной копией строки при вставке во вторую форму ... Я создал событие с коллекцией объектов (строка массив элементов) и в первой форме зарегистрирован обработчик на это событие, в котором я вручную добавить новую строку с помощью:

data.Tables["tableName"].Rows.Add(e.RowItems); 

, после которого я называю AcceptChanges() на этой строке, чтобы сделать его состояние без изменений, а не добавлено ...

Это решение, хотя и быстро и грязно, работает. Проблема в том, что я думаю, что есть лучшая, более «привязывающая» философия, ориентированная одна ...: =)