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

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

26.02.2020, 19:49. Показов 2950. Ответов 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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
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
 Аватар для Сергей1980
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
 Аватар для Рядовой
1519 / 909 / 329
Регистрация: 17.05.2015
Сообщений: 3,435
27.02.2020, 10:13 4
Сергей1980, зачем работать с dataset если можно напрямую с бд?
1
 Аватар для Сергей1980
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
27.02.2020, 11:08  [ТС] 5
Имеете в виду через Ole ?
У меня не ms sql , а mysql )
0
 Аватар для Рядовой
1519 / 909 / 329
Регистрация: 17.05.2015
Сообщений: 3,435
27.02.2020, 11:30 6
Сергей1980, да хоть аксесс, работайте с бд, это быстрее и удобнее чем с датасетом
0
 Аватар для Сергей1980
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
 Аватар для Рядовой
1519 / 909 / 329
Регистрация: 17.05.2015
Сообщений: 3,435
27.02.2020, 12:05 8
Сергей1980, вот документация
https://dev.mysql.com/doc/conn... mmand.html
вам нужны классы MySqlDataReader и MySqlCommand.
Делаете запрос - получаете данные - выводите.
Изменили данные - делаете запрос на обновление данных и получаете свежие.
Но данные не должны храниться в датасетах. Они должны быть в базе. И браться из базы.
Цитата Сообщение от Сергей1980 Посмотреть сообщение
Используя стандартные возможности адаптера, предоставляющие в конструкторе сразу визуально помещать к примеру на форму визуальные объекты типа mysqldataadapter, dataset, datatable.
это все программирование мышкой - для студентов. Нормальное приложение на этом не сделаешь.
0
 Аватар для Сергей1980
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
27.02.2020, 12:29  [ТС] 9
Я не программирую мышкой ) и использую в проекте и mysqlCommand и MysqlDataReader , для автоматической обработки crud. И датасет у меня binded (да, такое можно). Чем вам такой датасет не угодил?)

Добавлено через 15 минут
mysqlCommand и MysqlDataReader как раз и входит в ту библиотеку , с которой я работаю, и ссылку на которую вы мне прислали зачем то) По датасету так и не понял подгон с вашей стороны. ) Он ведь разный может быть. Отвязанный ,который тащит все данные на себя, и связанный ,который просто ссылается на источник . Второй и использую. Колитесь, что плохого в датасете, и меня просветите и всех остальных форумчан .
0
 Аватар для Рядовой
1519 / 909 / 329
Регистрация: 17.05.2015
Сообщений: 3,435
27.02.2020, 12:49 10
Сергей1980, да ничего плохого в нем нет, кроме того что он, собственно, не нужен.
Это просто кэш данных из бд, и работать с ним без особой необходимости нет смысла. Как и вас уговаривать.
0
 Аватар для Сергей1980
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
27.02.2020, 13:01  [ТС] 11
Рядовой, я понимаю о чем вы говорите. Ну тут дело вкуса) Кэш ведь управляемый в C#. И это круто. Благодаря ему в общем то мы получаем бонус в виде виртуализации из коробки. Что у меня бы на Java потребовало бы написания отдельного класса с данными как в таблице, загона в коллекцию/лист, потом отрисовке данных коллекции в гриде, в C# решается стоковым кэшированием. Я просто не могу пройти мимо такого подарка от VS и MS )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.02.2020, 13:01
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Исследование байт-кода Python: подключаем дизассемблер
stackOverflow 19.02.2025
Многие знают, что Python - интерпретируемый язык, но мало кто задумывается о том, что происходит между написанием кода и его выполнением. На самом деле Python использует промежуточное представление. . .
Исследование байт-кода Python: компиляторы против интерпретаторов
stackOverflow 19.02.2025
Понимание байт-кода Python - основополагающий аспект для разработчиков, стремящихся глубже понять внутренние механизмы языка и оптимизировать производительность своих программ. Байт-код представляет. . .
Comprehensions в Python - что это такое?
stackOverflow 19.02.2025
Когда речь заходит о Python, одной из его самых красивых и мощных возможностей являются списковые включения или comprehensions. Это особые синтаксические конструкции, позволяющие создавать новые. . .
Python правда такой медленный? Развенчиваем миф о медлительности
stackOverflow 19.02.2025
Когда речь заходит о выборе языка программирования для нового проекта, вопрос производительности часто становится одним из ключевых факторов. Python, несмотря на свою популярность и простоту. . .
Динамические формы в Flask
stackOverflow 19.02.2025
Работа с веб-формами часто требует гибкости в отношении количества полей, которые пользователь может заполнить. Представьте ситуацию, когда вам нужно создать форму для ввода контактных данных, где у. . .
Обнаружение объектов в реальном времени на Raspberry Pi с OpenCV и Movidius NCS
stackOverflow 19.02.2025
Технология обнаружения объектов в реальном времени становится все более востребованной в различных областях - от систем безопасности до автономных транспортных средств. Особый интерес представляет. . .
где chromium хранит пароли и как их обнулить в пожарном варианте
jigi33 19.02.2025
Where is the chromium browser stores passwords for a sites где chromium-подобный браузер хранит пароли и как их обнулить в пожарном варианте (see screenshot)
howto get access to external internet resources with kinit
jigi33 19.02.2025
Решение проблемы с необходимостью доп. авторизации по Керберос для автоотработки аутентификации на прокси-сервер (see screenshot)
Отслеживание автомобилей и определение скорости с OpenCV и Python на Raspberry Pi
stackOverflow 19.02.2025
В этой статье мы рассмотрим создание системы отслеживания транспортных средств и определения их скорости с использованием компьютерного зрения и библиотеки OpenCV. Наше решение основано на принципе. . .
ENV (environments) valid paths in linux
jigi33 19.02.2025
Environments paths (see screenshot)
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru