我有一个带有多个 DropDowns 的菜单。我添加了代码,但目前,它完全驻留在代码隐藏文件中。我想使用任何设计模式以简单而整洁的方式处理各种选择。
报告生成标准准备如下:
报告类型下拉选项包括:
默认情况下,仅启用第一个 DropDown。从此 DropDown 中选择一个选项,启用相应的 DropDown。
不仅如此,当使用 AJAX 从这些 DropDowns 或 Scheme
DropDown 中的任何一个中选择项目时, District
、 Block
和 Scheme Type
DropDowns 的值也会发生变化。
它经常涉及各种 SQL 查询和启用/禁用 DropDown。我现在的代码已经被许多 IF
和 EndIfs
弄得杂乱无章。
我想知道是否使用 Observer pattern
或任何使用 Classes
的方法来简化此操作。有什么方法可以使这种多重选择和 DropDowns 的填充变得易于管理和简单?
在下面编辑以明确要求
让我进一步澄清。
第一个DropDown 是DropDown 的关键,它在页面打开时默认启用。默认情况下禁用所有其他下拉菜单。但这并不意味着 Cascading DropDown 是正确的选择,因为从子 DropDowns 中的选择是随机的。
整个计划是以易于理解的形式为每个 DropDown 简化代码。有许多 Ifs 和 ElseIfs 涉及根据选择选择正确的查询。
例如:用户从 Report Type 主要 DropDown 中选择 District-wise report
。在这种情况下,启用了三个子 DropDown,即。
Scheme Type
Scheme
District
如果用户从方案类型列表中选择“全部”,则所有类别中的所有方案类型都将填充在方案下拉列表中。
如果用户从以下选项中选择特定的方案类型:城市、农村或其他,方案下拉列表将过滤方案名称。
现在,Scheme DropDown 还有一个选项 ALL。用户可以选择 ALL 或选择任何特定方案。
区也是一样。如果选择ALL,Scheme DropDown 中的scheme 会取所有区的所有scheme,但如果选择了特定区,Scheme DropDown 必须填充该区过滤后的scheme。
请注意,在这种情况下,我们现在以相反的顺序移动,因为 District DropDown 再次过滤 Scheme DropDown。
这同样适用于 Block DropDown。
除了选定的选项外,还有多种条件需要检查。假设用户没有选择任何选项或用户选择全部。
我想用每个 DropDown 的名称创建单独的类。对于 DropDown 中的任何更改,这些类应该保持收听通知(观察者)。
我想我能够澄清。
最佳答案
使用 AJAX Control Toolkit 是符合您要求的解决方案。
在 AJAX Control Toolkit 中,有 CascadingDropDown Control
标签语法:
<ajaxToolkit:CascadingDropDown ID="ddlReportType" runat="server"
TargetControlID="ddlSchemeType"
Category="SchemeType"
PromptText="Please select a ReportType"
LoadingText="[Loading Report Types...]"
ServicePath="ReportService.asmx"
ServiceMethod="GetDropDownReportTypeContents"
ParentControlID="DropDownList1"
SelectedValue="SomeValue" />
然后你需要为它创建一个 Web 服务和几个具有以下方法签名的 Web 方法,
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public CascadingDropDownNameValue[] GetDropDownReportTypeContents(
string knownTypeValues, string typevalue) { ... }
更新
你已经使用 if-Else-If 做了类似的事情,答案是基于假设给出的,纯粹是实现的一个例子。
string query = "SELECT * FROM Reports";
List<string> filters = new List<string>();
bool ReportType = true;
bool SchemeType = true;
bool Scheme = true;
bool District = true;
bool Block = true;
if (ReportType)
filters.Add("ReportType = true");
if (SchemeType)
filters.Add("SchemeType = true");
if (Scheme)
filters.Add("Scheme = true");
if (District)
filters.Add("District = true");
if (Block)
filters.Add("Block = true");
if (filters.Count() > 0)
{
query = query + " WHERE " + string.Join(" AND ", filters.ToArray());
}
希望我的回答对你有帮助
感谢致敬
严厉的拜德
关于c# - 处理多个下拉选择的更好方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7539719/