在c#中根据另一个选择来过滤列表框的最有效方法是什么?

时间:2008-12-19 16:05:16

标签: c# asp.net data-binding listbox

我有几个列表框可以从单独的存储过程中获取每个数据。

如果用户在1个列表框中选择了一个选项,它应该过滤其他列表框。

我之前通过向存储过程添加逻辑来完成此操作,但有时它似乎变得非常长。

有谁知道更好的方法来解决这个问题?

我现在设置的方式是,对于每个ListBox,我有一个ObjectDataSource,它调用一个方法来调用数据库中的存储过程来填充列表框。

2 个答案:

答案 0 :(得分:2)

您可以尝试更改代码,以便不将Listbox直接绑定到ADO.Net数据表,而是绑定到DataView。 DataViews可以独立于它们所基于的基础DataTable进行排序和过滤......

假设LBStates是状态ListBox,lbCities是City ListBox,dtCities是表单级DataTable变量,其中包含所有城市,并且它有一个State Column ...

     DataView dvCities = dtCities.DefaultView; 
     dvCities.RowFilter = "State=" + lbStates.SelectedItem;
     lbCities.DataSource = dvCities;

将selectedIndexChanged事件连接到States ListBox(在初始化代码中)

 lbStates.SelectedIndexChanged += lbStates_SelectedIndexChanged;

并在States ListBox SelectedIndexChanged事件中添加相同的代码...

  private void lbStates_SelectedIndexChanged(object sender, event e)
  {
     DataView dvCities = dtCities.DefaultView; 
     dvCities.RowFilter = "State=" + lbStates.SelectedItem;
     lbCities.DataSource = dvCities;
  }

答案 1 :(得分:1)

列表框通常用于显示“查找”数据,这些数据不会经常更改。像状态列表或实体类型。因此,在尝试提高效率时要考虑的一件事是缓存。每次想要获取状态列表时,都没有理由往返数据库。

此外,如果您可能希望在单个数据库调用中返回所有列表框数据并存储在强类型数据集中。然后,您可以根据列表框选择过滤数据集内容,只需将数据集内容重新绑定到其他列表框。