Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/42: Рейтинг темы: голосов - 42, средняя оценка - 4.62
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122

Привязка данных в двух DataGridView

07.07.2009, 09:34. Показов 8117. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! У меня такой вот вопрос:
Есть 2 DataGridView.
В первый данные вносятся с помощью запроса типа:
SQL
1
SELECT id_marka, model, price FROM cars
Во второй запросом типа:
SQL
1
SELECT name FROM marka WHERE id_marka=<ид из первой таблицы>
Надо, чтобы при перемещении по строкам первого DataGridView, во втором данные менялись в зависимости...

Для простых LabelBox, TextBox и пр., используется BindingSource, а для DataGridView?

Если есть простой пример у кого, скиньте плиз...
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.07.2009, 09:34
Ответы с готовыми решениями:

Привязка данных в двух DataGridView
Существует две формы Download и Main. На первой форме мы загружает две таблицы(Оформление и Работа) из базы данных в Baza1DataSet.Затем...

Привязка данных к DataGridView
Здравствуйте. Есть DataGridView, есть DataSet, полученный из &quot;Источники данных&quot;. В DataSet, например, есть две таблицы: Должности и...

Удобная привязка данных в DataGridView
Всем привет! Хотел спросить такой вот вопрос. Дело в том,что очень часто мне приходится разрабатывать програмки примерно такого типа:...

26
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
07.07.2009, 10:19
Лучший ответ Сообщение было отмечено как решение

Решение

Надо создавать связь между таблицами в DataSet
C#
1
2
3
 DataRelation dr = new DataRelation("ProductsTask", dsTask.Tables["Products"].Columns["IDProduct"],
                dsTask.Tables["Tasks"].Columns["IDProduct"]);
            dsTask.Relations.Add(dr);
и далее назначить источники данных
C#
1
2
3
4
5
6
7
8
9
10
11
12
 taskAdapt = new OleDbDataAdapter("SELECT * FROM Tasks", oleCon);
            prodAdapt = new OleDbDataAdapter("SELECT * FROM Products", oleCon);
            taskBuild = new OleDbCommandBuilder(taskAdapt);
            prodBuild = new OleDbCommandBuilder(prodAdapt);
            taskAdapt.Fill(dsTask, "Tasks");
            prodAdapt.Fill(dsTask, "Products");
            BuildRelationship();
            dtGridProducts.DataSource = dsTask;
            dtGridProducts.DataMember = "Products";
            tsBinding.DataSource = dsTask;
            dtGridTasks.DataSource = dsTask;
           dtGridTasks.DataMember = "Products.ProductsTask";
3
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
07.07.2009, 13:05  [ТС]
Отлично, спасибо! Разобрался тут. Теперь другая проблема появилась.

Как мне теперь созданную связь привязать, например к TextBox

У TextBox нету свойства DataSource.
0
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
07.07.2009, 21:51
Да но зато есть свойство DataBindings вот можно сделать так
C#
1
2
3
4
5
6
7
8
9
10
OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = conn;
myCommand.CommandText = commandText;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.SelectCommand = myCommand;
DataSet ds = new DataSet();
dataAdapter.TableMappings.Add("Table", "Поставщики");
dataAdapter.Fill(ds);
Далее связываем с текстбоксами
C#
1
2
3
txtID.DataBindings.Add("Text", ds, "Поставщики.Кодпоставщика");
txtPhone.DataBindings.Add("Text", ds, "Поставщики.Поставщик");
txtProvider.DataBindings.Add("Text", ds, "Поставщики.Телефон");
Пример учебный Вам надо разобраться с этим свойством DataBindings
2
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
10.07.2009, 11:16  [ТС]
Ты меня немного не понял.

Проблема не в том, чтобы связать простые данные с ТекстБоксом. Вот что я делаю:


C#
1
2
3
4
5
6
7
8
9
MySqlDataAdapter grupAdapt = new MySqlDataAdapter("SELECT * FROM grup", conn);
MySqlDataAdapter studAdapt = new MySqlDataAdapter("SELECT * FROM stud", conn);
MySqlDataAdapter commAdapt = new MySqlDataAdapter("SELECT * FROM comment", conn);
MySqlCommandBuilder grupBuild = new MySqlCommandBuilder(grupAdapt);
MySqlCommandBuilder studBuild = new MySqlCommandBuilder(studAdapt);
MySqlCommandBuilder commBuild = new MySqlCommandBuilder(commAdapt);
grupAdapt.Fill(ds, "grup");
studAdapt.Fill(ds, "stud");
commAdapt.Fill(ds, "comment");
Далее создаю связь:
C#
1
2
3
DataRelation dr = new DataRelation("GrupStud", ds.Tables["grup"].Columns["id_grup"],
                ds.Tables["stud"].Columns["id_grup"]);
ds.Relations.Add(dr);
Группы - в первый DataGridView, студентов - во второй:

C#
1
2
3
4
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "grup"; 
dataGridView2.DataSource = ds;
dataGridView2.DataMember = "grup.GrupStud";
Теперь надо, чтобы в TexnBox-e была информация из третьей таблицы: comment. Если бы я хотел отображать эту информацию в DataGridView, я бы создал связь:
C#
1
2
3
DataRelation drr = new DataRelation("StudComment",ds.Tables["comment"].Columns["id_c"],
                ds.Tables["stud"].Columns["id_c"]);
ds.Relations.Add(drr);
Но мне надо информацию из этой связи (точнее 1 столбец: comment), отображать в TextBox)

Более того, надо, чтобы при перемещении по DataGridView (у которого DataMember = "grup.GrupStud", т.е. связь), менялись данные в TextBox, в котором информация из третьей таблицы...

В общих чертах...
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
13.07.2009, 07:16
Цитата Сообщение от davian Посмотреть сообщение
Теперь надо, чтобы в TexnBox-e была информация из третьей таблицы: comment. Если бы я хотел отображать эту информацию в DataGridView, я бы создал связь:
Вот и нужно создать связь. И затем забиндить на нее. Т.к. TextBox не может отображать наборы данных, то ему нужен переход в конечное свойство.
Code
1
textBox1.DataBindings.Add("Text", ds, "stud.StudComment.id_c");
1
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
13.07.2009, 10:20
Green прав так и надо делать. Я же Вам написал что пример учебный надо разбираться со свойством DataBindings.
Будут еще вопросы справшивайте.
1
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
13.07.2009, 13:55  [ТС]
Цитата Сообщение от Green Посмотреть сообщение
Вот и нужно создать связь. И затем забиндить на нее. Т.к. TextBox не может отображать наборы данных, то ему нужен переход в конечное свойство.
Code
1
textBox1.DataBindings.Add("Text", ds, "stud.StudComment.id_c");

Хорошо. Отображает id_c из связанной таблицы... Но.... только для самой первой записи. Надо обеспечить обновление TextBox при перемещении по DataGridView... Причем необходимо, чтобы данные динамически менялись во всех трех объектах:

Список групп (DataGridView1) -> Список студентов в группе (DataGridView2) -> Комментарии к каждому студенту (TextBox)
0
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
13.07.2009, 15:24
davian а Вам обязательно надо делать привязку данный можете просто выбирать нужного студента из таблице по его ID и в текстбокс вставлять нужные данные.
1
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
13.07.2009, 15:28  [ТС]
Цитата Сообщение от Sergei Посмотреть сообщение
davian а Вам обязательно надо делать привязку данный можете просто выбирать нужного студента из таблице по его ID и в текстбокс вставлять нужные данные.
Это хорошее простое решение, но мне интересен этот вопрос в принципе... Если есть ответ, то хотелось бы его знать...
0
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
13.07.2009, 15:32
Вот посмотрите в приложенных файлах там есть немного теории.
Вложения
Тип файла: rar DB.rar (93.8 Кб, 74 просмотров)
1
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
13.07.2009, 15:55  [ТС]
Огромное спасибо за все ответы. Вы мне очень помогли. С теорией мне действительно стоит немного четче разобраться. Обязательно изучу предложенный вами, Sergei, материал.
1
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
13.07.2009, 16:02
Да конечно рассмотрите для начала простые примеры что бы понять принцип, а потом примените к своему приложению. Будут вопросы спрашивайте.
1
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
14.07.2009, 02:13
Цитата Сообщение от davian Посмотреть сообщение
Хорошо. Отображает id_c из связанной таблицы... Но.... только для самой первой записи. Надо обеспечить обновление TextBox при перемещении по DataGridView... Причем необходимо, чтобы данные динамически менялись во всех трех объектах:

Список групп (DataGridView1) -> Список студентов в группе (DataGridView2) -> Комментарии к каждому студенту (TextBox)
Для этого необходимо использовать BindingSource. К BindingSource привязываете данные, т.е. DataSet, DataTable, DataColumn. Затем контролам назначаете эти BindingSource.
Берете первый BindingSource (BS) к нему привязываете список групп, затем берете второй BS и привязываете его к первому (т.е. указываете в DataSource), а в DataMember у этого второго BS указываете связь со списком студентов. Берете третий BS и привязываете его ко второму, аналогично, в DataMember указываете связь от студента к комментам. Затем все BS указываете контролам.

Из книг советую прочитать "Brian Noyes. Data Binding with Windows Forms 2.0: Programming Smart Client Data Applications with .NET".
1
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
14.07.2009, 10:28  [ТС]
Предложенное вами, Green, решение, я реализовал так:

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
34
35
36
DataSet ds = new DataSet();
 
