一个Combobox人口问题

我正在使用下面的函数来填充我的ComboBox

 public static void FillDropDownList(string Query, System.Windows.Forms.ComboBox DropDownName, string AValue, string Adisplay)
    {
        string Value = AValue;
        string display = Adisplay;
        using (var CONN = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|Test.accdb;"))
        {
            CONN.Open();
            DataTable dt = new DataTable();
            try
            {
                OleDbCommand cmd = new OleDbCommand(Query, CONN);
                OleDbDataReader myReader = cmd.ExecuteReader();
                dt.Load(myReader);
            }
            catch (OleDbException e)
            {
                MessageBox.Show(e.ToString());
                return;
            }
            DropDownName.DataSource = dt;
            DropDownName.ValueMember = Value;
            DropDownName.DisplayMember = display;
        }
    }

我在装载形式中调用它:

 private void Form1_Load(object sender, EventArgs e)
 {
     FillDropDownList("select CountryCode,Countryname from Countries", comboBox1, "CountryCode", "Countryname");

 }

2.之后,我在Selectedindexchanged事件中使用相同的函数来填充另一个ComboBox:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{            
    FillDropDownList("select StateCode,StateName from States Where CountryCode = '" + comboBox1.SelectedValue + "'", comboBox2, "StateCode", "StateName");

}   

而对于两个组合框的人口一切正常,但这里是我有两个组合框的问题,如图所示:

因此,第一个组合框(国家)的形式完美加载,但我想要做的是使第二个组合框(状态)从数据库中选择只有当我选择国家但发生的是代码运行和第二个组合框会从数据库中选择,第一个组合中的选定索引就像图片所示

所以我基本上想要做的就是只有当我从第一个组合框中选择一个索引时才使第二个组合被填充。


把你的代码放在SelectionChangeCommitted而不是SelectedIndexChanged

private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
    FillDropDownList("select StateCode,StateName from States Where CountryCode = '" + comboBox1.SelectedValue + "'", comboBox2, "StateCode", "StateName");
}

我认为你的问题是因为第一个组合框的人口触发事件来填充第二个。 一种解决方法是在comboBox1_SelectedIndexChanged(object sender,EventArgs e)中使用类似下面的代码。

if (comboBox1.Text == string.Empty) { return; }

如果这不起作用,请尝试使用“SelectedIndex> 0”或“SelectedValue”属性。

作为一个注意事项,如果任何人能够修改组合框项目,您的代码可能倾向于SQL注入攻击。


您需要通过使用SelectedIndex属性来识别项目实际上是否从Combobox更改过。

尝试这个:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{   

    if(comboBox1.SelectedIndex >= 0)
    {   
       FillDropDownList("select StateCode,StateName from States Where CountryCode = '" + comboBox1.SelectedValue + "'", comboBox2, "StateCode", "StateName");
    }

}   
链接地址: http://www.djcxy.com/p/68597.html

上一篇: A Combobox Population issue

下一篇: jQuery UI autocomplete(Combobox) button alignment