Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
1

Связать два datagridview (один ко многим) с разными таблицами в разных dataset

26.02.2020, 19:49. Показов 2839. Ответов 10

Author24 — интернет-сервис помощи студентам
Привет!
Подскажите пожалуйста по немного нестандартной ситуации.

У меня создан один класс, который полностью накладывает на datagridview все основные действия по выборке и зименению данных.
В рамках данного экземпляра класса формируется dataset1 к примеру для одной таблицы table1 в рамках datagridview1
Я разместил на форме второй datagridview
В рамках данного экземпляра класса формируется dataset2 к примеру для одной таблицы table2в рамках datagridview2

У каждого класса написал метод вывода dataset при необходимости:
C#
1
2
3
4
5
6
7
....
dataGridSalesCrud.fillDataGridView(dataGridViewSales,"t_sales","sale_id");
dataGridManagersCrud.fillDataGridView(dataGridViewManagers, "t_managers", "manager_id");
 
          DataSet salesDS =  dataGridSalesCrud.getGridDataset(); // dataset главной таблицы t_sales
          DataSet managersDS = dataGridManagersCrud.getGridDataset(); // dataset подчиненной таблицы  t_managers
.....
То есть в принципе для каждого экземпляра грида я могу получить свой экземпляр dataset.

А как их дальше связать в коде (напоминаю - это разные dataset с разными наборами данных/таблицами) чтобы на форме заработало отношение master - detail при выборке строки "главного" datagridview dataGridViewSales?

Может сделать dataset типа static? чтобы в него подгружались наборы сразу из нескольких таблиц и хранились там?
Но это отношение нужно мне только на одной форме, на остальных не нужно.

Подскажите пожалуйста, как в разных dataset указать /связать по общему ключу данные? В обеих есть общее поле для связывания (к примеру sale_id)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2020, 19:49
Ответы с готовыми решениями:

Определить тип связи между таблицами. Связь много-ко-многим или один-ко-многим?
Какой тип связи между таблица match и hero, match и team? Склоняюсь к варианту много-ко-многим...

Организовать связь один-ко-многим между таблицами
У меня есть три таблицы. Как правильно организовать связь один ко многим между ними? Правильно ли...

Entity Framework. Связь между таблицами один ко многим
Здравствуйте. Столкнулся с такой проблемой - у меня есть таблицы Тестов и Вопросов (к тестам),...

Как сделать,чтобы например код сотрудника связать связью один ко многим
Как сделать один ко многим счётчик в одной таблице и текстовый в другой, чтобы выводилось так :...

10
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
26.02.2020, 21:37 2
Лучший ответ Сообщение было отмечено Даценд как решение

Решение

Сергей1980, есть стандартное решение для отображения связанных данных в 2-х гридах.
https://docs.microsoft.com/en-... agridviews
2
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
26.02.2020, 23:52  [ТС] 3
Да,спасибо, я конечно видел этот пример,в частности:


C#
1
2
3
4
5
// Establish a relationship between the two tables.
            DataRelation relation = new DataRelation("CustomersOrders",
                data.Tables["Customers"].Columns["CustomerID"],
                data.Tables["Orders"].Columns["CustomerID"]);
            data.Relations.Add(relation);
Но у меня оно не будет работать ,потому что у меня

C#
1
2
3
4
 data1.Tables["Customers"].Columns["CustomerID"],
                data2.Tables["Orders"].Columns["CustomerID"]);
 
 data???.Relations.Add(relation);
- нет общего датасета, как я и говорил ранее, для каждого грида генерируется свой датасет, не общий.

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

