Заполнение ComboBox2 в зависимости от выбранного элемента Combobox1

Вопрос: Я ученик и новичок в программировании, у меня есть два comboboxes, combobox1 и combobox2 combobox1, содержит мобильную компанию, такую как nokia, samsung, htc и combobox2, содержит мобильные модели, такие как samsung, s3 и т.д., я хочу сортировать два combobox, которые я имею в виду когда я нажимаю nokia в combobox1, тогда вся модель nokia

Вопрос:

Я ученик и новичок в программировании, у меня есть два comboboxes, combobox1 и combobox2 combobox1, содержит мобильную компанию, такую как nokia, samsung, htc и combobox2, содержит мобильные модели, такие как samsung, s3 и т.д., я хочу сортировать два combobox, которые я имею в виду когда я нажимаю nokia в combobox1, тогда вся модель nokia должна быть видна в списке combobo2, поэтому я решил использовать отношения внешнего ключа

Manufacturer -table — manufacturerid (primary key) — name Model -table — modelid (primary key) — manufacturerid (foreign key to manufacturer) — name

Пример для данных:

Таблица производителей

manufacturerid name ————— ———- 1 Nokia 2 Samsung 3 HTC

Таблица моделей

modelid manufacturerid name ——- ————— ———- 1 1 C7 2 1 Lumia 900 3 1 Lumia 920 4 2 Galaxy S II 5 2 Galaxy S III 6 3 Desire X 7 3 Windows Phone 8X 8 3 One S

я хочу, чтобы, если я выбираю nokia в первом combobox, тогда вторая combobox выберет все модели, которые являются производительностью = 1, что использовать? Как я могу это сделать? я использовал

private void comboBox4_SelectedIndexChanged(object sender, EventArgs e) { comboBox3.Text = «»; if («samsung» == comboBox4.SelectedItem.ToString()) { comboBox3.DataSource = table1BindingSource; comboBox3.ValueMember = «samsung»; comboBox3.DisplayMember = «samsung»; } if («htc» == comboBox4.SelectedItem.ToString()) { comboBox3.DataSource = table1BindingSource; comboBox3.ValueMember = «htc»; comboBox3.DisplayMember = «htc»; } }

но я должен обновлять строку samsung каждый раз, когда добавляю новую модель, поэтому я решил работать с таблицами, чтобы я мог обновить эту

Лучший ответ:

В первом выпуске SelectedIndexChanged (combobox) выберете select manufacturerid а затем запустите этот запрос, чтобы заполнить другой combobox, т.е. (Модель)

Select modelid,name from modeltable where [email protected]

Код за чем- то Подобным образом, я просто написал этот код без просмотра IDE, может потребоваться некоторая модификация

private void monufactureComobobox_SelectedIndexChanged(object sender, EventArgs e) { string fecthManufacturerID= manufactureComobobox.selectedItem; DataTable dtModel = new DataTable(); dtModel= ModelComboPopulate(fecthManufacturerID); ModelcomboBox.DataSource = dtModel; ModelcomboBox.ValueMember = «modelid»; ModelcomboBox.DisplayMember = «name»; } public DataTable ModelComboPopulate(string ID) { DataSet ds = new DataSet(); using (SqlConnection con = new SqlConnection(connection)) { string myquery=»Select modelid,name from modeltable where [email protected]»; SqlCommand cmd = new SqlCommand(myquery, con); SqlDataAdapter dap = new SqlDataAdapter(); dap.SelectCommand = cmd; cmd.Parameters.Add(«@combox1Value», SqlDbType.NVarChar, 15).Value = ID; dap.Fill(ds); return ds.Tables[0]; } } Ответ №1

Включить функцию для извлечения данных из базы данных следующим образом

public DataTable Select(String sqlQuery) { con.Open(); SqlDataAdapter adapter = new SqlDataAdapter(sqlQuery,con); DataTable table = new DataTable(); adapter.Fill(table); con.Close(); return table; }

и в событии Page_Load

protected void Page_Load(object sender, EventArgs e) { if(!Page.IsPostBack) { String sqlQuery=»select manufacturerid,name From Manufacturertable»; comboBox4.DataSource = cls.Select(sqlQuery); comboBox4.DataTextField = «name»; comboBox4.DataValueField = «manufacturerid»; comboBox4.DataBind(); } }

и в SelectedIndexChanged событие comboBox4

protected void comboBox4_SelectedIndexChanged(object sender, EventArgs e) { String sqlQuery=»select modelid,name From Modeltable where manufacturerid=»+ Convert.ToInt16(comboBox4.SelectedValue.ToString()); comboBox3.DataSource = cls.Select(sqlQuery); comboBox3.DataTextField = «name»; comboBox3.DataValueField = «modelid»; comboBox3.DataBind(); } Ответ №2

Используйте DataSet или DataTable для хранения двух таблиц, а затем strArr строки в строке списка strArr. Что-то вроде ниже: (По крайней мере, логика должна работать)

List<string> strArr = new List<string>(); strArr.Items.Clear(); for(int intSubCount = 0; intSubCount < dtTable2.Rows.Count;intSubCount++) { if(MyComboBox.Text.Equals(dtTable2.Rows[intSubCount][«modelid»].ToString())) { strArr.Add(dtTable2.Rows[intSubCount][«name»].ToString()); } } // comboBox3.DataSource = strArr;

Или иначе

Простым способом является использование DataView

DataView dv = dtTable1.defaultView; dv.RowFilter(«modelid = ‘» + myComboBox.Text + «‘»); //use DataView to populate the Second ComboBox.

Оцените статью
Добавить комментарий