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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение связанных таблиц 
V
    Опции темы
Freak_FB
  Дата 19.12.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


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

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



Проблема, вроде бы, поднималась, но я разобраться самостоятельно не смог. Банальная задача: есть база pubs2002.mdb (из стандартной поставки SQL Server, кажется). Там есть таблица с наименованиями издательств, и есть таблица с наименованиями книг, а у книг есть ссылка на издательство. Делаю DataSet (всё в дизайнере), 2 адаптера на каждую из таблиц. Заполняю адаптеры из DataSet. Далее: есть два DataGridView. В первом планирую отображать список издательств, во втором - список книг, выпущеных этим издательством. То есть при выборе издательства список книг обновляется.
Какие действия нужно выполнить, чтобы обеспечить эту функциональность? Здесь обсуждался такой вопрос и говорилось, что нужно использовать CurrencyManager и Binding.
Заранее спасибо за ответ.


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
D_F_V
Дата 20.12.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



как вариант... 

Бизнес логика в отдельном классе..
Код

public class ViewTable
    {
        protected DataTable table;
        protected string filter;
        protected DataView view;

        public ViewTable(DataSet _ds, string _tableName)
        {
            table = _ds.Tables[_tableName];
        }

        public DataView TABLE_VIEW
        {
            get
            {
                if (view == null) view = new DataView(table);
                view.RowFilter = filter;
                return view;
            }
        }
    }


    public class Publisher : ViewTable
    {
        public Publisher(DataSet _ds) : base(_ds, "publishers") { }
    }

    public class Titles : ViewTable
    {
        public Titles(DataSet _ds) : base(_ds, "titles") { }

        public void SetFilter(string value)
        {
            filter = String.Format("pub_id = {0}", value);
        }
    }



Представление...
Код

public partial class Form1 : Form
    {
        pubs2002DataSet ds = new pubs2002DataSet();
        Publisher pub;
        Titles tit; 

        public Form1()
        {
            InitializeComponent();

            dataGridViewBooks.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataGridViewPub.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

            pubs2002DataSetTableAdapters.publishersTableAdapter _PubAdapter = new Books.pubs2002DataSetTableAdapters.publishersTableAdapter();
            _PubAdapter.Fill(ds.publishers);
            pubs2002DataSetTableAdapters.titlesTableAdapter _TitleAdapter = new Books.pubs2002DataSetTableAdapters.titlesTableAdapter();
            _TitleAdapter.Fill(ds.titles);

            pub = new Publisher(ds);
            tit = new Titles(ds);

            dataGridViewPub.DataSource = pub.TABLE_VIEW;
            
        }

        private void dataGridViewPub_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                tit.SetFilter(dataGridViewPub.SelectedRows[0].Cells[0].Value.ToString());
                dataGridViewBooks.DataSource = tit.TABLE_VIEW;
            }
            catch { }
        }
    }


Особо не стал расписывать.. все по минимуму и по быстрому.. чисто под описанную задачу...


Это сообщение отредактировал(а) D_F_V - 20.12.2007, 09:21
PM MAIL ICQ MSN   Вверх
thomas
Дата 20.12.2007, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Freak_FB
Приветствую.
Цитата

Делаю DataSet (всё в дизайнере), 2 адаптера на каждую из таблиц.

По идее если таблицы связаны в БД, то и в ДС они отобразяться связанными. Если этого нет, по какой либо причине, то просто в дизайнере ДС добавь связь между таблицами.
Второе, раз работаешь в дизайнере то,  когда из окна DataSourece перетаскиваешь на форму "родительскую" таблицу кликни плюсик рядом сней, увидишь список её полеё и "дочернюю" табличку тоже.
Порядок действий: для родительской таблицы выбираешь вид - детальный и тащишь ее на форму, получаешь лабелы с текстбоксами + студия сама поместит навигатор на форму и добавит BindingSource и tableAdapter.
Потом выстави табличное представление у дочерней таблицы и перетащи ее на форму. Получишь DataGridView + BindingSource и tableAdapter.
Если стартанешь приложение то увидишь в боксах своих аторов, в гриде список их книг. Навигация через навигатор.

Надеюсь, более мение понятно написал. Студент я, а не учитель.  smile 

Успехов. smile 



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


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


Ктулхувед
**


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

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



Ну что тут сказать. Сделал специально базу. Прилагаю её на всякий случай. Создал с нуля проект. Сделал там окошко DataSources. Добавил в те DataSources себе базу. Выделил обе таблицы в ней. Автоматом связи не перенесло - ладно. Сделал ручками. Поперетягивал из DataSources обе таблицы. Отобразило в DataGridView. Запустил - никаких положительных результатов - в таблице с издательствами - все издательства, и в табличке с книжками - тоже ВСЕ книжки. Может быть это не так просто визуально устанавливается такое поведение, может код какой добавить? Просто не попадалось хорошей нкижки по базам данных, вот и затруняюсь.

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  pub.rar 7,45 Kb


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
mr.DUDA
Дата 29.12.2007, 11:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Попробовал сам. Базу данных добавил в Data Sources (кстати связь по таблицам создаётся автоматически), перетянул таблицы на форму, как показано на скриншоте. После запуска всё работает как положено: выбирая строку в верхнем датагриде, в нижнем отображаются только книги выбранного издателя.
user posted image


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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