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

Вопрос:

Я ученик и новичок в программировании, у меня есть два 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.

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