【问题标题】:c# combobox filtering one combobox based on the value of another comboboxc# combobox 根据另一个组合框的值过滤一个组合框
【发布时间】:2013-03-10 23:30:49
【问题描述】:

我有 2 个表,product_items 和 category。 和2个组合框。我想在选定的类别之后过滤另一个组合框。 抱歉我的英语不好:),我试了 9 小时,但没有得到解决方案:/ 我的代码我写了多少。

DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter("select itemid, itemname, pcatid from produkti_items_tab", TestConnection);
            da.Fill(ds, "FillDropDown");

            comboBox1.DataSource = ds.Tables["FillDropDown"].DefaultView;
            comboBox1.DisplayMember = "itemname";
            comboBox1.ValueMember = "itemid";

            //============================================
            DataSet ddd = new DataSet();
            SqlDataAdapter dada = new SqlDataAdapter("select pcatid, pcatname from produkti_cat_tab", TestConnection);
            dada.Fill(ddd, "FillDropDownzzz");

            comboBox2.DataSource = ddd.Tables["FillDropDownzzz"].DefaultView;
            comboBox2.DisplayMember = "pcatname";
            comboBox2.ValueMember = "pcatid";

但我不知道我应该在这里写什么:

    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
    //how filter :/
}

【问题讨论】:

  • 您要在哪个条件下过滤另一个组合框?
  • 您能否更好地解释您真正想要实现的目标?

标签: c# winforms datagridview combobox filter


【解决方案1】:

不确定,需要测试一下,但是绑定到第一个组合框的 DataView 有一个 RowFilter 属性。
将此属性设置为适当的条件应删除不属于当前所选类别的项目

if(comboBox2.SelectedValue != null)
{
    DataView dv = comboBox1.DataSource as DataView;
    dv.RowFilter = "pcatid = " + comboBox2.SelectedValue.ToString();
}

【讨论】:

  • 几乎可以工作:)。当我按下更改时,它真的过滤了。但问题在于表单加载。我收到错误(找不到列 [system.data.DataRowView])
  • 出现此错误后,当表单加载我手动更改组合框时,它真的过滤了。但是在表单加载时,现在我得到了错误。表单加载时的 ComboBox 显示第一类,并在开始时过滤,仅在手动更改后才过滤。
  • 表单加载中的代码,我已经展示了。没什么新鲜的。不知何故,我也需要将此过滤器放入表单加载中,因为在开始时combobox2 具有值,但您的代码在我更改值后工作。这意味着我需要再次放置过滤器。
  • 那么,您是在告诉我在 form_load 中您将 combobox2 的 SelectedValue 设置为某个预定义的类别吗?您可以使用类别的预定义值添加相同的命令(例如 dv.RowFilter = "pcatid=" + yourDefaultCatValue.ToString();
  • 我发现哪里出错了。当表单加载时,我需要以某种方式停止此事件。'code' private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) {
猜你喜欢
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 2015-10-04
  • 2013-01-23
相关资源
最近更新 更多