Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связанные таблицы в DataGridView'ерах, Как реализовать связь двух таблиц? 
:(
    Опции темы
RUMBok
Дата 13.10.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.10.2007

Репутация: нет
Всего: нет



Следующий вопрос:
Есть две таблицы - "Клиенты" (перв. ключ - "Код") и "Договора" (перв. ключ - "Код", род. ключ "Код клиента").
Связь   -   Клиенты.Код = Договора.Код клиента
Приложение MDI, таблицы отображаются каждая в своем дочернем окне в DataGridView'ах, через свои BindingSource и TableAdapter.
Информация берется из MainDataSet со всей БД внутри.

Вопросы:
Как реализовать, чтобы при выборе клиента в окне договоров отображались только связанные с ним?
Как при этом надо настроить связи в DataSet'е?
Если так неправильно организовывать показ данных - как это сделать верно?

В принципе буду рад любому работающему примеру. Заранее спасибо
PM MAIL   Вверх
thomas
Дата 14.10.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



RUMBok
приветствую на форуме. велком. smile 
Раз работаешь в дизайнере, то вот эти видео уроки помогут решить твои проблемы.
Даже если пишешь на C# не беда, дизайнер в студии один. А конкретно по сабжу мне думается вот этот урок  будет в самый раз.
Удачи.


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
RUMBok
Дата 15.10.2007, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.10.2007

Репутация: нет
Всего: нет



Спасибо за ссылку.
Но все же, как реализовать связь данных именно в двух разных окнах?
Или только вручную?
PM MAIL   Вверх
tol05
Дата 15.10.2007, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 11
Всего: 170



RUMBok, используй класс DataRelation и свойство DataSet.Relations. 
Если я правильно понял, то
Код

DataRelation dr = new DataRelation("MyRelation", MainDataSet.Tables["Клиенты"].Columns["Код"], MainDataSet.Tables["Договора"].Columns["Код клиента"]);
MainDataSet.Relations.Add(dr);
//биндинг данных к контролам

Думаю, в msdn ты найдешь примеры.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
RUMBok
Дата 15.10.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 13.10.2007

Репутация: нет
Всего: нет



Спасибо за ответы. В принципе немного разобрался что и как.

Но теперь трансформировался вопрос.
Есть главная форма с объектом MainDataSet класса MainDataSet. Есть дочерние (в дизайнере сделанные) Clients и Dogovors. 
Когда в дизайнере делаешь DataGridView в дочерних формулах, для них создаются свои объекты класса MainDataSet, но надо чтобы использовался объект родительской формы. 
Если в коде прописывать, что их MainDataSet'ы - это родительский объект - работает как надо, НО не работает дизайнер для этих форм

Вопрос: можно ли как-нибудь научить дизайнер использовать объект класса MainDataSet родительской формы, а не создавать свой?

PM MAIL   Вверх
thomas
Дата 15.10.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



RUMBok
Здается мне, что вот это
Цитата

Когда в дизайнере делаешь DataGridView в дочерних формулах, для них создаются свои объекты класса MainDataSet, но надо чтобы использовался объект родительской формы. 

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

И у меня вопрос, а что это за изврат такой, зачем отображать клиентов в одном окне, а их договора в другом. Когда при использовании дизайнера "мелкомягкие" учат создвать дата сет с двумя таблицами, а потом данные из одной таблицы выводит на форму в "детальном" виде(типа в текст боксах) а данные из другой(связанной) таблицы(их договора) в датагридвью. И все это на одной форме. Плюс студия сама тебе забацает "балочку" с кнопочками для навигации и сохранения. (типа биндингнавигатор)

Ну а если уж тебе приспичило при выборе клиента в гриде на одной форме(двойной щелчек мышей на строке) открывать другую форму со списком договоров, то делаем все "ручками" и через классы. Вся логика в классах, а на форме минимум кода. Только создание обьектов нужных классов и вызовы их методов. Ну и отображение результатов естественно. 
Иначе ни как, я так думаю.  smile 

Это сообщение отредактировал(а) thomas - 15.10.2007, 20:59


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
FreakK
Дата 16.10.2007, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 1.7.2005
Где: Lviv (Ukraine)

Репутация: нет
Всего: нет



Приветствую
1. На основе собственного опита НЕРЕКОМЕНДУЮ испольсозовать фильтр через BindingSource
    так как он очень медленно работает. намного ефективнее виполнять FillWhereId(код_клиента)
    
Примерний текст запроса  FillWhereId:
SELECT * FROM Orders
WHERE Orders.Id = @id

ето позволит тебе открить договора для кждого клиетна в отдельних окнах.

если все же нужен ActiveBinding то просто нужно передать Биндинг сур в конструктор 
дочерней форми. и использовать его как дата сурс.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0803 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.