2011-11-17 103 views
1

我正在C#/ ASP中编写一个编辑页面,并且有一组级联下拉列表,这些列表在数据库中已经具有需要为用户预先选择的值。在页面本身,我已经在使用:在C#ASP中预填充多个级联下拉列表

<asp:CascadingDropDown ID="CascadingDropDown1" runat="server" TargetControlID="itemMCat" Category="itemMCat" PromptText="Select a Main Category" ServicePath="categoryService.asmx" ServiceMethod="getMCat"></asp:CascadingDropDown> 
<asp:CascadingDropDown ID="CascadingDropDown2" runat="server" TargetControlID="itemCat" ParentControlID="itemMCat" PromptText="Please select a Category" ServiceMethod="getCat" ServicePath="categoryService.asmx" Category="itemCat"></asp:CascadingDropDown> 
<asp:CascadingDropDown ID="CascadingDropDown3" runat="server" TargetControlID="itemSCat" ParentControlID="itemCat" PromptText="Please select a Sub Category" ServiceMethod="getSubCat" ServicePath="categoryService.asmx" Category="itemSCat"></asp:CascadingDropDown>  

来操作列表。但是,由于这个原因,它迫使用户不得不重新选择值(因为它们是以前选择的)。这对我来说是个问题,因为它是一个编辑页面,我只想让它们改变需要改变的内容,而不是重新选择所有内容。

在后端,我选择数据和调用函数来填充列表(起初,只是试图将下拉列表设置为数据库中的值,但由于后面的代码不起作用在页面加载之前运行[所以在代码顶部运行之前])。此代码确实有效,但仅在上述代码被取出时才有效。如果未取出,则此代码不起作用。

Dictionary<string, string> catagoryMList; 
catagoryMList = CowansPublic.getMCat(); 

Dictionary<string, string> catagoryList; 
catagoryList = CowansPublic.getCat(mainCategory); 

Dictionary<string, string> catagorySList; 
catagorySList = CowansPublic.getSubCat(category); 

itemMCat.DataSource = catagoryMList; 
itemMCat.DataTextField = "Value"; 
itemMCat.DataValueField = "Key"; 
itemMCat.DataBind(); 
itemMCat.SelectedValue = mainCategory; 

itemCat.DataSource = catagoryList; 
itemCat.DataTextField = "Value"; 
itemCat.DataValueField = "Key"; 
itemCat.DataBind(); 
itemCat.SelectedValue = category; 

itemSCat.DataSource = catagorySList; 
itemSCat.DataTextField = "Value"; 
itemSCat.DataValueField = "Key"; 
itemSCat.DataBind(); 
itemSCat.SelectedValue = subCategory; 

那么,如何保持级联下拉效果,但所有3下拉列表已经填入保存的信息?提前致谢。

**编辑:响应于**的评论

@Nelson李嘉欣:我的意思它只有在顶码取出的是,我不能工作预先选择一个用户有选择选择(根据数据库中的数据),将.selectedValue代码放入代码隐藏页面。

@Arthur P:是的,DDL1是唯一一个你可以做任何事情的人,除非你在其中选择了一些东西,这会激活DDL2,等等。但是因为这是编辑页面,所以我希望它们全部都是当前已经选择的选项。取出代码的顶部,我的代码隐藏了这一点。但是,它不再像级联下拉式一样工作。

+0

我不明白。你说过:“这段代码确实有效,但只有当上面的代码被取出时”。在这种情况下,如果它有效,那么问题是什么?什么不见​​了? –

+0

请澄清一下这个问题 - 当用户从DDL1中选择值时,DDL2会根据它填充一些东西;对于DDL2和DDL3也是如此,但是每当新的列表填充时,旧的都会丢失它的价值? –

回答

3

您必须设置cascading dropdown extenders本身的SelectedValue性质,他们的目标控制的不是那些:

CascadingDropDown1.SelectedValue = mainCategory; 
CascadingDropDown2.SelectedValue = category; 
CascadingDropDown3.SelectedValue = subCategory; 
+0

太棒了,我会试试这个。谢谢。 – James

+0

非常感谢。这正是我必须做的。非常感激! – James