Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据c#中另一个列表框的选择筛选列表框的最有效方法是什么?_C#_Asp.net_Data Binding_Listbox - Fatal编程技术网

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

根据c#中另一个列表框的选择筛选列表框的最有效方法是什么?,c#,asp.net,data-binding,listbox,C#,Asp.net,Data Binding,Listbox,我有几个列表框,它们从一个单独的存储过程中获取各自的数据 如果用户在1个列表框中选择了一个选项,则应过滤其他列表框 我以前通过向存储过程添加逻辑来实现这一点,但有时它似乎变得很长 有人知道更好的方法吗 我现在设置它的方式是,对于每个ListBox,我都有一个ObjectDataSource,它调用一个方法,该方法调用数据库中存储的过程来填充ListBox。您可以尝试更改代码,这样ListBox就可以绑定到DataView,而不是直接绑定到ADO.Net datatable。数据视图可以独立于它们

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

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

我以前通过向存储过程添加逻辑来实现这一点,但有时它似乎变得很长

有人知道更好的方法吗


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

您可以尝试更改代码,这样ListBox就可以绑定到DataView,而不是直接绑定到ADO.Net datatable。数据视图可以独立于它们所基于的基础数据表进行排序和筛选

假设LBStates是state ListBox,lbCities是City ListBox,dtCities是包含所有城市的表单级数据表变量,并且它有一个state列

     DataView dvCities = dtCities.DefaultView; 
     dvCities.RowFilter = "State=" + lbStates.SelectedItem;
     lbCities.DataSource = dvCities;
将selectedIndexChanged事件连接到状态列表框(在初始化代码中)

在状态列表框SelectedIndexChanged事件中,添加相同的代码

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

您可以尝试更改代码,使Listbox不直接绑定到ADO.Net datatable,而是绑定到DataView。数据视图可以独立于它们所基于的基础数据表进行排序和筛选

假设LBStates是state ListBox,lbCities是City ListBox,dtCities是包含所有城市的表单级数据表变量,并且它有一个state列

     DataView dvCities = dtCities.DefaultView; 
     dvCities.RowFilter = "State=" + lbStates.SelectedItem;
     lbCities.DataSource = dvCities;
将selectedIndexChanged事件连接到状态列表框(在初始化代码中)

在状态列表框SelectedIndexChanged事件中,添加相同的代码

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

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


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

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


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

Charles,您能举一个包含州和城市的列表框示例吗。我不清楚您在问什么。。。你说的州和城市是什么意思?你是说城市,在城市所在的州增加一列?还是州和市混在一起?每个都作为自己的项目?或者您是指一个城市列表框,它根据用户在另一个仅包含州的列表框中选择的州进行筛选?一个列表框表示州,一个列表框表示城市。当你选择一个州时,它只显示所选州的城市。好的,我明白了,但是如果我的城市数据表没有州,你能举一个包含州和城市的列表框的例子吗。我不清楚你在问什么。。。你说的州和城市是什么意思?你是说城市,在城市所在的州增加一列?还是州和市混在一起?每个都作为自己的项目?或者您是指一个城市列表框,它根据用户在另一个仅包含州的列表框中选择的州进行筛选?一个列表框表示州,一个列表框表示城市。当您选择一个州时,它只显示所选州的城市。好的,我知道了,但是如果我的城市数据表没有州列怎么办