这是我在这个网站上的第一个问题所以如果我格式不正确,我会提前道歉。 我正在创建一个系统,它应该能够使用多个复选框搜索数据库(dataGridView)。我在网上找到了一些代码,使用3个复选框进行搜索,但我不确定如何扩展它。我需要能够使用50多个复选框进行搜索。按下搜索按钮后将执行以下代码,该按钮将在我的数据库中显示相应的行。我想以最有效的方式将此解决方案扩展到50多个复选框。
private void button1_Click(object sender, EventArgs e)
{
String filterdata = "";
if (checkBox1.Checked)
{
if (checkBox2.Checked || checkBox3.Checked)
{
filterdata = "'T05A1.1',";
}
else
{
filterdata = "'T05A1.1'";
}
}
if (checkBox2.Checked)
{
if (checkBox3.Checked)
{
filterdata = filterdata + "'C16D6.2',";
}
else
{
filterdata = filterdata + "'C16D6.2'";
}
}
if (checkBox3.Checked)
{
filterdata = filterdata + "'F41E7.3'";
}
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
//cmd.CommandText = "Select * from Table1 where elegansgeneID ='" + filterdata + "'";
cmd.CommandText = "Select * from Table1 where elegansgeneID in(" + filterdata + ")";
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();
}
答案 0 :(得分:1)
尝试这种更短的方法:
private void Button1_Click(object sender, EventArgs e)
{
var values = new List<string>();
if (checkBox1.Checked)
values.Add("'T05A1.1'");
if (checkBox2.Checked)
values.Add("'C16D6.2'");
if (checkBox3.Checked)
values.Add("'F41E7.3'");
// and so on
String filterdata = string.Join(",", values);
...
}
答案 1 :(得分:0)
public Form1()
{
InitializeComponent();
List<string> filters = new List<string> { "T05A1.1", "C16D6.2", "F41E7.3" };
checkedListBox1.Items.Clear();
foreach (string filter in filters)
{
checkedListBox1.Items.Add(filter);
}
}
private void button1_Click(object sender, EventArgs e)
{
List<string> selectedFilter = new List<string>();
for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
{
selectedFilter.Add("'" + checkedListBox1.CheckedItems[i].ToString() + "'");
}
string query = "Select * from Table1 where elegansgeneID in(" + string.Join(",", selectedFilter) + ")";
}
使用CheckBoxList,您只需在过滤器列表变量中添加过滤器,它就会生成您的列表。这样也可以缩短你的代码。