简体   繁体   English

基于另一个在C#中具有相同表数据的组合框对组合框进行筛选

[英]Filter on combobox based on another combobox with same table data in c#

I have 2 combo boxes and data grid view I can filter 2 combo boxes separately base on the table but I want to filter them based on 1st combo box. 我有2个组合框和数据网格视图,我可以基于表格分别过滤2个组合框,但是我想根据第1个组合框进行过滤。 I tried different ways but my second combo box is empty.. nothing happens.. please help me with this. 我尝试了不同的方法,但是我的第二个组合框是空的..什么都没有发生..请帮助我。

{
    String Query = " SELECT  distinct [t_street_name] FROM  [ICPS].[dbo].[tickets]  ";
    SqlConnection conDataBase = new SqlConnection(conString);
    SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase);
    SqlDataAdapter sda = new SqlDataAdapter(cmdDataBase);
    SqlDataReader myReader;
    try
    {
        conDataBase.Open();
        myReader = cmdDataBase.ExecuteReader();

        while (myReader.Read())
        {
            string t_street_name = myReader["t_street_name"].ToString();
            comboBox1.Items.Add(t_street_name);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

void fillcombo1()
{

    String Query =  ("SELECT  distinct [t_zone_name] FROM  [ICPS].[dbo].[tickets] where  [t_street_name] ='" + comboBox1.SelectedItem + "'conString ") ;
    SqlConnection conDataBase = new SqlConnection(conString);
    SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase);
    SqlDataReader myReader;
    try
    {
        conDataBase.Open();
        myReader = cmdDataBase.ExecuteReader();

        while (myReader.Read())
        {
            string t_zone_name = myReader["t_zone_name"].ToString();
            comboBox2.Items.Add(t_zone_name);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

private void Form1_Load(object sender, EventArgs e)
{
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}

private void button2_Click(object sender, EventArgs e)
{
    SqlConnection conDatabase = new SqlConnection(constring);

    conDatabase.Open();

    DataTable db = new DataTable();
    SqlDataAdapter sda = new SqlDataAdapter(String.Format("select  distinct *  from" + " [ICPS].[dbo].[tickets] " +
    "where   [ICPS].[dbo].[tickets].[t_street_name]  = '" + comboBox1.Text + "'" +
    "and ([ICPS].[dbo].[tickets].[t_date_time_issued]) BETWEEN Convert(DATETIME, '{0}', 103) AND Convert(DATETIME, '{1}', 103)", StartDate.Value.ToString("dd/MM/yyyy"), EndDate.Value.ToString("dd/MM/yyyy")), constring);

    sda.Fill(db);

    dataGridView1.DataSource = db;
}

You're looking for filtering like state/city (as an example), correct? 您正在寻找州/城市之类的过滤器(例如),对吗? So if someone picks a state in the first combo box, then you want a list of cities within that state to populate in the second combo box. 因此,如果有人在第一个组合框中选择了一个州,则您希望在第二个组合框中填充该州内的城市列表。 Correct? 正确?

Apart from the obvious comments about using parametrized queries and Using the SQL connection, have you actually checked the SQL statement directly in a database management program? 除了关于使用参数化查询和使用 SQL连接的明显注释之外,您是否真的在数据库管理程序中直接检查了SQL语句? To me it looks like there is no space in the statement text between 在我看来,语句文本之间没有空格

... comboBox1.Text + "'" + "and ([ICPS].[dbo] ... ... comboBox1.Text +“'” +“和([ICPS]。[dbo] ...

Apart from that you obviously need to load the second combo from the selected index event on the first combo. 除此之外,您显然还需要将所选索引事件中的第二个组合加载到第一个组合上。

I have tried it everything work fine now.. 我已经尝试过了,现在一切正常。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { 私人无效comboBox1_SelectedIndexChanged(对象发送者,EventArgs e){

         SqlConnection conDatabase = new SqlConnection(constring);

        comboBox2.SelectedIndex = -1;
        comboBox2.Items.Clear();
        if ( conDatabase.State == ConnectionState.Closed)
        {
            conDatabase.Open();
        }
        SqlCommand cmd = new SqlCommand(" select distinct  sz_zone_name from  [ICPS].[dbo].[spid_zones] " + 
            "inner join [ICPS].[dbo].[spid_street]" +
             " on [ICPS].[dbo].[spid_street].ss_number = [ICPS].[dbo].[spid_zones].[sz_street_number]"  +
         " where [ICPS].[dbo].[spid_street].ss_name  ='" + comboBox1.SelectedItem + "'", conDatabase);
        SqlDataReader rd = cmd.ExecuteReader();
        while (rd.Read())
        {
            comboBox2.Items.Add(rd[0]);
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM