c# - 根据另一个组合框填充组合框

标签 c# winforms combobox

我正在制作一个 wpf,其中一个组合框根据另一个组合框填充。但是,只填充了一个组合框。

下面是我的代码。

 public partial class Form4 : Form
    {
        public Form4()
        {
            InitializeComponent();
            this.Load += Form4_Load;
        }

        string connstring = ("Server=localhost;Port=5432;User Id=postgres;Password=021393;Database=postgres;");

        private void Form4_Load(object sender, EventArgs e)
        {
            string query = "SELECT * FROM data_organsystem";            
            fillCombo(comboBox3, query, "name", "id");
            comboBox3_SelectedIndexChanged(null, null);
        }

        private void fillCombo(ComboBox combo, string query, string displayMember, string valueMember)
        {
            NpgsqlConnection conn = new NpgsqlConnection(connstring);
            NpgsqlCommand cmd = new NpgsqlCommand(query, conn);
            NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            combo.DataSource = dt;             
            combo.DisplayMember = displayMember;            
            combo.ValueMember = valueMember;
        }

        private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
        {
            int val;
            Int32.TryParse(comboBox3.SelectedValue.ToString(), out val);
            string query = "SELECT * FROM data_symptom WHERE organ_system_id = " + val;
            fillCombo(comboBox4, query, "name", "id");
        }
    }
}

如果您对如何编辑此代码有任何想法,那将是一个很大的帮助。谢谢!

最佳答案

在行中执行方法 comboBox3_SelectedIndexChanged 时会出错

Int32.TryParse(comboBox3.SelectedValue.ToString(), out val);

因为 comboBox3.SelectedValuenull 如果在 ComboBox 中没有选择项目,我没有在你的代码中看到你选择了一些第一次调用 comboBox3_SelectedIndexChanged 之前的项目。

因为 comboBox3_SelectedIndexChangedForm.Load 事件处理程序异常中执行的方法未显示。检查这个:https://stackoverflow.com/a/3209813/1565525 .
这就是为什么你没有得到任何错误

使用前需要检查SelectedValue是否为null

If(this.comboBox3.SelectedValue is null)
{
    this.comboBox4.DataSource = null; //Remove all items if nothing selected
}
else
{
    Int32 val= (Int32)this.ComboBox3.SelectedValue;
    string query = "SELECT id, name FROM data_symptom WHERE organ_system_id = " + val;
    fillCombo(this.comboBox4, query, "name", "id");
 }

因为您在用项目填充 ComboBox 时使用 DataBinding,所以逻辑上使用 SelectedValueChanged 事件处理程序

private void comboBox3_SelectedValueChanged(object sender, EventsArgs e)
{
    //same code
}

关于c# - 根据另一个组合框填充组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32088327/

相关文章:

c# - 尽管 list<T> 在内部使用数组(固定的),但它如何动态工作?

c# - ListView CheckedItems 按名称查找项目

c# - 如何以编程方式更改窗体上的背景图像#

c# - 如何在 C# 中关闭 MessageBox 后强制按钮、文本框在窗体上重新绘制

javascript - 使用 AJAX 和 PHP 更改组合框选择

c# - 在 web.config 的 mailSettings 部分处理多个邮件服务器的最佳方式是什么?

c# - 计算 "Pie Segment"和 "sub areas"区域的边界点

c# - 防止组合框在用户键入时更改所选选项。 C#

c# - 如何为 GroupBox 标题使用样式?

c# - 将 C 中包含 unsigned char 指针的代码移植到 C#