Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
3 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 73

Как сделать combobox зависимым полем от другого combobox?

14.08.2020, 16:03. Показов 3322. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать 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
26
27
28
29
conn = new OleDbConnection(Properties.Settings.Default.my_db);
            adTypeTovara = new OleDbDataAdapter("select * from ТипТовара", conn);
            adCategory = new OleDbDataAdapter("select Категории.КодКатегории, Категории.Наименование, Категории.КодТипа, ТипТовара.Тип from ТипТовара inner join Категории on ТипТовара.КодТипа = Категории.КодТипа;", conn);
            adPostavshik = new OleDbDataAdapter("SELECT Поставщик.КодПоставщика, Поставщик.КодКатегории, Поставщик.Наименование, Поставщик.Телефон, Поставщик.Город, Категории.Наименование FROM Категории INNER JOIN Поставщик ON Категории.КодКатегории = Поставщик.КодКатегории;", conn);
            adTovar = new OleDbDataAdapter("SELECT Товары.КодТовара, Товары.КодЕдИзм, Товары.КодПоставщика, Товары.Наименование, Товары.Цена, ЕдиницыИзмерения.ЕдиницыИзмерения, Поставщик.Наименование FROM ЕдиницыИзмерения INNER JOIN(Поставщик INNER JOIN Товары ON Поставщик.КодПоставщика = Товары.КодПоставщика) ON ЕдиницыИзмерения.КодЕдИзм = Товары.КодЕдИзм;", conn);
            adPocupatel = new OleDbDataAdapter("select * from Покупатели", conn);
            adNaryad = new OleDbDataAdapter("SELECT Наряд.КодНаряда, Наряд.Дата, Покупатели.Наименование, Категории.Наименование, Поставщик.Наименование, Товары.Наименование, ТипТовара.Тип, ЕдиницыИзмерения.ЕдиницыИзмерения, Наряд.КоличествоНаряд, Товары.Цена, Наряд.ОбщаяЦена FROM ЕдиницыИзмерения INNER JOIN(ТипТовара INNER JOIN(((Покупатели INNER JOIN(Товары INNER JOIN Наряд ON Товары.КодТовара = Наряд.КодТовара) ON Покупатели.КодПокупателя = Наряд.КодПокупателя) INNER JOIN Категории ON Наряд.КодКатегории = Категории.КодКатегории) INNER JOIN Поставщик ON(Наряд.КодПоставщика = Поставщик.КодПоставщика) AND(Поставщик.КодПоставщика = Товары.КодПоставщика) AND(Категории.КодКатегории = Поставщик.КодКатегории)) ON(Наряд.КодТипа = ТипТовара.КодТипа) AND(ТипТовара.КодТипа = Категории.КодТипа)) ON ЕдиницыИзмерения.КодЕдИзм = Товары.КодЕдИзм;", conn);
 
 
            adTypeTovara.Fill(ds, "ТипТовара");
            adCategory.Fill(ds, "Категории");
            adPostavshik.Fill(ds, "Поставщик");
            adTovar.Fill(ds, "Товары");
            adPocupatel.Fill(ds, "Покупатели");
            adNaryad.Fill(ds, "Наряд");
 
            bsTypeTovara = new BindingSource();
            bsCategory = new BindingSource();
            bsPostavshik = new BindingSource();
            bsTovar = new BindingSource();
            bsPocupatel = new BindingSource();
            bsNaryad = new BindingSource();
 
            bsTypeTovara.DataSource = ds.Tables["ТипТовара"];
            bsCategory.DataSource = ds.Tables["Категории"];
            bsPostavshik.DataSource = ds.Tables["Поставщик"];
            bsTovar.DataSource = ds.Tables["Товары"];
            bsPocupatel.DataSource = ds.Tables["Покупатели"];
            bsNaryad.DataSource = ds.Tables["Наряд"];
здесь я к комбобокс привязываю поля

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
dataGridView1.DataSource = f1.bsNaryad;
 
            comboBox1.DataSource = f1.bsPocupatel;
            comboBox1.DisplayMember = "Наименование";
            comboBox1.ValueMember = "КодПокупателя";
 
            comboBox2.DataSource = f1.bsTypeTovara;
            comboBox2.DisplayMember = "Тип";
            comboBox2.ValueMember = "КодТипа";
 
            comboBox3.DataSource = f1.bsCategory;
            comboBox3.DisplayMember = "Наименование";
            comboBox3.ValueMember = "КодКатегории";
 
            comboBox4.DataSource = f1.bsPostavshik;
            comboBox4.DisplayMember = "Наименование";
            comboBox4.ValueMember = "КодПоставщика";
 
            comboBox5.DataSource = f1.bsTovar;
            comboBox5.DisplayMember = "Наименование";
            comboBox5.ValueMember = "КодТовара";
 
            comboBox6.DataSource = f1.bsEdIzmer;
            comboBox6.DisplayMember = "КодЕдИзм";
            comboBox6.ValueMember = "ЕдиницыИзмерения";
Это не срабатывает

C#
1
comboBox6.DataBindings.Add("SelectedValue", comboBox5.DataSource, "КодТовара", true);
Миниатюры
Как сделать combobox зависимым полем от другого combobox?  
Изображения
 
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2020, 16:03
Ответы с готовыми решениями:

Как сделать ComboBox зависимым от другого ComboBox
Имеются два combobox'а в обоих одни и теже данные города отправки и прибытия как сделать их зависимыми друг от друга Допустим если в...

Как сделать ComboBox зависимым от TextBox?
Добрый день! такая ситуация. Есть таблица например 1/01,01/тема книги 1/01,02/тема топика 1/01,03/тема .... 2/01,01/тема чего то ...

C# Как сделать чтобы при выборе в combobox , менялись значения в других combobox?
Приветствую коллеги. Только встал на путь программирования и столкнулся с дилеммой. Есть форма, на ней 4 combobox. В каждом combobox по...

21
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
14.08.2020, 16:48
RobDiez, изменение данных в комбобоксе ловите в SelectedIndexChanged. Там устанавливаете фильтр по BindingSource https://docs.microsoft.com/en-... etcore-3.1
1
3 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 73
14.08.2020, 17:25  [ТС]
Выдаёт ошибку
C#
1
2
3
4
5
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            //f1.bsTypeTovara.Filter
            comboBox3.DataSource = f1.bsCategory.Filter = "Категории.КодТипа = ТипТовара.КодТипа";
        }
combobox3 содержим категории, которые должны зависеть от типа, находящийся в combobox2
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
14.08.2020, 19:02
Лучший ответ Сообщение было отмечено RobDiez как решение

Решение

RobDiez, вам нужно получить выбранное значение в комбобоксе. SelectedValue вернет значение из столбика, который вы указали в свойстве ValueMember этого комбобокса. И в фильтре пишете "НазваниеСтолбца=Значение".
1
3 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 73
15.08.2020, 16:53  [ТС]
Я как то не правильно вас понял. У меня ошибку выдаёт
C#
1
2
3
4
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            comboBox3.SelectedValue = f1.bsCategory.Filter = "Категории.КодТипа=ТипТовара.КодТипа";
        }
Добавлено через 1 час 26 минут
Получилось, но теперь другая проблема всплыла. согласно типу 1-продовольственные, 2-непродовольственные. Выбирая непродовольственные в другом combobox встают продовольственные, а при выборе продовольственных пустое значение

Добавлено через 15 минут
C#
1
2
3
4
                f1.bsCategory.Filter = "select * from Категории where Категории.КодТипа=" + comboBox2.SelectedValue;
                comboBox3.DataSource = f1.bsCategory;
                comboBox3.ValueMember = "КодКатегории";
                comboBox3.DisplayMember = "Наименование";
