RKh*_*RKh 4 c# asp.net-2.0 .net-2.0 observer-pattern c#-2.0
我有一个包含多个DropDowns的菜单.我添加了代码,但目前,它完全驻留在代码隐藏文件中.我想使用任何设计模式以简单和整洁的方式处理各种选择.
报告生成标准准备如下:
报告类型DropDown选项包括:
- 方案类型
- 方案明智
- 区明智
- 逐块
- 所有
默认情况下,仅启用第一个DropDown.从此DropDown中选择一个选项,可启用相应的DropDowns.
当使用AJAX从任何DropDowns或DropDown中选择一个项目时Scheme
,不仅这个,值District
和Block
DropDowns也会发生变化.Scheme Type
它涉及各种SQL查询和经常启用/禁用DropDowns.我现在的代码已经成为充斥着许多IF
和EndIfs
.
我想知道是否使用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).
我想我能澄清一下.
使用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)
你已经使用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
归档时间: |
|
查看次数: |
2316 次 |
最近记录: |