我有一个组合框,它通过选中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;
}
因此,用每个单独的条件填充组合框很简单。我不确定该做的事情,但是,当选中多个复选框时,组合框将一次显示每个选中复选框的数据(所有这些数据都来自同一列) 。此外,当取消选中一个复选框时,我只希望它从组合框而非所有内容中删除其自己的数据集。
这可能吗?
答案 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;
}
这只是一个例子,希望您能理解