多条件搜索分页的实现

  对教材列表进行展示的时候,可以有条件的筛选结果,前台用到的是EasyUI DataGrid,后台接受查询参数,返回结果。

     这里只写成后台,数据访问层中实现的关键代码。

View Code
  1  /// <summary>
  2         /// 默认下获取分页数据
  3         /// </summary>
  4         /// <param name="pageIndex">当前页码</param>
  5         /// <param name="pageSize">每一页的行数</param>
  6         /// <returns>BookID,BookName,Author,UserName,AcaName,Category,[State],AddDate,LastUpdateTime</returns>
  7         public DataTable GetPagedModel(int pageIndex, int pageSize) 
  8         {
  9             string strOrder = "order by AddDate DESC";
 10             string strSQL = string.Format(@"select * from
 11                 (select BookID,BookName,Author,UserName,AcaName,Category,[State],AddDate,LastUpdateTime,ROW_NUMBER() over({0}) as num from ViewBookInfo where IsDel=0) as tb 
 12                 where num between {1}*({2}-1)+1 and {1}*{2} {0} ", strOrder, pageSize, pageIndex);
 13 
 14             return  SQLHelper.GetDataTable(strSQL);
 15         }
 16 
 17         /// <summary>
 18         /// 含参数的查询
 19         /// </summary>
 20         /// <param name="pageIndex"></param>
 21         /// <param name="pageSize"></param>
 22         /// <param name="paras">BookName、ClassName、DeptID、DeptPID、Category、[State]</param>
 23         /// <returns>BookID,BookName,Author,UserName,AcaName,Category,[State],AddDate,LastUpdateTime</returns>
 24         public DataTable GetPagedModel(int pageIndex, int pageSize, Hashtable ht) 
 25         {
 26             string strCondition;
 27             List<SqlParameter> parasList;
 28             string sOrder=" order by AddDate DESC";
 29 
 30             //获取参数
 31             GetSearchCondition(ht,out strCondition,out parasList);
 32 
 33             string strSQL = string.Format(@"select * from (select BookID,BookName,Author,UserName,AcaName,Category,[State],AddDate,LastUpdateTime,ROW_NUMBER() over({0}) as num from ViewBookInfo where IsDel=0 {3}) as tb 
 34                 where num between {1}*({2}-1)+1 and {1}*{2} {0} ", sOrder , pageSize, pageIndex,strCondition);
 35 
 36             return SQLHelper.GetDataTable(strSQL,parasList.ToArray());
 37 
 38         }
 39 
 40         /// <summary>
 41         /// 获取详细信息
 42         /// </summary>
 43         /// <param name="BookID"></param>
 44         /// <returns></returns>
 45         public DataTable GetDetail(int BookID) 
 46         {
 47             string strSQL = "select ClassTarget,BookFeature from BookInfo where BookID="+BookID;
 48 
 49             return SQLHelper.GetDataTable(strSQL);
 50         }
 51         /// <summary>
 52         /// 含参数记录的条数
 53         /// </summary>
 54         /// <param name="ht">BookName、ClassName、DeptID、DeptPID、Category、[State]</param>
 55         /// <returns></returns>
 56         public int GetRecordCount(Hashtable ht) 
 57         {
 58             string strCondition;
 59             List<SqlParameter> parasList;
 60 
 61             //获取参数
 62             GetSearchCondition(ht, out strCondition, out parasList);
 63 
 64             string strSQL = string.Format("select count(0) from ViewBookInfo where IsDel=0 {0} ", strCondition);
 65 
 66             return Convert.ToInt32(SQLHelper.ExecuteScalar(strSQL, parasList.ToArray()));
 67         }
 68 
 69         /// <summary>
 70         /// 装配查询参数,获取查询要的字符串,和参数集合
 71         /// </summary>
 72         /// <param name="ht">BookName、ClassName、DeptID、DeptPID、Category、[State]</param>
 73         /// <param name="sOrder"></param>
 74         /// <param name="paras"></param>
 75         private void GetSearchCondition(Hashtable ht, out string contString, out List<SqlParameter> paras) 
 76         {
 77             StringBuilder sOrder = new StringBuilder();
 78             paras=new List<SqlParameter>();
 79 
 80             if (ht.Count == 0) 
 81             {
 82                 contString = "";
 83                 return;
 84             }
 85 
 86             object oBookName = ht["BookName"];
 87             object oClassName = ht["ClassName"];
 88             object oDeptID = ht["DeptID"];
 89             object oDeptPID = ht["DeptPID"];
 90             object oCategory = ht["Category"];
 91             object oState = ht["State"];
 92 
 93             //书名
 94             if (oBookName != null && !string.IsNullOrEmpty(oBookName.ToString()))
 95             {
 96                 sOrder.Append(" and BookName like @BookName or  BookPY like @BookName");
 97                 paras.Add(new SqlParameter("@BookName",oBookName.ToString()+"%"));
 98             }
 99             //课程名
100             if(oClassName!=null&&!string.IsNullOrEmpty(oClassName.ToString()))
101             {
102                 sOrder.Append(" and  ClassName like @ClassName ");
103                 paras.Add(new SqlParameter("@ClassName",oClassName.ToString()+"%"));
104             }
105             //部门ID
106             if (oDeptID != null && !string.IsNullOrEmpty(oDeptID.ToString())) 
107             {
108                 sOrder.Append(" and DeptID=@DeptID ");
109                 paras.Add(new SqlParameter("@DeptID",Convert.ToInt32(oDeptID)));
110             }
111 
112             //上级部门PID
113             if (oDeptPID != null && !string.IsNullOrEmpty(oDeptPID.ToString())) 
114             {
115                 sOrder.Append(" and DeptPID=@DeptPID ");
116                 paras.Add(new SqlParameter("@DeptPID",Convert.ToInt32(oDeptPID)));
117             }
118 
119             //种类Category
120             if (oCategory != null && !string.IsNullOrEmpty(oCategory.ToString())) 
121             {
122                 sOrder.Append(" and Category=@Category ");
123                 paras.Add(new SqlParameter("@Category",oCategory.ToString()));
124             }
125 
126             //状态State
127             if (oState != null && !string.IsNullOrEmpty(oState.ToString())) 
128             {
129                 sOrder.Append(" and [State]=@State ");
130                 paras.Add(new SqlParameter("@State",oState.ToString()));
131             }
132 
133             contString = sOrder.ToString();
134             
135         }

  条件查询中Hashtable存储的是筛选的字段和其对应的值。

posted @ 2013-03-13 15:58  hello*boy  阅读(2918)  评论(1编辑  收藏  举报