如何使用其他Combobox填充Combobox?
我在这里有点新鲜,我对我正在制作的节目有很多疑问,但最让我烦恼的是标题上的节目。
基本上,我有一个Combobox,我用这个填充:
DataSet ds = new DataSet(); MySqlDataAdapter da = new MySqlDataAdapter("SELECT cveestado, nomestado FROM tbEstado", conexion); da.Fill(ds, "FillDropDown"); cbEstado.DisplayMember = "Nomestado"; cbEstado.ValueMember = "CveEstado"; cbEstado.DataSource = ds.Tables["FillDropDown"]; conexion.Close();
根据用户选择的内容,我想根据第一个选择填充另一个combobox。
到目前为止,我有这个,但它不起作用:
private void cbEstado_TextChanged(object sender, EventArgs e) { if (cbEstado.SelectedValue.ToString() == "Tabasco") { try { DataSet ds = new DataSet(); MySqlDataAdapter da = new MySqlDataAdapter("SELECT cvemunicipio, nommunicipio FROM tbMunicipio where cveestado = 27", conexion); da.Fill(ds, "FillDropDown"); cbMunicipio.DisplayMember = "Nommunicipio"; cbMunicipio.ValueMember = "Cvemunicipio"; cbMunicipio.DataSource = ds.Tables["FillDropDown"]; conexion.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
基本上,如果用户选择“塔巴斯科”,我希望第二个combobox填充塔巴斯科市。
我的sql代码如下,以防万一:
create table tbEstado (cveEstado int not null, nomEstado varchar(45) not null, constraint pkcveEstado primary key (cveEstado) )engine=innodb; create table tbMunicipio (cveMunicipio int not null, nomMunicipio varchar(45) not null, cveEstado int not null, constraint pkcveMunicipio primary key (cveMunicipio), constraint fkcveEstado foreign key (cveEstado) references tbEstado(cveEstado) )engine=innodb;
谢谢!
编辑
得益于https://stackoverflow.com/users/1197518/steve ,答案是:
private void cbEstado_TextChanged(object sender, EventArgs e) { if (cbEstado.SelectedValue != null && Convert.ToInt32(cbEstado.SelectedValue) == 27) { try { DataSet ds = new DataSet(); MySqlDataAdapter da = new MySqlDataAdapter("SELECT cvemunicipio, nommunicipio FROM tbMunicipio where cveestado = 27", conexion); da.Fill(ds, "FillDropDown"); cbMunicipio.DisplayMember = "Nommunicipio"; cbMunicipio.ValueMember = "Cvemunicipio"; cbMunicipio.DataSource = ds.Tables["FillDropDown"]; conexion.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
您正在检查链接到CveEstado
列的SelectedValue属性。
此列包含的数字不是字符串Tabasco
if (cbEstado.SelectedValue != null && Convert.ToInt32(cbEstado.SelectedValue) == 27) { try { .......
这可能会解决您的实际问题,但请在您的问题评论中查看给您的建议
您可以使用dataview作为示例:
cbEstado.Datasource =ds.Tables["State"]; cbMunicipio.Datasource = new Dataview(ds.Tables["Muncipalities"];);
在cbSample1_SelectedIndexChange事件中你可以:
(cbMunicipio.DataSource as DataView).RowFilter = "cveEstado='" + cbEstado.SelectedValue.ToString() + "'";