基于另一个组合框过滤组合框

时间:2014-05-20 20:00:36

标签: c# asp.net combobox dataview

我没有问题让这个在Windows窗体中工作,我可以用jquery做到这一点。出于某种原因,它不适用于C#& asp.net。

网页上有三个组合框:

Specialty
Location
Department

我有一个包含数据库数据的数据视图。我有三个绑定到相同的数据视图,dv。 dv包含“专业”,“位置”和“部门”列。

当我选择专业时,我想过滤DataView以仅显示这些专业。每个组合框应该只显示那些行。

protected void SpecialtyList_SelectedIndexChanged(object sender, EventArgs e)
{
    dv.RowFilter = string.Format("department_specialty = '{0}'", SpecialtyList.SelectedValue.ToString());
}

当事件未触发任何过滤器时,AutoPostBack为True。我疯了还是忽略了什么?我的页面有回发帖子,因此它不会重新初始化数据或将自身重置为默认值。

1 个答案:

答案 0 :(得分:0)

您没有发布足够的代码 - 数据不足以进行诊断。

  1. 您是否可以附加调试器并在SpecialtyList_SelectedIndexChanged()中设置断点以验证它是否被调用?

  2. 您可以发布完整代码,或者至少发布与绑定/填充数据相关的部分吗?

  3. 最常见的问题(我已经看到):在每次加载时执行DataBind()。重新绑定数据时,会丢失IndexChanged事件的上下文等。您说您没有重新初始化回发中的数据,但是您确定不重新绑定数据吗?

    试试这个:

    if (!IsPostBack)
    {
      SpecialtyList.DataBind();
    }
    

    更改RowFilter后,您可能还需要重新绑定DataView:

    protected void SpecialtyList_SelectedIndexChanged(object sender, EventArgs e)
    {
        dv.RowFilter = string.Format("department_specialty = '{0}'", SpecialtyList.SelectedValue.ToString());
        dv.DataBind();
    }