程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> CSLA.Net在Web項目中使用SQL2005的分頁

CSLA.Net在Web項目中使用SQL2005的分頁

編輯:C#入門知識

正用CSLA.NET做一個Web的項目, 發現CSLA的模型在開發Web時, 不是很適合中國國情.

他的一系列模版, 都是基於主從表單的考慮, 比如"采購單", 這樣有單頭, 有明細行的情況, 這在WinForm下很棒.

但Web下, 大部分對象都單獨用一個表單進行編輯, 所以感覺有些別扭.

我的理解還不深入, 還不斷學習中, 整個框架讓我受益很多. 廢話完了, 進入正題.

要在CSLA模型中方便的使用Sql2005的分頁, 我們要做四步.

第一步: 實現一個PagingCriteria, 用來傳遞分頁參數.

    [Serializable()]
    public class PagingCriteria<T> : CriteriaBase
    {
        #region Filed
        public IDictionary ParamDic { get; private set; }
        public string SortExpression { get; private set; }
        public string DefaultOrder { get; private set; }
        public int StartRowIndex { get; private set; }
        public int MaximumRows { get; private set; }
        #endregion

        protected PagingCriteria(){ }

        public PagingCriteria(IDictionary paramDic, int startRowIndex, int maximumRows, string sortExpression, string defaultOrder)
            : base(typeof(T))
        {
            ParamDic = paramDic;
            SortExpression = sortExpression;
            DefaultOrder = defaultOrder;
            StartRowIndex = startRowIndex;
            MaximumRows = maximumRows;
        }
    }

 

第二步: 實現PagingWrapper, 將普通的Sql語句封裝成可分頁的語句.

    public static class PagingWrapper
    {
        private const string SQLTEMPLATE = @"With TargetTable AS(select ROW_NUMBER() OVER (order by Temp.{1})as RowNumber,Temp.* from ({0}) as Temp) select * from TargetTable WHERE RowNumber between {2} and {3};Select count(*) from ({0}) Temp";
        public static string Wrap(string sqlQuery, string SortExpression, int startRowIndex, int maximumRows)
        {
            if (string.IsNullOrEmpty(SortExpression))
                throw new Exception("未指定排序列.");

            return string.Format(SQLTEMPLATE, sqlQuery, SortExpression, startRowIndex +1, startRowIndex + maximumRows);
        }

        public static string Wrap<T>(string sqlQuery, PagingCriteria<T> criteria)
        {
            string order = (string.IsNullOrEmpty(criteria.SortExpression)) ? criteria.DefaultOrder : criteria.SortExpression;
            return Wrap(sqlQuery, order, criteria.StartRowIndex, criteria.MaximumRows);
        }
    }

 

 

第三部: 在集合對象中調用.這裡是RoleList.

using (SqlCommand cm = cn.CreateCommand())
{
    cm.CommandType = CommandType.Text;
    string sql = 

							
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved