处理多个DropDown选择的更好方法

RKh*_*RKh 4 c# asp.net-2.0 .net-2.0 observer-pattern c#-2.0

在此输入图像描述

我有一个包含多个DropDowns的菜单.我添加了代码,但目前,它完全驻留在代码隐藏文件中.我想使用任何设计模式以简单和整洁的方式处理各种选择.

报告生成标准准备如下:

报告类型DropDown选项包括:

  1. 方案类型
  2. 方案明智
  3. 区明智
  4. 逐块
  5. 所有

默认情况下,仅启用第一个DropDown.从此DropDown中选择一个选项,可启用相应的DropDowns.

当使用AJAX从任何DropDowns或DropDown中选择一个项目时Scheme,不仅这个,值DistrictBlockDropDowns也会发生变化.Scheme Type

它涉及各种SQL查询和经常启用/禁用DropDowns.我现在的代码已经成为充斥着许多IFEndIfs.

我想知道是否使用Observer pattern或使用任何方法Classes来简化此操作.任何方式使这个多项选择和填充DropDowns易于管理和简单?

编辑如下以明确要求

让我进一步澄清.

第一个DropDown是键DropDown,默认情况下在页面打开时启用.默认情况下禁用所有其他DropDowns.但这并不意味着Cascading DropDown是正确的选择,因为来自DropDowns的孩子的选择是随机的.

整个计划是为每个DropDown以可理解的形式简化代码.根据选择,有许多Ifs和ElseIfs用于选择正确的查询.

例如:用户District-wise report从"报告类型"主DropDown中选择.在这种情况下,启用了三个子DropDowns,即.

Scheme Type

Scheme

District
Run Code Online (Sandbox Code Playgroud)

如果用户从Scheme Types List中选择"ALL",则所有类别中的所有类型的方案都会在Scheme DropDown中填充.

如果用户从选项中选择特定的方案类型:Urban,Rural或Other,则Scheme DropDown会过滤方案的名称.

现在,Scheme DropDown也有一​​个ALL选项.用户可以选择ALL或选择任何特定方案.

与区相同.如果选择了ALL,则Scheme DropDown中的方案将采用所有区域中的所有方案,但如果选择了特定区域,则Scheme DropDown必须填充此区域的过滤方案.

请注意,在这种情况下,我们现在以相反的顺序移动,因为District DropDown再次过滤Scheme DropDown.

Block DropDown也是如此.

其他所选选项需要检查各种条件.假设用户没有选择任何选项或用户选择ALL.

我想用每个DropDown的名称创建单独的类.对于DropDown中的任何更改,这些类应保持听力通知(Observer).

我想我能澄清一下.

Har*_*aid 5

使用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" />
Run Code Online (Sandbox Code Playgroud)

然后你需要创建一个Web服务和几个Web方法,因为它具有以下方法签名,

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public CascadingDropDownNameValue[] GetDropDownReportTypeContents(
       string knownTypeValues, string typevalue) { ... }
Run Code Online (Sandbox Code Playgroud)

UPDATE

你已经使用if-Else-If做了类似的事情,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());
    }
Run Code Online (Sandbox Code Playgroud)

我希望我的回答可以帮到你

感谢致敬

苛刻的Baid