实现一个搜索功能思路

搜索介面如下:


程序中需要实现如上的一个搜索功能。
[Option]有两个选项,说明结果需要一个Detail或Summary。这是二选一,而且必选一个。
[By]选择是让用户填入用户信息,或是选择部门。 当用户选择用户选择,在下出现文本框,让用户填入用户名;当用户选择部门时,在下出现下拉列表,让用户选择部门。


[DateTime]选择,也有两种情况选择,一个是选择年月份的,默认是当前年份,用户选择年份之后,选择月份;  另一个选择日期,当选择日期选项,在下出现两个文本框,可输入开始与结束日期的,也可以选择。


分析,总共6个选择,2种结果,4个条件(用户,部门,日期或月份),因此将有8个参数,这个8个参数为:@Option; @By; @ByValue; @Dt; @FDate; @EDate; @YValue; @MValue
这些参数与参数值一次性传入存储过程中。在存储过程中处理这些条件逻辑。

为做好这个搜索与显示,Insus.NET决定在前台放置一个GridView,显示结果。

 <asp:GridView ID="GridViewResult" runat="server" Width="100%" CellPadding="3" CellSpacing="0" BorderWidth="1" BorderColor="#c0c0c0" HeaderStyle-Height="25px" RowStyle-Height="25px" HeaderStyle-BackColor="#efebde"></asp:GridView>


这样可以动态装载各种样式的表格。

ok,重点在存储过程,完成所有条件,需要写好几个存储过程,首先是入口存储过程:

上面入口的存储过程,需要判断用户选择的By选择,如果是选择了'User',那就执行[dbo].[usp_PrintLog_SearchByUser],如果是选择了'Department',存储过程将执行[dbo].[usp_PrintLog_SearchByDept]。在不管是1还是2的子存储过程,已经少带了@By这个参数了。

下面我们分别来看这两个存储过程,先看第一个子存过程,需要处理@Option参数。



第二个子存储过程,需要处理@Option参数。


其中1,2,3,4存储过程,大约如下:


这样子,不管用户作出怎样的选择,均只返回一种结果,不必在程序中去做任何判断,以及与数据库多次交互。

原文地址:https://www.cnblogs.com/insus/p/3002054.html