C# 如何在asp.net中筛选以下列表框?

C# 如何在asp.net中筛选以下列表框?,c#,asp.net,listbox,C#,Asp.net,Listbox,我有4个列表框(州、县、市和代码)。以下是一些限制条件: 没有一个列表框被禁用 可以随时选择任何列表框,这意味着用户无需选择特定的顺序 过滤是向前和向后的。我的意思是,如果用户从lstStates中选择一个状态,它将过滤lstCountries、lstCities和lstZipcodes。如果用户从lstZipcodes中选择zipcode,它将过滤lstCities、lstCountries和lstState 列表框允许多个选择 每个listbox都绑定到一个datatable以获取其初始

我有4个列表框(州、县、市和代码)。以下是一些限制条件:

  • 没有一个列表框被禁用

  • 可以随时选择任何列表框,这意味着用户无需选择特定的顺序

  • 过滤是向前和向后的。我的意思是,如果用户从lstStates中选择一个状态,它将过滤lstCountries、lstCities和lstZipcodes。如果用户从lstZipcodes中选择zipcode,它将过滤lstCities、lstCountries和lstState

  • 列表框允许多个选择

每个listbox都绑定到一个datatable以获取其初始数据。datatable是从sqlserver存储过程中检索的。每个listbox都有自己的存储过程,例如,lstStates有一个名为GetStates的存储过程,它返回一列(State),listbox的DataValueField和DataTextField都设置为State。与lstStates类似,lstCities绑定到一个datatable,该datatable从GetCities存储过程(即city)获取一列

我想指出的另一件事是,我正在连接一个ObjectDataSource以获取datatable。

已经有人询问:

[编辑] 好的,您需要做的是向每个[myListbox]\u SelectedIndexChanged事件添加一个事件。更改选择后,需要根据这些选择刷新所有其他列表框。我假设这需要由数据库来处理,因为以任何其他方式将状态链接到ZipCodes都会很糟糕。因此,假设您的状态关系数据在数据库中的某个位置

因此,您需要在db(或LINQ中间层)中有通过ZIP等方式获取状态的进程。在每个selection changed事件中,将新选择发送回db存储过程,然后根据返回的数据重新绑定listbox。您应该能够为每个存储过程创建一个存储过程,如果没有传入zip,则返回所有状态,依此类推。
[/edit]

为了澄清,在您最初加载页面时,您正在加载所有Zipcode、所有城市、所有州和所有国家/地区

这对我来说似乎有点麻烦。这就是我要质疑的需求类型。(当然,我不知道你还没有提出问题,也不知道有什么好的答案从中得出)。

ScriptManager.RegisterStartupScript(Page,Page.GetType(),“bab”,“CacheItems();”,true)

变量ddlText、ddlValue、ddl、lblMesg; 函数CacheItems(){ ddlText=新数组(); ddlValue=新数组(); ddl=document.getElementById(“”);
对于(var i=0;iYes,我问了这个问题,但觉得它不足以描述最好的答案。最大的问题是,您的db是否有将州连接到ZipCodes的表?以及将县连接到ZipCodes的表?我假设一个城市只能处于一个州。如上所述,我总是将编辑放在自己的块中。如果您需要删除部分或Original将其放在括号中:[已删除,请参见下文]。好吧,所有表格都在那里,但在多个州可以有具有相同naame的城市。“好吧,所有表格都在那里,但在多个州可以有具有相同naame的城市”.好的,但是每个城市都有一个州FK吗?听起来可能有一些数据库结构问题需要解决。好的一点,所有城市都有大量记录。要求用户首先选择一个ZIP或州可能真的会提高性能。呸,typo.improver=改进。是的,我检索了所有ZIP代码、州、市、县.我只是以这些为例,我检索的实际数据要小得多,但我觉得使用Zipcode、州、市和县会是一个更好的例子,因为每个人都知道它们是什么。