同时用来自同一数据库列的多个数据集填充组合框

时间:2019-02-21 19:48:59

标签: c# sql-server winforms checkbox combobox

我有一个组合框,它通过选中10个复选框之一有条件地从数据库填充。 10个复选框中的每个复选框均包含以下代码,该代码根据column中的值选择column2的一部分。

private void Check1_CheckedChanged(object sender, EventArgs e)

    {
        if (Check1.CheckState == CheckState.Checked)
        {
            // SQL Server connection
            SqlConnection conn = new SqlConnection(@"Server = Server; Database = DB; Integrated Security = True");
            DataSet ds = new DataSet();
            try
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand("SELECT [Column1] FROM [DB].[dbo].[Table1] WHERE [Column2] = 50", conn);
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;
                da.Fill(ds);
                combo1.DisplayMember = "Column1";
                combo1.ValueMember = "ID";
                combo1.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                //Exception Message
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }

        if (Check1.CheckState == CheckState.Unchecked)
        {
            combo1.DataSource = null;
        }

因此,用每个单独的条件填充组合框很简单。我不确定该做的事情,但是,当选中多个复选框时,组合框将一次显示每个选中复选框的数据(所有这些数据都来自同一列) 。此外,当取消选中一个复选框时,我只希望它从组合框而非所有内容中删除其自己的数据集。

这可能吗?

2 个答案:

答案 0 :(得分:0)

我认为,如果您有1个数据集,然后可以动态构建SQL查询,则是可能的。根据所有选定的comboBoxes为要返回的列设置一个变量。

对comboBoxes上的所有更新后事件使用1种方法,以使其更容易维护。

就将动力学列映射到下拉列表而言,我不使用Winform,因此我不确定,但希望这会有所帮助。

答案 1 :(得分:0)

您可以使用loop的for来迭代获取的值并附加组合框值。示例:

 comboBox.Items.Clear(); // <-- Declare this at initialization of the page or whatever scenario you have

    private void Check1_CheckedChanged(object sender, EventArgs e)

        {
            if (Check1.CheckState == CheckState.Checked)
            {
                // SQL Server connection
                SqlConnection conn = new SqlConnection(@"Server = Server; Database = DB; Integrated Security = True");
                DataSet ds = new DataSet();
                try
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand("SELECT [Column1] FROM [DB].[dbo].[Table1] WHERE [Column2] = 50", conn);
                    SqlDataAdapter da = new SqlDataAdapter();
                    da.SelectCommand = cmd;
                    da.Fill(ds);

// Using loop to iterate the values and append the combo box
                    for(int i=0;i<da.Rows.Count;i++)
                   {
                         combo1.Items.Add(da[i]["Column1"].ToString());
                        combo1.Items[combo1.Itemx.Count-1].Text=da[i]["Column1"].ToString();
                        combo1.Items[combo1.Itemx.Count-1].Value=da[i]["Column1"].ToString();
                   }



                }
                catch (Exception ex)
                {
                    //Exception Message
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
            }

            if (Check1.CheckState == CheckState.Unchecked)
            {
                combo1.DataSource = null;
            }

这只是一个例子,希望您能理解