MySqlDataAdapter grupAdapt = new MySqlDataAdapter("SELECT * FROM grup", conn);
MySqlDataAdapter studAdapt = new MySqlDataAdapter("SELECT * FROM stud", conn);
MySqlDataAdapter commAdapt = new MySqlDataAdapter("SELECT * FROM comment", conn);
MySqlCommandBuilder grupBuild = new MySqlCommandBuilder(grupAdapt);
MySqlCommandBuilder studBuild = new MySqlCommandBuilder(studAdapt);
MySqlCommandBuilder commBuild = new MySqlCommandBuilder(commAdapt);
 
grupAdapt.Fill(ds, "grup");
studAdapt.Fill(ds, "stud");
commAdapt.Fill(ds, "comment");
 
DataRelation dr = new DataRelation("GrupStud", ds.Tables["grup"].Columns["id_grup"],
                ds.Tables["stud"].Columns["id_grup"]);
ds.Relations.Add(dr);
DataRelation drr = new DataRelation("StudComment",ds.Tables["stud"].Columns["id_c"],
                ds.Tables["comment"].Columns["id_c"],false);
ds.Relations.Add(drr);
 
BindGrup = new BindingSource();
BindGrup.DataSource = ds;
BindGrup.DataMember = "grup";
BindStud = new BindingSource();
BindStud.DataSource = BindGrup;
BindStud.DataMember = "grup.GrupStud";
BindComment = new BindingSource();
BindComment.DataSource = BindStud;
BindComment.DataSource = "stud.StudComment";
 
dataGridView1.DataSource = BindGrup;
dataGridView1.DataMember = "grup"; 
dataGridView2.DataSource = BindStud;
dataGridView2.DataMember = "grup.GrupStud";
 
textBox2.DataBindings.Add("Text", BindComment, "stud.StudComment.comment");
На 27 строке возникает исключение "Свойство 'grup.GrupStud' для DataMember не найдено в DataSource". Что я не правильно сделал?
1
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
15.07.2009, 03:22
Code
1
2
BindStud.DataSource = BindGrup;
BindStud.DataMember = "GrupStud";
1
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
15.07.2009, 08:22  [ТС]
Огромное спасибо за ответы!!!

Цитата Сообщение от Green Посмотреть сообщение
Из книг советую прочитать "Brian Noyes. Data Binding with Windows Forms 2.0: Programming Smart Client Data Applications with .NET".
Нет этой книги на русском? Или какой-нибудь подобной, только на русском...
0
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 3
15.07.2009, 15:43
Спасибо за примеры
0
 Аватар для Лакшми
61 / 50 / 1
Регистрация: 09.07.2009
Сообщений: 451
05.08.2009, 13:15
Цитата Сообщение от Sergei Посмотреть сообщение
C#
1
2
3
txtID.DataBindings.Add("Text", ds, "Поставщики.Кодпоставщика");
txtPhone.DataBindings.Add("Text", ds, "Поставщики.Поставщик");
txtProvider.DataBindings.Add("Text", ds, "Поставщики.Телефон");
У меня попутно вопрос. Если у меня имя поля составное, то оно не воспринимается. Например, пишу так:

C#
1
txtID.DataBindings.Add("Text", ds, "Поставщики.[Код поставщика]");
вылетает ошибка. Как быть?

Заранее благодарю за ответы!
0
Комбайнёр
 Аватар для MAcK
1606 / 704 / 77
Регистрация: 27.05.2008
Сообщений: 2,535
05.08.2009, 13:21
Что за ошибка, правильно ли написали имя поля?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.08.2009, 13:21
Помогаю со студенческими работами здесь

Привязка данных к DataGridView на связном уровне
Как в результате многотабличного запроса привязать данные к DataGridView без использования DataSet и DataAdapter? Не получается получить...

Привязка данных к уже созданным столбцам DataGridView
у меня вопрос: если я создам в dgv столбцы вручную, пропишу их свойства в правке столбцов, сделаю 1 столбец скрытым и т.д., напишу sql...

DataGridView - привязка свойств строки к источнику данных
Подскажите, пожалуйста, возможно ли осуществить привязку свойств строки(к примеру ReadOnly) к полю в источнике данных с помощью механизма...

Привязка данных к элементу управления DataGridView в Windows Forms
Здравствуйте, есть форма с двумя DataGridView. Сделал по этому примеру: http://msdn.microsoft.com/ru-ru/library/fbk67b6z.aspx , но там...

DataGridView и привязка данных
Привет, форумчане. Вопрос такой: есть элемент управления, к которому привязаны данные из dataSet. То есть, в контроле отображается вся...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 31.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 30.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru