我有4个列表框(lstStates,lstCounties,lstCities和lstZipcodes)。以下是一些限制因素:
没有列出任何列表框。
任何列表框都可以随时选择,这意味着用户无需选择特定的订单。
过滤是向前和向后。这意味着,如果用户从lstStates中选择一个状态,它将过滤lstCounties,lstCities和lstZipcodes。如果用户从lstZipcodes中选择一个zipcode,它将过滤lstCities,lstCounties和lstStates。
列表框允许多项选择。
每个列表框都绑定到数据表以获取其初始数据。从sqlserver存储过程中检索数据表。每个列表框都有自己的存储过程,例如,lstStates有一个名为GetStates,它返回一列(State),ListBoxes DataValueField和DataTextField都设置为State。与lstStates类似,lstCities绑定到一个数据表,该数据表从GetCities存储过程获取一列,即城市。
我想指出的另一件事是我连接一个ObjectDataSource来获取数据表。
答案 0 :(得分:2)
已经被问到:What is the most efficient way to filter listboxes based on selections of another in c#?
[编辑] 好的,您需要做的是为每个[myListbox] _SelectedIndexChanged事件添加一个事件。更改选择后,您需要根据这些选择刷新所有其他列表框。我认为这需要由数据库处理,因为任何其他方式将状态链接到ZipCodes将是丑陋的。因此,大概是您的状态< - > Zips< - > Counties关系的数据在您的数据库中某处。
所以你需要在db(或LINQ中间层)中通过Zips获取状态等等。在每个选择更改事件上,将新选择发送回db sproc,然后根据返回数据重新绑定列表框。如果没有传入zip,则应该能够为每个返回所有状态的sproc创建一个sproc,依此类推。 [/编辑]
答案 1 :(得分:0)
为了澄清一下,在您初次加载页面时,您正在加载所有邮政编码,所有城市,所有州和所有国家/地区?
这对我来说似乎有点麻烦。这是我要质疑的要求类型。 (当然,我不知道你还没有质疑它,或者有一些好的答案来自它)。
答案 2 :(得分:0)
ScriptManager.RegisterStartupScript(Page,Page.GetType(),“bab”,“CacheItems();”,true);
var ddlText,ddlValue,ddl,lblMesg; function CacheItems(){ ddlText = new Array(); ddlValue = new Array(); ddl = document.getElementById(“”); for(var i = 0; i