在C#ASP中预填充多个级联下拉列表

时间:2011-11-17 17:30:58

标签: c# asp.net drop-down-menu

我正在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 Reis:我的意思是只有在取出顶级代码后才能使我无法预先选择用户选择的选项(根据数据库中的数据)将.selectedValue代码放入代码隐藏页面。

@Arthur P:是的,DDL1是唯一可以做任何事情的人,直到你选择了一些东西,激活DDL2,依此类推。但由于这是编辑页面,我希望它们全部处于活动状态,并且已经进行了当前选择。取出代码的顶部,我的代码隐藏实现了这一点。但是它不再作为级联下拉工作了。

1 个答案:

答案 0 :(得分:4)

您必须自己设置cascading dropdown extendersSelectedValue属性,而不是目标控件的属性:

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