从组合框中过滤数据 [英] Filter data from comboboxs
问题描述
我在C#中有一个带有几个组合框的winforms应用程序。这些组合框显示来自SQL数据库的数据。我可以让组合框在listview中显示数据,但我想要的是过滤数据。例如,用户选择combobox1中的值并显示结果,但是当他在组合框2中选择一个值时,将仅显示具有来自combobox1的规则的相应值。这就像创建一个过滤器,但我无法弄清楚我如何在组合框之间进行交互。我的代码是:
我尝试过:
编辑:
I have a winforms app in C# with several comboboxes. these comboboxes display data from an SQL database. I can get the comboboxes to display the data in a listview, but what I want is to filter the data. For example, the user selects a value in combobox1 and the results appear, but when he selects a value in combobox 2 only the corresponding values with the rules from combobox1 will be displayed. it´s like creating a filter, but I cant figure out how I can interact between the comboboxes. The code I have is:
What I have tried:
string combo1value = desempenho.Text;
string combo2value = valu.Text;
string combo3value = fsolar.Text;
string combo4value = select.Text;
string combo5value = compo.Text;
string query = "select [desc],[enchimento],[compo] from vidros ";
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
if (combo1value != "")
{
query += " where desempenho = @emp ";
cmd.Parameters.Add("@emp", SqlDbType.NVarChar).Value = combo1value;
}
if (combo2value != "")
{
if (combo2value == "") query += " where valu = @emp2 ";
query += " and valu = @emp2 ";
cmd.Parameters.Add("@emp2", SqlDbType.NVarChar).Value = combo2value;
}
if (combo3value != "")
{
if (combo3value == "") query += " where fs = @emp3 ";
query += " and fs = @emp3 ";
cmd.Parameters.Add("@emp3", SqlDbType.NVarChar).Value = combo3value;
}
if (combo4value != "")
{
if (combo4value == "") query += " where sel = @emp4 ";
query += " and sel = @emp4 ";
cmd.Parameters.Add("@emp4", SqlDbType.NVarChar).Value = combo4value;
}
if (combo5value != "")
{
if (combo5value == "") query += " where fs = @emp5 ";
else
query += " and compo = @emp5 ";
cmd.Parameters.Add("@emp5", SqlDbType.NVarChar).Value = combo5value;
}
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable DTT = new DataTable();
sda.Fill(DTT);
listView1.Items.Clear();
for (int i = 0; i < DTT.Rows.Count; i++)
{
DataRow dr = DTT.Rows[i];
ListViewItem listitem = new ListViewItem(dr["desc"].ToString());
listitem.SubItems.Add(dr["enchimento"].ToString());
listitem.SubItems.Add(dr["compo"].ToString());
listView1.Items.Add(listitem);
}
}
推荐答案
试试这个
try this
private void desempenho_SelectedIndexChanged(object sender, EventArgs e)
{
FillData();
}
private void valu_SelectedIndexChanged(object sender, EventArgs e)
{
FillData();
}
private void FillData()
{
string combo1value = desempenho.Text;
string combo2value = valu.Text;
string query = "select [desc],[enchimento],[compo] from vidros ";
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand.Connection = con;
if (combo1value != "")
{
query += " where desempenho = @emp ";
sda.SelectCommand.Parameters.Add("@emp", SqlDbType.NVarChar).Value = combo1value;
}
if (combo2value != "")
{
if (combo2value == "") query += " where valu = @emp2 ";
else
query += " and valu = @emp2 ";
sda.SelectCommand.Parameters.Add("@emp2", SqlDbType.NVarChar).Value = combo2value;
}
sda.SelectCommand.CommandText = query;
DataTable DTT = new DataTable();
sda.Fill(DTT);
listView1.Items.Clear();
for (int i = 0; i < DTT.Rows.Count; i++)
{
DataRow dr = DTT.Rows[i];
ListViewItem listitem = new ListViewItem(dr["desc"].ToString());
listitem.SubItems.Add(dr["enchimento"].ToString());
listitem.SubItems.Add(dr["compo"].ToString());
listView1.Items.Add(listitem);
}
}
这篇关于从组合框中过滤数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!