Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
Millership
3 / 3 / 2
Регистрация: 06.05.2013
Сообщений: 11
1

Вывод связанных таблиц в DataGridView

06.05.2013, 09:40. Просмотров 5451. Ответов 8
Метки нет (Все метки)

Здравствуйте.

Имеются три таблицы: Books (со столбцами ID, Name, Author, Genre), Authors (со столбцами ID, Name, Surname), Genres (со столбцами ID, Name). Таблица Books через внешний ключ Books.Authors - Authors.ID связана с таблицей Authors (соответственно через внешний ключ Books.Genres - Genres.ID с таблицей Genres).

В соответствии с данным примером пытаюсь вывести таблицы, описанные выше, на три DataGridView:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
string connectionString = @"Data Source=IT32;Initial Catalog=Test;Integrated Security=True";
SqlConnection con = new SqlConnection(connectionString);
 
DataSet data = new DataSet();
data.Locale = System.Globalization.CultureInfo.InvariantCulture;
 
SqlDataAdapter booksDA = new SqlDataAdapter("select * from Books", con);
booksDA.Fill(data, "Books");
 
SqlDataAdapter authorsDA = new SqlDataAdapter("select * from Authors", con);
authorsDA.Fill(data, "Authors");
 
SqlDataAdapter genresDA = new SqlDataAdapter("select * from Genres", con);
genresDA.Fill(data, "Genres");
 
DataRelation baDR = new DataRelation("BooksAuthors",
   data.Tables["Authors"].Columns["ID"],
   data.Tables["Books"].Columns["Author"]);
   data.Relations.Add(baDR);
 
DataRelation bgDR = new DataRelation("BooksGenres",
    data.Tables["Genres"].Columns["ID"],
    data.Tables["Books"].Columns["Genre"]);
data.Relations.Add(bgDR);
 
booksBS.DataSource = data;
booksBS.DataMember = "Books";
 
authorsBS.DataSource = booksBS;
authorsBS.DataMember = "BooksAuthors";
 
genresBS.DataSource = booksBS;
genresBS.DataMember = "BooksGenres";
На строке authorsBS.DataMember = "BooksAuthors"; компилятор выдает ошибку ArgumentException: Свойство 'BooksAuthors' для DataMember не найдено в DataSource.

В чем может быть проблема?

MS Visual Studio 2010, СУБД MS SQL Server 2012 Express.
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2013, 09:40
Ответы с готовыми решениями:

Вывод связанных таблиц в datagridview
Помогите, пожалуйста, мне вот в каком вопросе: На форме находится...

Вывод двух связанных таблиц в datagridview
Добрый день! нашел интересную ссылку про вывод связанных таблиц...

Вывод двух связанных таблиц данных в один Datagridview
Если можете подскажите, очень надо:wall: Есть в БД SQL связанные таблицы: 1....

Вывод двух связанных таблиц данных в два элемента DataGridView
Добрый день господа. Возникла маленькая проблема с программой при выводе...

Вывод двух связанных таблиц данных в один элемент DataGridView
Добрый день нашел интересную ссылку про вывод связанных таблиц...

8
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
08.05.2013, 14:08 2
причина в том, что вы таблицу-родителем назначаете не Books, а другую.
Так верно:

C#
1
2
3
4
5
6
7
8
9
DataRelation baDR = new DataRelation("BooksAuthors",
   data.Tables["Books"].Columns["Author"],
   data.Tables["Authors"].Columns["ID"]);
   data.Relations.Add(baDR);
 
DataRelation bgDR = new DataRelation("BooksGenres",
    data.Tables["Books"].Columns["Genre"],
    data.Tables["Genres"].Columns["ID"]);
data.Relations.Add(bgDR);
0
Millership
3 / 3 / 2
Регистрация: 06.05.2013
Сообщений: 11
13.05.2013, 10:10  [ТС] 3
Поменял, на строке
C#
1
data.Relations.Add(baDR);
получаю исключение ArgumentException: Невозможно включить это ограничение, т.к. не все значения имеют соответствующие родительские значения.
0
Millership
3 / 3 / 2
Регистрация: 06.05.2013
Сообщений: 11
21.05.2013, 10:02  [ТС] 4
Забыл упомянуть: DataGridView'шки находятся в UserControl'е. Я проверил - когда код находится в форме приложения Windows Forms, это исключение не выбрасывается. Но теперь при запуске в DataGridView'ах вообще никакие данные не отражаются. И как обойти исключение в UserControl'е?
0
Millership
3 / 3 / 2
Регистрация: 06.05.2013
Сообщений: 11
27.05.2013, 07:06  [ТС] 5
Господа, проблема актуальна.
0
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
27.05.2013, 11:36 6
Цитата Сообщение от Millership Посмотреть сообщение
Поменял, на строке
C#
1
data.Relations.Add(baDR);
получаю исключение ArgumentException: Невозможно включить это ограничение, т.к. не все значения имеют соответствующие родительские значения.

это означает, что есть такая книга в Books, значение Autors которой имеет значение, которого нет в таблице авторов. То есть необходимо или изменить ее автора на существующего, или добавть нового автора с необходимым номером. Советую сначала создать ключи в БД и потом уже использовать отношения в приложении
1
_IamAndreyka_
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 6
27.05.2013, 11:56 7
Исправьте на
C#
1
2
3
4
5
6
7
8
booksBS.DataSource = data.Tables["Books"];
booksBS.DataMember = "Books";
 
authorsBS.DataSource = data.Tables["Authors"];
authorsBS.DataMember = "BooksAuthors";
 
genresBS.DataSource = data.Tables["Genres"];
genresBS.DataMember = "BooksGenres";
0
Millership
3 / 3 / 2
Регистрация: 06.05.2013
Сообщений: 11
27.05.2013, 12:22  [ТС] 8
Learx, заново пересоздал таблицы со всеми ключами и заработало. Спасибо большое!
0
Dmi3i4
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 1
18.03.2016, 16:39 9
Доброго времени суток!
Ситуация подобная сабжу с небольшим отличием.
Третья таблица связана со второй, но никак не связана с первой
Таблцы и поля соответственно:
Parent
ID_prnt, Name, L_name, ID_chld
Children
ID_prnt, Name, DateBirth, ID_chld
Present
ID_chld, Price, Date
Связываю вторую таблицу с третьей через поле ID_chld

C#
1
2
3
4
5
6
7
DataRelation drChldId = new DataRelation("PresentInfo",
                ds.Tables["Children"].Columns["ID_chld"],
                ds.Tables["Present"].Columns["ID_chld"]);
            ds.Relations.Add(drChldId);
 
dataGridView3.DataSource = ds.DefaultViewManager;
            dataGridView3.DataMember = "Children.PresentInfo";
Третий грид отказывается изменять данные. Заполняется начальной позицией.
Подскажите как с этим бороться?
0
18.03.2016, 16:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2016, 16:39

Обновление связанных таблиц в DataGridView
Всем привет. Возник такой вопрос: как можно обновить связанную таблицу при...

Обновление связанных таблиц в datagridview
Есть кнопка на вывод информации: SqlConnection con; ...

Подстановка данных в DataGridView из связанных таблиц
Здравствуйте! Я новичек в C#. Интересует вопрос такой. Есть таблица tehnics с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru