当第一个combobox获得某个值时自动更新combobox

我有两个combobox。 我在第一个combobox中插入一个值,现在我希望我的第二个combobox根据第一个combobox更新其值。 我该怎么做?

处理第一个ComboBoxSelectedIndexChanged事件,然后根据第一个ComboBoxSelectedItem值更新第二个组合ComboBox

一个简单的例子(检索SelectedItem时没有error handling):

 public partial class Form1 : Form { private string[] comboBox1Range = new[] { "A", "B", "C", "D" }; private string[] comboBox2RangeA = new[] { "A1", "A2", "A3", "A4" }; private string[] comboBox2RangeB = new[] { "B1", "B2", "B3", "B4" }; private string[] comboBox2RangeC = new[] { "C1", "C2", "C3", "C4" }; private string[] comboBox2RangeD = new[] { "D1", "D2", "D3", "D4" }; public Form1() { InitializeComponent(); comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged; comboBox1.Items.AddRange(comboBox1Range); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { string selectedValue = comboBox1.SelectedItem as string; switch (selectedValue) { case "A": comboBox2.Items.Clear(); comboBox2.Items.AddRange(comboBox2RangeA); break; case "B": comboBox2.Items.Clear(); comboBox2.Items.AddRange(comboBox2RangeB); break; case "C": comboBox2.Items.Clear(); comboBox2.Items.AddRange(comboBox2RangeC); break; case "D": comboBox2.Items.Clear(); comboBox2.Items.AddRange(comboBox2RangeD); break; } } } 

订阅第一个combobox的值更改事件并填充第二个:

 combobox1.SelectedIndexChanged+= new EventHandler(ListBox1_SelectedIndexChanged); private combobox1_SelectedIndexChanged(object sender, EventArgs e) { // do stuff with combobox2 } 

要么

 combobox1.SelectedValueChanged += new EventHandler(ListBox1_SelectedValueChanged); private combobox1_SelectedValueChanged(object sender, EventArgs e) { // do stuff with combobox2 } 

人口:

 combobox2.Items.Add(new object()); combobox2.Items.Add(new ListItem("caption", "value")); // etc 

查找现有项目:

 var index = combobox2.FindStringExact(combobox1.SelectedText); if (index != -1) comobox2.SelectedItem = combobox2.Items[index]; 

代码示例,带有两个combobox的Winform数据绑定到数据集中的两个表。 表“lstCountries”当前国家/地区列表所有国家/地区的所有州/省的“lstState”列表。

表lstCountries(Int32 CountryID,string CountryName)表lstStates(Int32 StateID,Int32 CountryID,string StateName)

在此代码中,我将基于值选择的cboCountry填充cboState,同时两个combodropdowns绑定到从数据库获取的数据表。

 // Load data from database (not shown) // _dataSet.Tables["lstCountries"] datasource for cboCountry // _dataSet.Tables["lstStates"] datasource for cboState // // cboCountry - comboDropDown - List on countries // cboState = comboDropDown - List of states // Use boolean bloading to prevent setting datasource for cboState when cboCountry is intially loaded. void cboCountry_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cbo = (sender as ComboBox); if (cbo.SelectedIndex > -1 && !bloading) { Int32 countryID = Convert.ToInt32(((System.Data.DataRowView)(cbo.SelectedItem)).Row.ItemArray[0].ToString()); cboState.Text = ""; DataView view = _dataSet.Tables["lstStates"].DefaultView; view.RowFilter = string.Format("CountryID={0}", countryID); DataTable table = view.ToTable(); cboState.DataSource = table; cboState.SelectedIndex = -1; } 

我想选择Ders这个cmbDers,然后cmbKonu更新相关的SQL,如Country-City。 但我得到的数据类型不匹配。 有什么问题?

表格加载OleDbDataAdapter adp = new OleDbDataAdapter(“select * from Ders”,baglanti); DataTable dt = new DataTable(); baglanti.Open(); adp.Fill(DT); cmbDers.DataSource = dt; cmbDers.DisplayMember =“DersAd”; cmbDers.ValueMember =“DersID”; baglanti.Close();

 private void cmbDers_SelectedIndexChanged(object sender, EventArgs e) { DataTable dt = new DataTable(); OleDbDataAdapter adp = new OleDbDataAdapter ("select * from Konu where DersID = '" +cmbDers.SelectedItem+"'",baglanti); adp.Fill(dt); cmbKonu.DataSource = dt; cmbKonu.DisplayMember = "KonuAd"; cmbKonu.ValueMem`enter code here`ber = "KonuID"; baglanti.Close();`enter code here`