Как связать 2 datagridview c
Допустим есть 2 таблицы которые отображаются в DataGridView (пусть Orders и Details). Как связать DataGridView так чтобы при выборе строки в Orders выводились Details для этого заказа? С обычным DataGrid получалось, а с datagridview не могу разобраться чего-то. Буду благодарен за помощь.
| От: | _FRED_ | @ViIvanov |
| Дата: | 27.02.06 15:53 | |
| Оценка: |
Здравствуйте, Evgeniy_L, Вы писали:
E_L>Допустим есть 2 таблицы которые отображаются в DataGridView (пусть Orders и Details). Как связать DataGridView так чтобы при выборе строки в Orders выводились Details для этого заказа? С обычным DataGrid получалось, а с datagridview не могу разобраться чего-то. Буду благодарен за помощь.
Смысл такой. У обоих гридов должен быть один и тот же DataSource, отличаться должны только DataMember и отличаться следуюжим образом: DataMember второго, details-грида, должен «добавлять» к DataMember первого («master») грида имя связи — DataRelation. Например, первый грид связан с датасетом:
Или вот так, если первый грид связан с таблицей:
| От: | Evgeniy_L |
| Дата: | 27.02.06 16:03 |
| Оценка: |
К сожалению не сработало. Хотя в DetailsGrid теперь вводятся данные, но они не изменяються при выборе разных значений в MasterGrid.
Пробовал еще через BindingSource, но с ним вообще не работает.
| От: | Evgeniy_L |
| Дата: | 27.02.06 16:06 |
| Оценка: |
| От: | _FRED_ | @ViIvanov |
| Дата: | 27.02.06 16:06 | |
| Оценка: |
Здравствуйте, Evgeniy_L, Вы писали:
E_L>К сожалению не сработало. Хотя в DetailsGrid теперь вводятся данные, но они не изменяються при выборе разных значений в MasterGrid.
E_L>Пробовал еще через BindingSource, но с ним вообще не работает.
Если код такой же, как и у меня, то должно работать. Перед отправкой я проверил. Ищи, в чём отличия между нашими вариантами. Например, оба грида на одной форме?
| От: | _FRED_ | @ViIvanov |
| Дата: | 27.02.06 16:09 | |
| Оценка: |
Здравствуйте, Evgeniy_L, Вы писали:
E_L>Пробовал еще через BindingSource, но с ним вообще не работает.
С BindingSource аккуратнее, например, посмотри как дизайнер по-умолчанию строит Details-грид (есть такая фича). Дело в том, что у BindingSource внутри свой собственный CurrencyManager.
| От: | Evgeniy_L |
| Дата: | 27.02.06 16:20 |
| Оценка: |
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Evgeniy_L, Вы писали:
E_L>>Пробовал еще через BindingSource, но с ним вообще не работает.
_FR>С BindingSource аккуратнее, например, посмотри как дизайнер по-умолчанию строит Details-грид (есть такая фича). Дело в том, что у BindingSource внутри свой собственный CurrencyManager.
Пошаговое руководство. Создание главного и подчиненного представлений данных с использованием двух элементов управления DataGridView в Windows Forms
Одним из наиболее распространенных сценариев использования элемента управления DataGridView является главное и подчиненное представления данных, в которых отображается связь «родитель-потомок» между двумя таблицами базы данных. Выбор строк в главной таблице приводит к обновлению таблицы сведений с учетом соответствующих дочерних данных.
Реализовать главное и подчиненное представления данных можно с легкостью с помощью взаимодействия между элементом управления DataGridView и компонентом BindingSource. В этом пошаговом руководстве вы создадите форму с помощью двух элементов управления DataGridView и двух компонентов BindingSource. В форме будут отображаться две связанные таблицы в образце базы данных Northwind SQL Server: Customers и Orders . По завершении у вас будет форма, где отображаются все клиенты в базе данных в главном представлении данных DataGridView и все заказы для выбранного клиента в подчиненном представлении данных DataGridView.
Предварительные требования
Для выполнения данного пошагового руководства требуется:
- доступ к серверу SQL Server с установленным образцом базы данных Northwind.
Создание формы
Создание главного и подчиненного представлений данных
Создайте класс, производный от Form и содержащий два элемента управления DataGridView и два компонента BindingSource. Следующий код обеспечивает базовую инициализацию формы и включает метод Main . Если для создания формы используется конструктор Visual Studio, можно использовать сгенерированный конструктором код вместо этого кода, но обязательно используйте имена, показанные в объявлениях переменных.
Реализуйте метод в определении класса формы для обработки сведений о подключении к базе данных. В этом примере используется метод GetData , который заполняет объект DataSet, добавляет объект DataRelation в набор данных и привязывает компоненты BindingSource. Убедитесь, что переменной connectionString присвоено значение, соответствующее базе данных.
Хранение конфиденциальных сведений (например, пароля) в строке подключения может повлиять на безопасность приложения. Использование проверки подлинности Windows (также называемой встроенными средствами безопасности) — более безопасный способ управления доступом к базе данных. Дополнительные сведения см. в разделе Защита сведений о подключении.
Реализуйте обработчик события формы Load, который привязывает элементы управления DataGridView к компонентам BindingSource и вызывает метод GetData . В следующем примере содержится код, который изменяет размер столбцов DataGridView в соответствии с отображаемыми данными.
Тестирование приложения
Теперь можно протестировать форму, чтобы убедиться, что она работает должным образом.
Проверка формы
Скомпилируйте и запустите приложение.
Вы увидите два элемента управления DataGridView, один над другим. Сверху находятся клиенты из таблицы Northwind Customers , а внизу — Orders , соответствующие выбранному клиенту. При выборе разных строк в верхнем компоненте DataGridView содержимое нижнего компонента DataGridView изменяется соответствующим образом.
Next Steps
Это приложение позволяет получить базовое представление о возможностях элемента управления DataGridView. Внешний вид и поведение элемента управления DataGridView можно настроить несколькими способами:
Проверьте входные данные пользователя для элемента управления DataGridView. Дополнительные сведения см. в статье Пошаговое руководство. Проверка данных элемента управления DataGridView в Windows Forms.
Обработка очень больших наборов данных с помощью виртуального режима. Дополнительные сведения см. в статье Пошаговое руководство. Реализация виртуального режима для элемента управления DataGridView в Windows Forms.
Как связать две таблицы с помощью DataGridViewComboBoxColumn?
У меня есть две таблицы Timetable и Services связанные по ID_Service. Timetable представлена как DataGrid. Мне нужно чтобы в Timetable появился новый столбец вида DataGridViewComboBoxColumn, который бы заполнялся значениями из столбца Name_service таблицы Services. Причем этот столбец должен согласовываться с ID_Service, т.е. в выпадающем комбобоксе я выбираю значение, и согласно этому значению в столбце ID_Service устанавливается айди. Я совсем новичок в этом, подскажите пожалуйста, как можно такое реализовать


Я сделал полный пример приложения. Его можно скопировать и запустить.
В примере два DataTable заполняются вручную прямо в коде. У вас они должны заполняться из БД.
Создаются два BindingSource . Каждый привязывается к своей таблице. Один из них привязывается к DataGridView , второй — к столбцу DataGridViewComboBoxColumn .
Остаётся лишь правильно задать свойства DataPropertyName , DisplayMember , ValueMember — именно они важны для работы кода.