Так сделал
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
15.08.2020, 20:12
RobDiez, условие в фильтре надо писать так
C#
1
f1.bsCategory.Filter = "КодТипа=" + comboBox2.SelectedValue;
И это имеет смысл только в том случае,если в таблице категорий есть поле КодТипа.
1
3 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 73
15.08.2020, 20:41  [ТС]
Цитата Сообщение от Igr_ok Посмотреть сообщение
f1.bsCategory.Filter = "КодТипа=" + comboBox2.SelectedValue;
И это имеет смысл только в том случае,если в таблице категорий есть поле КодТипа.
в bsCategory я положил поле КодТипа

SQL
1
SELECT Категории.КодКатегории, Категории.Наименование, Категории.КодТипа, ТипТовара.КодТипа FROM ТипТовара INNER JOIN Категории ON ТипТовара.КодТипа = Категории.КодТипа;
А он выдаёт ошибку что не видит данный столбец

C#
1
f1.bsCategory.Filter = "Категории.КодТипа =" + comboBox2.SelectedValue;
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
15.08.2020, 23:41
Цитата Сообщение от RobDiez Посмотреть сообщение
в bsCategory я положил поле КодТипа
даже 2 раза, что явно лишнее. Но ошибка у вас из-за того, что вы не скопировали мой код,а сделали по-своему. А я ведь так старался)
После того,как запрос выполнится, остаются только названия столбцов, без названий таблиц. Если в запросе есть одинаковые поля, к дублям добавляется 1 с последующей нумерацией. Так что ТипТовара.КодТипа преобразуется в КодТипа1. Его можно вообще в запросе не выводить, это не отразится на результате выборки.
0
3 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 73
16.08.2020, 09:38  [ТС]
Цитата Сообщение от Igr_ok Посмотреть сообщение
даже 2 раза, что явно лишнее. Но ошибка у вас из-за того, что вы не скопировали мой код,а сделали по-своему. А я ведь так старался)
После того,как запрос выполнится, остаются только названия столбцов, без названий таблиц. Если в запросе есть одинаковые поля, к дублям добавляется 1 с последующей нумерацией. Так что ТипТовара.КодТипа преобразуется в КодТипа1. Его можно вообще в запросе не выводить, это не отразится на результате выборки.
Этого я не знал, потому и написал из какой таблицы брать поле.
Тут есть загвоздка, если брать поля только из таблицы Категории, где есть КодТипа, то он пишет следующее: System.Data.EvaluateException: "Не удается найти столбец [System.Data.DataRowView]."
А если в bsCategory положить поле КодТипа из таблицы ТипТовара и указывать, либо не указывать откуда брать поле КодТипа, то он всё равно не ходит это поле, пишет: System.Data.EvaluateException: "Не удается найти столбец [КодТипа]."
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
16.08.2020, 10:20
RobDiez, я имел в виду, что в запросе
Цитата Сообщение от RobDiez Посмотреть сообщение
SELECT Категории.КодКатегории, Категории.Наименование, Категории.КодТипа, ТипТовара.КодТипа FROM...
оставить
C#
1
SELECT Категории.КодКатегории, Категории.Наименование, Категории.КодТипа FROM
Но это не критичная ошибка, просто в глаза бросается.
0
3 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 73
16.08.2020, 12:33  [ТС]
Цитата Сообщение от Igr_ok Посмотреть сообщение
RobDiez, я имел в виду, что в запросе
Я делал так
SQL
1
SELECT Категории.КодКатегории, Категории.Наименование, Категории.КодТипа, ТипТовара.КодТипа FROM ТипТовара INNER JOIN Категории ON ТипТовара.КодТипа = Категории.КодТипа;
И по другому
SQL
1
SELECT Категории.КодКатегории, Категории.Наименование, Категории.КодТипа FROM Категории;
В первом случае System.Data.EvaluateException: "Не удается найти столбец [КодТипа]."
Во втором "Не удается найти столбец [System.Data.DataRowView]."