Добавлено через 45 минут
Все завелось, пришлось dataset выносить как статическую переменную на уровень поля универсального класса.
0
1517 / 908 / 328
Регистрация: 17.05.2015
Сообщений: 3,430
27.02.2020, 10:13 4
Сергей1980, зачем работать с dataset если можно напрямую с бд?
1
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
27.02.2020, 11:08  [ТС] 5
Имеете в виду через Ole ?
У меня не ms sql , а mysql )
0
1517 / 908 / 328
Регистрация: 17.05.2015
Сообщений: 3,430
27.02.2020, 11:30 6
Сергей1980, да хоть аксесс, работайте с бд, это быстрее и удобнее чем с датасетом
0
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
27.02.2020, 11:44  [ТС] 7
Я пробовал подключаться через классический mysql odbc driver/connector net for visual studio. Используя стандартные возможности адаптера, предоставляющие в конструкторе сразу визуально помещать к примеру на форму визуальные объекты типа mysqldataadapter, dataset, datatable. Поигрался с ними и решил все взаимодействие с бд оформить вообще в коде, работая исключительно со свойствами и методами библиотеки mySqlData.
А какие ещё варианты есть взаимодействия с mysql server в c# ?
Слышал и читал про библиотеку linq. Под мускул она вроде тоже имеется. Какие вообще варианты подключения предпочтительны в разрезе двухзвенки c#- mysql?

Добавлено через 4 минуты
Рядовой, так я и так работаю с бд , через mysqldata напрямую . Где та грань выпрямления, про которую вы говорите ?))
0
1517 / 908 / 328
Регистрация: 17.05.2015
Сообщений: 3,430
27.02.2020, 12:05 8
Сергей1980, вот документация
https://dev.mysql.com/doc/conn... mmand.html
вам нужны классы MySqlDataReader и MySqlCommand.
Делаете запрос - получаете данные - выводите.
Изменили данные - делаете запрос на обновление данных и получаете свежие.
Но данные не должны храниться в датасетах. Они должны быть в базе. И браться из базы.
Цитата Сообщение от Сергей1980 Посмотреть сообщение
Используя стандартные возможности адаптера, предоставляющие в конструкторе сразу визуально помещать к примеру на форму визуальные объекты типа mysqldataadapter, dataset, datatable.
это все программирование мышкой - для студентов. Нормальное приложение на этом не сделаешь.
0
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
27.02.2020, 12:29  [ТС] 9
Я не программирую мышкой ) и использую в проекте и mysqlCommand и MysqlDataReader , для автоматической обработки crud. И датасет у меня binded (да, такое можно). Чем вам такой датасет не угодил?)

Добавлено через 15 минут
mysqlCommand и MysqlDataReader как раз и входит в ту библиотеку , с которой я работаю, и ссылку на которую вы мне прислали зачем то) По датасету так и не понял подгон с вашей стороны. ) Он ведь разный может быть. Отвязанный ,который тащит все данные на себя, и связанный ,который просто ссылается на источник . Второй и использую. Колитесь, что плохого в датасете, и меня просветите и всех остальных форумчан .
0
1517 / 908 / 328
Регистрация: 17.05.2015
Сообщений: 3,430
27.02.2020, 12:49 10
Сергей1980, да ничего плохого в нем нет, кроме того что он, собственно, не нужен.
Это просто кэш данных из бд, и работать с ним без особой необходимости нет смысла. Как и вас уговаривать.
0
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
27.02.2020, 13:01  [ТС] 11
Рядовой, я понимаю о чем вы говорите. Ну тут дело вкуса) Кэш ведь управляемый в C#. И это круто. Благодаря ему в общем то мы получаем бонус в виде виртуализации из коробки. Что у меня бы на Java потребовало бы написания отдельного класса с данными как в таблице, загона в коллекцию/лист, потом отрисовке данных коллекции в гриде, в C# решается стоковым кэшированием. Я просто не могу пройти мимо такого подарка от VS и MS )
0
27.02.2020, 13:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2020, 13:01
Помогаю со студенческими работами здесь

Не могу связать два файла, используемых разными def
Здраствуйте , я знаю , что это очень глупо спрашивать , можно ли как то связать файл в первом def с...

Создать базу данных с таблицами «Врачи» и «Пациенты» Создать межтабличную связь типа «один-ко-многим»
Ребята запутался в задании, помогите разобраться. Задание Создать базу данных с таблицами «Врачи»...

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

Как сопоставить два файла по ID (один ко многим)
Здравствуйте, уважаемые знатоки! Редко работаю с Excel'ем и обработка больших данных всегда...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru