0 / 0 / 1
Регистрация: 24.05.2016
Сообщений: 48
1
SQLite

Связь один ко многим

12.07.2016, 16:48. Показов 2594. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сделать данную связь? Чтобы при выборе значения в комбобоксе, показывалось 3 значения.
А именно при выборе отдела, должно выводится в тестбоксы 3 принтера (таких 2 отдела). Остальные по одному
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2016, 16:48
Ответы с готовыми решениями:

Entity Framework 6. Code First. Связь один-ко-многим и многие-ко-многим одновременно
Здрасти. Есть таблица юзеров и объявлений. У юзера может быть множество объявлений. Здесь действует...

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

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

Связь многие-ко-многим в Entity Framework
делаю задания с моделями сущностей entity framework. на примере студентов и курсов, у каждого...

8
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
12.07.2016, 21:14 2
Цитата Сообщение от Kaberungula Посмотреть сообщение
Как сделать данную связь?
Вы бы хоть таблицы привели, что-ли...
0
0 / 0 / 1
Регистрация: 24.05.2016
Сообщений: 48
13.07.2016, 10:30  [ТС] 3
Такой вид имеет
Миниатюры
Связь один ко многим  
0
0 / 0 / 1
Регистрация: 24.05.2016
Сообщений: 48
13.07.2016, 12:10  [ТС] 4
В combobox выведены значения из Dept_Name. Под комбо расположились 3 textbox. При выборе отдела, например Фин, в первом textbox появляется соответствующий принтер. А при выборе отдела Инт, должны заполнятся принтерами все 3 textbox. Такая вот заковыка..
0
784 / 615 / 273
Регистрация: 04.08.2015
Сообщений: 1,707
13.07.2016, 12:28 5
Цитата Сообщение от Kaberungula Посмотреть сообщение
А при выборе отдела Инт, должны заполнятся принтерами все 3 textbox.
А если добавится еще один принтер, вы будете переделывать дизайн, чтобы добавить еще один textbox? Так не делается.
Принтеры нужно показывать в combobox или listbox или checkedlistbox... в зависимости от вашей задачи.
Обрабатываете событие ComboBox.SelectedIndexChanged. Из выбранного значения комбобокса берете ID_Dept. По нему находите все принтеры с таким ID_Dept. Потом добавляете их в компонент, где они будут отображаться.
0
0 / 0 / 1
Регистрация: 24.05.2016
Сообщений: 48
13.07.2016, 17:47  [ТС] 6
Я вроде бы нашел, то что нужно, если делать зависимый комбобокс. Но не пойму, как DataGridView заменить на combobox, или это вообще не нужно?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        public Form1()
        {
            InitializeComponent();
            this.Size = new Size(500, 500);
            connection = new SqlConnection(@"Data Source=COMP\SQLEXPRESS;Initial Catalog=cyber;Integrated Security=True");
            adapterGroups = new SqlDataAdapter("SELECT id, name FROM groups;", connection);
            adapterStudents = new SqlDataAdapter("SELECT id, fio, idGroup FROM students", connection);
            dataSet = new DataSet();
            adapterGroups.Fill(dataSet, "groups");
            adapterStudents.Fill(dataSet, "students");
            dataSet.Relations.Add("groups-students", //название связи
                dataSet.Tables["groups"].Columns["id"],//первичный ключ главной таблицы
                dataSet.Tables["students"].Columns["idGroup"]);//внешний ключ подчиненной таблицы
            bindingSourceGroups = new BindingSource(dataSet, "groups");
            bindingSourceStudents = new BindingSource(bindingSourceGroups, "groups-students");
            gridGroups = new DataGridView();
            gridGroups.Size = new Size(this.ClientRectangle.Width - 20, (this.ClientRectangle.Height >> 1) - 15);
            gridGroups.Location = new Point(10, 10);
            gridGroups.DataSource = bindingSourceGroups;
            gridStudents = new DataGridView();
            gridStudents.Size = gridGroups.Size;
            gridStudents.Location = new Point(10, gridGroups.Bottom + 10);
            gridStudents.DataSource = bindingSourceStudents;
            this.Controls.AddRange(new Control[] { gridGroups, gridStudents });
        }
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
13.07.2016, 18:51 7
Kaberungula,
Зачем задавать вопросы, если ответы на них не нужны?
Вам в 3-х темах разные люди подсказали несколько вариантов, а вы что-то пытаетесь изобрести.
Вот пример для ваших 2-х таблиц. В комбобокс выводятся подразделения, в листбокс - принтеры из выбранного в комбобоксе подразделения.
Пример для Access. Для SQLite используйте соответствующие объекты:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private void Form1_Load(object sender, EventArgs e)
{
    using (OleDbConnection conn = new OleDbConnection(connString))
    {
        string commText = "SELECT * FROM Dept";
        OleDbCommand comm = new OleDbCommand(commText, conn);
        DataTable table = new DataTable();
        OleDbDataAdapter adapter = new OleDbDataAdapter(comm);
        adapter.Fill(table);
        comboBox1.DataSource = table;
        comboBox1.DisplayMember = "Dept_Name"; //отображаемое поле
        comboBox1.ValueMember = "ID_Dept"; //поле-значение
        comboBox1.SelectedIndex = -1; //снимаем выбор
    }
    comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
}
 
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    using (OleDbConnection conn = new OleDbConnection(connString))
    {
        string commText = "SELECT * FROM Printer where ID_Dept = @ID_dept";
        OleDbCommand comm = new OleDbCommand(commText, conn);
        comm.Parameters.AddWithValue("@ID_dept", (int)(sender as ComboBox).SelectedValue);
        DataTable table = new DataTable();
        OleDbDataAdapter adapter = new OleDbDataAdapter(comm);
        adapter.Fill(table);
        listBox1.DataSource = table;
        listBox1.DisplayMember = "Printer_Name"; //отображаемое поле
        listBox1.ValueMember = "ID_Print"; //поле-значение
        listBox1.SelectedIndex = -1; //снимаем выбор
    }
}
2
0 / 0 / 1
Регистрация: 24.05.2016
Сообщений: 48
14.07.2016, 11:59  [ТС] 8
Шикарно, спасибо. Просто мозги уже заплыли от этого). А что за " += ", почему не просто =? Не могу в инете найти инфы...
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
14.07.2016, 12:13 9
Kaberungula,
Это подписка на событие.
https://msdn.microsoft.com/ru-... 66768.aspx
0
14.07.2016, 12:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2016, 12:13
Помогаю со студенческими работами здесь

Связь многие ко многим (Entity Framework)
Мне нужна связь многие ко многим. Нашел вот тут хороший туториал который объясняет как ее сделать...

Связь многие ко многим EntityFramework Code First
Всем привет! Столкнулся с проблемой при проектировании БД со связью многие-ко-многим. Ситуация...

БД (один ко многим)
Уважаемые разработчики если вас не затруднит помогите пожалуйста решить одну задачку которая у меня...

Один ко многим
Добрый день. Есть 3 таблицы: главная и 2 подключенные к ней связью один ко многим. Хочу вывести...


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

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

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