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

Выбор связанных значений тройного comboBox

16.01.2018, 14:54. Показов 2099. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрый день!
Давно мучаюсь, откладывал вопрос, но до сих пор не осилил.

БД MSSQL, WinForms.
Есть форма, где присутствуют 2 комбобокса, в которых происходит выборка по базе, и 1 textbox, куда вносим текстовое значение. Тут вопросов нет, выборка связанных значений из одного комбобокса в другой происходит и все заносится в БД успешно.

Вопрос с тремя комбобоксами поставил меня в тупик. Т.е. по двум связку я сделал, а третий, хоть убей, при загруке экрана выводит дефолтные значения из БД, а не пустую строку. При попытке объявить SelectRegion(); ругается на "Error .1 No overload for method 'SelectRegion' takes 0 arguments". Что я пропустил, или где накосячил? Приму помощь, либо исправление

Где 2 комбобокса (тут все работает):



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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
public partial class FormAddCity : Form
    {
        SqlCommand cmd;
        SqlConnection con;
        DataRow dr;
        public FormAddCity()
        {
            InitializeComponent();
            //Для выборки по СТРАНЕ
            SelectCountry();
        }
 
        //Объявляем SelectCountry - для выборки по СТРАНЕ
        public void SelectCountry()
        {
            con = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=GuardianSoftDB;Integrated Security=True");
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from GSDBCountries", con);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            con.Close();
            dr = dt.NewRow();
            dr.ItemArray = new object[] { 0, "" };
            dt.Rows.InsertAt(dr, 0);
            comboBox1.ValueMember = "id";
            comboBox1.DisplayMember = "sName";
            comboBox1.DataSource = dt;
        }  
 
        //Нажали "Отмена"
        private void ButtonCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        //Нажали "Сохранить" - сохраняем ГОРОД
        private void ButtonSave_Click(object sender, EventArgs e)
        {
            con = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=GuardianSoftDB;Integrated Security=True");
            Console.WriteLine("Соедение успешно произведено");
            con.Open();
            cmd = new SqlCommand("INSERT INTO GSDBCities (idCountry, idRegion, sName) VALUES (@idCountry, @idRegion, @sName)", con);
            SqlDataAdapter da = new SqlDataAdapter();
            cmd.Parameters.AddWithValue("@idCountry", comboBox1.SelectedValue);
            cmd.Parameters.AddWithValue("idRegion", comboBox2.SelectedValue);
            cmd.Parameters.AddWithValue("@sName", textBox1.Text);
            da.SelectCommand = cmd;
            cmd.ExecuteNonQuery();
            con.Close();
        }
 
        //Загружена форма - обновляем TableAdapter
        private void FormAddCity_Load(object sender, EventArgs e)
        {
            this.gSDBCitiesTableAdapter.Fill(this.cities.GSDBCities);
            // TODO: This line of code loads data into the 'regions.GSDBRegions' table. You can move, or remove it, as needed.
            this.gSDBRegionsTableAdapter.Fill(this.regions.GSDBRegions);
            // TODO: This line of code loads data into the 'countries.GSDBCountries' table. You can move, or remove it, as needed.
            this.gSDBCountriesTableAdapter.Fill(this.countries.GSDBCountries);
        }
 
        //Действие при выборке необходимого ITEM-a в первом комбобоксе
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.SelectedValue.ToString() != null)
            {
                int id = Convert.ToInt32(comboBox1.SelectedValue.ToString());
                SelectRegion(id);
            }  
        }
 
        //Объявляем SelectRegion - для выборки по РЕГИОНУ
        public void SelectRegion(int id)
        {
            con = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=GuardianSoftDB;Integrated Security=True");
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from GSDBRegions where idCountry= @id", con);
            cmd.Parameters.AddWithValue("id", id);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            con.Close();
            dr = dt.NewRow();
            dr.ItemArray = new object[] { 0, "" };
            dt.Rows.InsertAt(dr, 0);
            comboBox2.ValueMember = "id";
            comboBox2.DisplayMember = "sName";
            comboBox2.DataSource = dt;
        }
 
        //Форма закрыта - обновляем TableAdapter
        private void FormAddCity_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.gSDBCitiesTableAdapter.Fill(this.cities.GSDBCities);
            // TODO: This line of code loads data into the 'regions.GSDBRegions' table. You can move, or remove it, as needed.
            this.gSDBRegionsTableAdapter.Fill(this.regions.GSDBRegions);
            // TODO: This line of code loads data into the 'countries.GSDBCountries' table. You can move, or remove it, as needed.
            this.gSDBCountriesTableAdapter.Fill(this.countries.GSDBCountries);
        }
 
        //Форма закрывается - обновляем TableAdapter
        private void FormAddCity_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.gSDBCitiesTableAdapter.Fill(this.cities.GSDBCities);
            // TODO: This line of code loads data into the 'regions.GSDBRegions' table. You can move, or remove it, as needed.
            this.gSDBRegionsTableAdapter.Fill(this.regions.GSDBRegions);
            // TODO: This line of code loads data into the 'countries.GSDBCountries' table. You can move, or remove it, as needed.
            this.gSDBCountriesTableAdapter.Fill(this.countries.GSDBCountries);
        }  
    }
