0

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

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

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

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

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

4

2 回答 2

2

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

假设 LBStates 是状态列表框,lbCities 是城市列表框,dtCities 是表单级别的 DataTable 变量,其中包含所有城市,并且它有一个状态列...

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

将 selectedIndexChanged 事件连接到状态列表框(在初始化代码中)

 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;
  }
于 2008-12-19T16:13:22.150 回答
1

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

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

于 2008-12-19T16:13:36.223 回答