Заполнение combobox из другого combobox

Я заполняю combobox из другого combobox, написав код

<i> public void fillCombo(ComboBox cb, string query, string displayMember, string valueMember) {
        cmd=new SqlCommand(query,c.con);
        SqlDataAdapter sda=new SqlDataAdapter(cmd);
        sda.Fill(d.dt3);
        cb.DataSource = d.dt3;
        cb.DisplayMember = displayMember;
        cb.ValueMember = valueMember;        
    }
    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        int val;
        Int32.TryParse(comboBox2.SelectedValue.ToString(), out val);
        string q = "Select * From Tehsil where DistrictID =" + val;
        fillCombo(comboBox1, q, "Tehsil_name", "TehsilID");
    } </i>

combobox в заполнении, но не фильтрации данных. он повторяет элементы combobox. как фильтровать данные??

Метки

3 ответа

  1. public void fillCombo(ComboBox cb, string query, string displayMember, string valueMember) {
        cmd=new SqlCommand(query,c.con);
        SqlDataAdapter sda=new SqlDataAdapter(cmd);
        d.dt3.Clear();
        sda.Fill(d.dt3);
        cb.DataSource = d.dt3;
        cb.DisplayMember = displayMember;
        cb.ValueMember = valueMember;        
    }
    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        int val;
        Int32.TryParse(comboBox2.SelectedValue.ToString(), out val);
        string q = "Select * From Tehsil where DistrictID =" + val;
        fillCombo(comboBox1, q, "Tehsil_name", "TehsilID");
    } 
    
  2. Я полагаю, что D-это DataSet, а dt3DataTable . Я думаю, что вам нужно очистить данные DataTable (dt3) перед вызовом sda.Fill (d.dt3).

    d.dt3.Rows.Clear();
    sda.Fill(d.dt3);
    
  3. Вы пробовали создать представление и назначить RowFilter (я предполагаю, что набор данных и таблица могут быть общими для других элементов управления для привязки).

    Вот как я бы изменил функцию

    public void fillCombo(ComboBox cb, string query, string displayMember, string valueMember, int districtID) {
        cmd=new SqlCommand(query,c.con);
        SqlDataAdapter sda=new SqlDataAdapter(cmd);
        sda.Fill(d.dt3);
        var comboView = d.dt3; //Assuming d.dt3 is a DataTable, if it is dataset you will need d.dt3.Tables["table_name"] or [index]
        comboView.DefaultView.RowFilter = string.Format("{0}={1}", "DistrictID", districtID); //This should filter the view being bound to CB.
        cb.DataSource = comboView;
        cb.DisplayMember = displayMember;
        cb.ValueMember = valueMember;        
        cb.DataBind(); //Explicit Call to Databind
    }
    
    // you will be calling it as below
    fillCombo(comboBox1, q, "Tehsil_name", "TehsilID", val); //val is district ID as assigned in your comboBox2_SelectedIndexChanged event handler.