Тут - хреномагия (с тремя комбобоксами):





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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
    public partial class FormAddOrganization : Form
    {
        SqlCommand cmd;
        SqlConnection con;
        DataRow dr;
        public FormAddOrganization()
        {
            InitializeComponent();
            //Для выборки по СТРАНЕ
            SelectCountry();
[B]            SelectRegion();[/B]
        }
 
        //Объявляем SelectCountry - для выборки по СТРАНЕ
        public void SelectCountry()
        {
            con = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=GuardianSoftDB;Integrated Security=True");
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from GSDBCountries", con);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            con.Close();
            dr = dt.NewRow();
            dr.ItemArray = new object[] { 0, "" };
            dt.Rows.InsertAt(dr, 0);
            comboBox1.ValueMember = "id";
            comboBox1.DisplayMember = "sName";
            comboBox1.DataSource = dt;
        }  
 
        //Объявляем SelectRegion - для выборки по СТРАНЕ
        public void SelectRegion(int id)
        {
            con = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=GuardianSoftDB;Integrated Security=True");
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from GSDBRegions where idCountry= @id", con);
            cmd.Parameters.AddWithValue("id", id);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            con.Close();
            dr = dt.NewRow();
            dr.ItemArray = new object[] { 0, "" };
            dt.Rows.InsertAt(dr, 0);
            comboBox2.ValueMember = "id";
            comboBox2.DisplayMember = "sName";
            comboBox2.DataSource = dt;
        }
 
        //Объявляем SelectCity - для выборки по ГОРОДУ
        public void SelectCity(int id)
        {
            con = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=GuardianSoftDB;Integrated Security=True");
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from GSDBCities where idRegion= @id", con);
            cmd.Parameters.AddWithValue("id", id);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            con.Close();
            dr = dt.NewRow();
            dr.ItemArray = new object[] { 0, "" };
            dt.Rows.InsertAt(dr, 0);
            comboBox3.ValueMember = "id";
            comboBox3.DisplayMember = "sName";
            comboBox3.DataSource = dt;
        }
 
        //Нажали "Отмена"
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        //Нажали "Сохранить" - сохраняем ОРГАНИЗАЦИЮ
        private void button1_Click(object sender, EventArgs e)
        {
            con = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=GuardianSoftDB;Integrated Security=True");
            Console.WriteLine("Соедение успешно произведено");
            con.Open();
            cmd = new SqlCommand("INSERT INTO GSDBOrganizations (idCountry, idCity, sName, idRegion) VALUES (@idCountry, @idCity, @sName, @idRegion)", con);
            SqlDataAdapter da = new SqlDataAdapter();
            cmd.Parameters.AddWithValue("@idCountry", comboBox1.SelectedValue);
            cmd.Parameters.AddWithValue("@idRegion", comboBox2.SelectedValue);
            cmd.Parameters.AddWithValue("@idCity", comboBox3.SelectedValue);
            cmd.Parameters.AddWithValue("@sName", textBox1.Text);
            da.SelectCommand = cmd;
            cmd.ExecuteNonQuery();
            con.Close();
            Close();
            Repository.LoadDataSet();
        }
 
        //Загружена форма - обновляем TableAdapter
        private void FormAddOrganization_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'regions.GSDBRegions' table. You can move, or remove it, as needed.
            this.gSDBRegionsTableAdapter.Fill(this.regions.GSDBRegions);
            // TODO: This line of code loads data into the 'cities.GSDBCities' table. You can move, or remove it, as needed.
            this.gSDBCitiesTableAdapter.Fill(this.cities.GSDBCities);
            // TODO: This line of code loads data into the 'countries.GSDBCountries' table. You can move, or remove it, as needed.
            this.gSDBCountriesTableAdapter.Fill(this.countries.GSDBCountries);
 
        }
 
        //Форма закрыта - обновляем TableAdapter
        private void FormAddOrganization_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.gSDBOrganizationsTableAdapter.Fill(this.organizations.GSDBOrganizations);
            // TODO: This line of code loads data into the 'regions.GSDBRegions' table. You can move, or remove it, as needed.
            this.gSDBRegionsTableAdapter.Fill(this.regions.GSDBRegions);
            // TODO: This line of code loads data into the 'cities.GSDBCities' table. You can move, or remove it, as needed.
            this.gSDBCitiesTableAdapter.Fill(this.cities.GSDBCities);
            // TODO: This line of code loads data into the 'countries.GSDBCountries' table. You can move, or remove it, as needed.
            this.gSDBCountriesTableAdapter.Fill(this.countries.GSDBCountries);
        }
 
        //Форма закрывается - обновляем TableAdapter
        private void FormAddOrganization_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.gSDBOrganizationsTableAdapter.Fill(this.organizations.GSDBOrganizations);
            // TODO: This line of code loads data into the 'regions.GSDBRegions' table. You can move, or remove it, as needed.
            this.gSDBRegionsTableAdapter.Fill(this.regions.GSDBRegions);
            // TODO: This line of code loads data into the 'cities.GSDBCities' table. You can move, or remove it, as needed.
            this.gSDBCitiesTableAdapter.Fill(this.cities.GSDBCities);
            // TODO: This line of code loads data into the 'countries.GSDBCountries' table. You can move, or remove it, as needed.
            this.gSDBCountriesTableAdapter.Fill(this.countries.GSDBCountries);
        }
 
        private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (comboBox1.SelectedValue.ToString() != null)
            {
                int id = Convert.ToInt32(comboBox1.SelectedValue.ToString());
                SelectRegion(id);
            }  
        }
 
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox2.SelectedValue.ToString() != null)
            {
                int id = Convert.ToInt32(comboBox2.SelectedValue.ToString());
                SelectCity(id);
            } 
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2018, 14:54
Ответы с готовыми решениями:

Вывод значений в comboBox, связанных с другим comboBox
как сделать вывод в combobox2, если оно зависит от выбора значения comboBox1. программа осуществляет работу с любой выбранной базой...

Занесение в таблицу "связанных" данных из ComboBox
Есть вопросик: Из одной таблицы считываются данные о магазине (id и store_nm) и заносятся в комбобокс. В комбобоксе отображается только ...

Уникальные значения Combobox и выбор связанных ячеек
Всем доброго времени суток! Подскажите пожалуйста как можно вывести в Combobox2 ВСЕ значения из таблицы на листе "Организации"...

7
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
18.01.2018, 11:01  [ТС]
UP!
0
 Аватар для Козадоев
165 / 155 / 33
Регистрация: 05.03.2013
Сообщений: 879
19.01.2018, 08:18
Цитата Сообщение от GuardianCoder Посмотреть сообщение
Вопрос с тремя комбобоксами поставил меня в тупик. Т.е. по двум связку я сделал, а третий, хоть убей, при загруке экрана выводит дефолтные значения из БД, а не пустую строку.
В этом случае проще не делать связки. Заполнять комбобоксы в циклах или цепляться к 3м независимым источникам. Источники можно фильтровать или грузить в них данные по условию выбранного значения.
0
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
19.01.2018, 10:09  [ТС]
Козадоев, спасибо за ответ. А если все же сделать связку? Есть мысли, в чем может быть проблема?
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
19.01.2018, 11:34
GuardianCoder, вы не смогли перевести сообщение об ошибке? Так там написано, что вы определили метод, который требует 1 параметр
Цитата Сообщение от GuardianCoder Посмотреть сообщение
public void SelectRegion(int id)
а потом вызываете его без параметра
Цитата Сообщение от GuardianCoder Посмотреть сообщение
SelectRegion();
0
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
22.01.2018, 12:33  [ТС]
Igr_ok, если бы был вопрос только в этом, я бы не спрашивал.
Я написал, что "Т.е. по двум связку я сделал, а третий, хоть убей, при загруке экрана выводит дефолтные значения из БД, а не пустую строку."
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
22.01.2018, 14:28
GuardianCoder, ваша проблема в том, что вы неправильно ставите вопросы. Если вам надо, чтобы в комбобоксе по умолчанию ничего не было выбрано, то спрашивайте, как это сделать. А вы сначала на*****кодили, а потом спрашиваете, почему не работает.
Установите у него свойство SelectedIndex=-1.
0
1 / 1 / 0
Регистрация: 22.05.2017
Сообщений: 5
29.01.2018, 09:56
Чет перечитал несколько раз и слабо понял что хочет автор. Но если я понял правильно, то нужно чтобы выбор происходил последовательно:
При загрузке формы грузится страна, остальные боксы пустые. Выбираем страну, то появляются значения в регионе, а затем в городе. Но я нигде в коде не вижу этой выборки, все грузится сразу при загрузке формы. А надо, делать выборку только в "Страну". Затем после выбора страны посылать новый запрос в БД, делающий выборку связанных со страной полей для Региона, а следом, выбрав Регион, посылать запрос на города.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2018, 09:56
Помогаю со студенческими работами здесь

Combobox и выбор сразу нескольких значений
Есть Combobox в нём есть имена, как сделать выбор нескольких имён сразу и как с этим работать? Также нужно программно отследить сколько...

Выбор значений ComboBox с соответствующими им числовыми показателями
Всем привет По заданию необходимо передать значения из "label-ов с 1-8" в comboBox из которых он впоследствии и будет состоять Затем...

Combobox: выбор значений с 2-х столбцов и перенос в один
Подскажите знающие: Combobox настроен на выпадающий список данных с двух столбцов, как организовать ввод выбранных имени и фамилии в один...

Компонент ComboBox, запретить изменение значений, оставить только выбор
Как сделать так, чтобы значения в ComboBox могли только выбираться, а не изменяться в ручную? В компоненте Memo есть ReadOnly, что-то...

Использование Combobox: выбор только предложенного или ввод своих значений
В Windows Forms комбобокс работает как DropDownList в ASP.NET или туда все же можно вводить данные для поиска, то есть дополнительно как...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru