DB: столбцы подстановок в DataSet
От: Павел А.Ануфриков Россия  
Дата: 30.10.10 18:22
Оценка:
Коллеги, подскажите, пожалуйста.
Вопрос по работе с БД. Использую DataSet. Есть три таблицы: "люди", "группы", и связующая таблица "многие ко многим", обозначающая принадлежность людей группе. На форме находятся три DataGridView для каждой таблицы соответственно.

Нужно отобразить таблицу связи не по ID, а сделать подстановку имен, кроме этого взять из основных таблиц дополнительные поля, телефон, например. Сейчас заполняю DataTable связующей таблицы своим SELECT, который получает как столбцы имён, так и телефонов.

Всё хорошо, но при изменении имён в основных таблицах, в таблицу связи они не попадают по понятным причинам.

Нашел единственный способ — для каждого столбца-подстановки сделать тип ComboBox, и значения задать через него. Почему-то мне кажется, что это корявое решение, и я вообще чего-то не понял.

Подскажите, плизз.
Re: DB: столбцы подстановок в DataSet
От: Poul_Ko Казахстан  
Дата: 01.11.10 03:14
Оценка: 3 (1)
Здравствуйте, Павел А.Ануфриков, Вы писали:

ПАА>Коллеги, подскажите, пожалуйста.

ПАА>Вопрос по работе с БД. Использую DataSet. Есть три таблицы: "люди", "группы", и связующая таблица "многие ко многим", обозначающая принадлежность людей группе. На форме находятся три DataGridView для каждой таблицы соответственно.

ПАА>Нужно отобразить таблицу связи не по ID, а сделать подстановку имен, кроме этого взять из основных таблиц дополнительные поля, телефон, например. Сейчас заполняю DataTable связующей таблицы своим SELECT, который получает как столбцы имён, так и телефонов.


Кратко: добавляем в DataSet связи, делаем вычисляемые поля.

Шаг первый. В DataSet делаете связи между таблицами. Например:
DataTable persons = ...;  // Таблица людей
DataTable rel = ...;      // Связующая таблица

dataSet.Relations.Add(
    "RelToPerson",            // Название связи
    persons.Columns["Id"],    // Поле - первичный ключ
    rel.Columns["PersonId"])  // Поле - внешний ключ


Шаг второй. В связующую таблицу добавляете вычисляемые поля. Например:
rel.Columns.Add(
    "PersonFIO",                    // Название вычисляемого поля
    typeof(String),                 // Тип
    "Parent(RelToPerson).FIO");     // Берём значение поля FIO у родительской записи по связи RelToPerson


Теперь в гриде помимо (или вместо) PersonId можно показывать PersonFIO.
Brainbench transcript #6370594
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.