Независимо от того, указал я в фильтре из какой таблицы столбец или нет.
А так я делал как вы мне порекомендовали)
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
16.08.2020, 12:45
RobDiez, в фильтре вы что пишете?
0
3 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 73
16.08.2020, 13:06  [ТС]
В этом запросе
SQL
1
SELECT Категории.КодКатегории, Категории.Наименование, Категории.КодТипа, ТипТовара.КодТипа FROM ТипТовара INNER JOIN Категории ON ТипТовара.КодТипа = Категории.КодТипа;
Если пишу
C#
1
f1.bsCategory.Filter = "Категории.КодТипа =" + comboBox2.SelectedValue;
то "Не удается найти столбец [System.Data.DataRowView]."
Если пишу
C#
1
f1.bsCategory.Filter = "КодТипа =" + comboBox2.SelectedValue;
то System.Data.EvaluateException: "Не удается найти столбец [КодТипа]."
---------------------
Если запрос
SQL
1
SELECT Категории.КодКатегории, Категории.Наименование, Категории.КодТипа FROM Категории;
Если
C#
1
f1.bsCategory.Filter = "Категории.КодТипа =" + comboBox2.SelectedValue;
то System.Data.EvaluateException: "Не удается найти столбец [КодТипа]."
Если
C#
1
f1.bsCategory.Filter = "КодТипа =" + comboBox2.SelectedValue;
то "Не удается найти столбец [System.Data.DataRowView]."
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
16.08.2020, 16:18
RobDiez, попробуйте поменять порядок инициализации свойств
Цитата Сообщение от RobDiez Посмотреть сообщение
comboBox2.DataSource = f1.bsTypeTovara;
comboBox2.DisplayMember = "Тип";
comboBox2.ValueMember = "КодТипа";
Строку
C#
1
comboBox2.DataSource = f1.bsTypeTovara;
сделать последней.
0
3 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 73
16.08.2020, 17:21  [ТС]
Igr_ok, он на фильтр ругается, независимо от положения источника строк в коде
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
16.08.2020, 19:18
RobDiez, в фильтре пишем
C#
1
2
if(comboBox2.SelectedValue!=null)
f1.bsCategory.Filter = "КодТипа =" +(comboBox2.SelectedValue as DataRowView).Row["КодТипа"];
0
3 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 73
19.08.2020, 15:34  [ТС]
Igr_ok, Теперь System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
19.08.2020, 16:33
RobDiez, посмотрите в отладчике на что ругается и показывайте код с указанием объекта, который не имеет значение. Например, может не срабатывать приведение (comboBox2.SelectedValue as DataRowView), если SelectedValue другого типа.
0
3 / 2 / 1
Регистрация: 04.12.2015
Сообщений: 73
19.08.2020, 17:14  [ТС]
Igr_ok, DataRowView возвращает null
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
19.08.2020, 17:33
RobDiez, а код где? DataRowView - это comboBox2.SelectedValue и у вас должна стоять проверка
Цитата Сообщение от Igr_ok Посмотреть сообщение
C#
1
if(comboBox2.SelectedValue!=null)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.08.2020, 17:33
Помогаю со студенческими работами здесь

Как сделать чтобы при выборе в combobox , менялись значения в других combobox?
Есть два combobox. Как их сделать зависимыми друг от друга. Что бы при выборе одного combobox менялись данные в другом. К примеру: В...

Как сделать чтобы при выборе в comboBox, выводилось значение в другом comboBox?
Здравствуйте! Есть таблица из 2 столбца (id, name). Как сделать чтобы при выборе из первого comboBox вывести значение другому comboBox?...

Как сделать чтобы при выборе в combobox , менялись значения в других combobox? Visual Basic 6.0
Есть несколько компонентов Combobox, списки через Form_load я прописал, теперь списки отображаются. Но как сделать так чтобы при выборе в...

ComboBox, значения в котором зависят от выбранного пункта другого ComboBox-а
Как можно сделать так чтобы при выборе определенного значения ComboBox1 в ComboBox2 был свой набор (Items). Например: В ComboBox1 выбрал...

Значение из ComboBox формы в запросе MS SQL для другого ComboBox
Здравствуйте! Научите пожалуйста использовать значение ComboBox (хотя бы VB) в запросе MS SQL. Значение числовое int. Знаю, что для...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru