C# 根据从另一个组合框中选择的索引填充组合框
天哪,我已经做了两天了,但我仍然无法得到解决方案。这是我的设想: 我有三个ComboBox控件,我需要从dataset动态加载数据C# 根据从另一个组合框中选择的索引填充组合框,c#,winforms,C#,Winforms,天哪,我已经做了两天了,但我仍然无法得到解决方案。这是我的设想: 我有三个ComboBox控件,我需要从dataset动态加载数据 cbCode1由加载表单填充 当从cbCode1中选择的索引更改时,将填充cbCode2 当从cbCode1中选择的索引更改时,cbCode3将被填充 数据来自数据集“描述”和“id_代码”中的两个字段。因此,我想将描述的值与其id相关联。因为我需要稍后再询问 在加载形式中,我有以下内容: cbCode1.DataSource=D.Tables[0]; cbCo
- cbCode1由加载表单填充
- 当从cbCode1中选择的索引更改时,将填充cbCode2
- 当从cbCode1中选择的索引更改时,cbCode3将被填充
private void cbCode1_SelectedIndexChanged(object sender, EventArgs e)
{
// Get dataset from DB
DataSet D = new DataSet();
D = reason_get(1, 1, 1); // IdStation, Active, Level
// Ensure the cbcode2 is cleared
cbCode2.Items.Clear();
string SelectedValue = cbCode1.SelectedValue.ToString();
foreach (DataRow row in D.Tables[0].Rows)
{
if (row["id_parent_code"].ToString () == SelectedValue )
{
cbCode2.DataSource = D.Tables[0];
cbCode2.DisplayMember = D.Tables[0].Columns["description"].ColumnName;
cbCode2.ValueMember = D.Tables[0].Columns["id_code"].ColumnName;
cbCode2.SelectedIndex = 0;
}
}
}
这个代码不起作用,我不知道我做错了什么。请帮忙解决这个问题
提前谢谢
一个新手程序员..我以前没有这样做过,但我为datagridview做过类似的事情。您需要做的是使用actionlisteners。基本上填充第一个组合框,然后向其中添加actionlistener,以便在所选索引更改时调用它。在actionlistener中,让它填充第二个组合框。我以前没有这样做过,但我为datagridview做过类似的事情。您需要做的是使用actionlisteners。基本上填充第一个组合框,然后向其中添加actionlistener,以便在所选索引更改时调用它。在actionlistener中,让它填充第二个组合框。尝试这样做,如下面的代码所示 私有void Form1\u加载(对象发送方、事件参数e) { 填充国家()
尝试这样做,就像下面的代码 私有void Form1\u加载(对象发送方、事件参数e) { 填充国家()
使用比
cbCode1
和cbCode2
更好的变量名。使用能实际说明值含义的名称。使用比cbCode1
和cbCode2
更好的变量名。使用能实际说明值含义的名称。
}
private void FillCountry()
{
string str = "SELECT CountryID, CountryName FROM Country";
SqlCommand cmd = new SqlCommand(str,con);
//cmd.Connection = con;
//cmd.CommandType = CommandType.Text;
// cmd.CommandText = "SELECT CountryID, CountryName FROM Country";
DataSet objDs = new DataSet();
SqlDataAdapter dAdapter = new SqlDataAdapter();
dAdapter.SelectCommand = cmd;
con.Open();
dAdapter.Fill(objDs);
con.Close();
comboBox1.ValueMember = "CountryID";
comboBox1.DisplayMember = "CountryName";
comboBox1.DataSource = objDs.Tables[0];
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedValue.ToString() != "")
{
int CountryID = Convert.ToInt32(comboBox1.SelectedValue.ToString());
FillStates(CountryID);
comboBox3.SelectedIndex = 0;
}
}
private void FillStates(int countryID)
{
string str = "SELECT StateID, StateName FROM State WHERE CountryID =@CountryID";
SqlCommand cmd = new SqlCommand(str, con);
// SqlConnection con = new SqlConnection(Con);
// cmd.Connection = con;
// string str="SELECT StateID, StateName FROM State WHERE CountryID =@CountryID";
// cmd.Connection = con;
//cmd.CommandType = CommandType.Text;
// cmd.CommandText = "SELECT StateID, StateName FROM State WHERE CountryID =@CountryID";
cmd.Parameters.AddWithValue("@CountryID", countryID);
DataSet objDs = new DataSet();
SqlDataAdapter dAdapter = new SqlDataAdapter();
dAdapter.SelectCommand = cmd;
con.Open();
dAdapter.Fill(objDs);
con.Close();
if (objDs.Tables[0].Rows.Count > 0)
{
comboBox2.ValueMember = "StateID";
comboBox2.DisplayMember = "StateName";
comboBox2.DataSource = objDs.Tables[0];
}
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
int StateID = Convert.ToInt32(comboBox2.SelectedValue.ToString());
FillCities(StateID);
}
private void FillCities(int stateID)
{
//SqlConnection con = new SqlConnection(str,con);
string str = "SELECT CityID, CityName FROM City WHERE StateID =@StateID";
SqlCommand cmd = new SqlCommand(str,con);
// cmd.Connection = con;
//cmd.CommandType = CommandType.Text;
// cmd.CommandText = "SELECT CityID, CityName FROM City WHERE StateID =@StateID";
cmd.Parameters.AddWithValue("@StateID", stateID);
DataSet objDs = new DataSet();
SqlDataAdapter dAdapter = new SqlDataAdapter();
dAdapter.SelectCommand = cmd;
con.Open();
dAdapter.Fill(objDs);
con.Close();
if (objDs.Tables[0].Rows.Count > 0)
{
comboBox3.DataSource = objDs.Tables[0];
comboBox3.DisplayMember = "CityName";
comboBox3.ValueMember = "CItyID";
}