ObjectDataSource+DataPager+GridView+Nhibernate分页

如何使用GridView(需要实现IPageableItemContainer接口)加DataPager实现分页功能。

并使用ObjectDataSource控件来获得数据源实现分页。

1,ObjectDataSource属性设置

SelectMethod:获得分页的数据源。将获得数据源的方法名赋给该属性。
至少传入2个参数,起始页startRowIndex,每页显示页数maximumRows。
SelectCountMethod:获得总数据行数。将获得数据源总行数的方法名赋给该属性。
注意:方法的返回类型必须是int类型(或小于该类型的),不然会
GridView出现容量不足异常(gridview不会抛出此异常,Listview会抛此异常)。
StartRowIndexParameterName:起始页参数,对应方法参数名startRowIndex
MaximumRowsParameterName:每页显示数参数,对应方法参数名maximumRows
EnablePaging:设置为"True"
其它查询参数可以根据情况在SelectParameters中增加相应查询条件参数。
2,DataPager属性设置
PageSize:设置分页的大小,分页时会将该属性的值传递给maximumRows
PagedControlID:分页的控件(GridView,ListView)的ID。
3,GridView属性设置
AllowPaging:设置为"True" 
DataSourceID:ObjectDataSource的ID
4,Nhibernate分页方法:
example:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public IList<ExceptionLog> GetExceptionLogByQuery(DateTime loTime, DateTime hiTime, string appId, int startRowIndex, int maximumRows)
        {
          var result =  this .Session.GetISession().CreateCriteria<ExceptionLog>()
                 .Add(Restrictions.Between( "CreateTime" ,loTime,hiTime))
                 .Add(Restrictions.Eq( "appId" , appId))
                 .SetMaxResults(maximumRows)
                 .SetFirstResult(startRowIndex).List<ExceptionLog>();
          return result;
        }
        public int GetExceptionLogByQueryCount(DateTime loTime,DateTime hiTime, string appId)
        {
          
           var result = this .Session.GetISession().CreateCriteria<ExceptionLog>()
                 .Add(Restrictions.Between( "CreateTime" , loTime, hiTime))
                .Add(Restrictions.Eq( "appId" , appId))
                .SetProjection(Projections.RowCount()).UniqueResult< int >();
           return result;
        }

5,例子

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<asp:GridView ID= "GridView1" runat= "server" AllowPaging= "True"
        DataSourceID= "ObjectDataSource1" >
    </asp:GridView>
    <asp:DataPager ID= "pager" runat= "server" PageSize= "8"
        PagedControlID= "GridView1" >
        <Fields>
            <asp:NextPreviousPagerField ButtonCssClass= "command" FirstPageText= "«" PreviousPageText= "‹"
                RenderDisabledButtonsAsLabels= "true" ShowFirstPageButton= "true" ShowPreviousPageButton= "true"
                ShowLastPageButton= "false" ShowNextPageButton= "false" />
            <asp:NumericPagerField ButtonCount= "7" NumericButtonCssClass= "command" CurrentPageLabelCssClass= "current"
                NextPreviousButtonCssClass= "command" />
            <asp:NextPreviousPagerField ButtonCssClass= "command" LastPageText= "»" NextPageText= "›"
                RenderDisabledButtonsAsLabels= "true" ShowFirstPageButton= "false" ShowPreviousPageButton= "false"
                ShowLastPageButton= "true" ShowNextPageButton= "true" />
        </Fields>
    </asp:DataPager>
    <asp:ObjectDataSource ID= "ObjectDataSource1" runat= "server" SelectMethod= "GetExceptionLogByQuery"
        SelectCountMethod= "GetExceptionLogByQueryCount" TypeName= "BLL.ExceptionLog"
        StartRowIndexParameterName= "startRowIndex" MaximumRowsParameterName= "maximumRows"
        EnablePaging= "True" >
        <SelectParameters>
            <asp:ControlParameter ControlID= "txtLowTime" Name= "loTime" PropertyName= "Text" Type= "DateTime"
                DefaultValue= "2000-1-1" />
            <asp:ControlParameter ControlID= "txtHiTime" Name= "hiTime" PropertyName= "Text" Type= "DateTime"
                DefaultValue= "2010-11-1" />
            <asp:ControlParameter ControlID= "txtUserId" Name= "userId" PropertyName= "Text" Type= "String"
                DefaultValue= "joe" />
        </SelectParameters>
    </asp:ObjectDataSource>

实现接口:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/// <summary>
    ///
    /// </summary>
    [ToolboxData( "<{0}:GridView runat=server></{0}:GridView>" )]
    public class GridView : System.Web.UI.WebControls.GridView, IPageableItemContainer
    {
        /// <summary>
        /// TotalRowCountAvailable event key
        /// </summary>
        private static readonly object EventTotalRowCountAvailable = new object ();
        /// <summary>
        ///
        /// </summary>
        /// <param name="dataSource"></param>
        /// <param name="dataBinding"></param>
        /// <returns></returns>
        protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
        {
            int rows = base .CreateChildControls(dataSource, dataBinding);
            //  if the paging feature is enabled, determine
            //  the total number of rows in the datasource
            if ( this .AllowPaging)
            {
                //  if we are databinding, use the number of rows that were created,
                //  otherwise cast the datasource to an Collection and use that as the count
                int totalRowCount = dataBinding ? rows : ((ICollection)dataSource).Count;
                //  raise the row count available event
                IPageableItemContainer pageableItemContainer = this as IPageableItemContainer;
                this .OnTotalRowCountAvailable(
                    new PageEventArgs(
                        pageableItemContainer.StartRowIndex,
                        pageableItemContainer.MaximumRows,
                        totalRowCount
                    )
                );
                //  make sure the top and bottom pager rows are not visible
                if ( this .TopPagerRow != null )
                {
                    this .TopPagerRow.Visible = false ;
                }
                if ( this .BottomPagerRow != null )
                {
                    this .BottomPagerRow.Visible = false ;
                }
            }
            return rows;
        }
        #region IPageableItemContainer Interface
        /// <summary>
        ///
        /// </summary>
        /// <param name="startRowIndex"></param>
        /// <param name="maximumRows"></param>
        /// <param name="databind"></param>
        void IPageableItemContainer.SetPageProperties(
            int startRowIndex, int maximumRows, bool databind)
        {
            int newPageIndex = (startRowIndex / maximumRows);
            this .PageSize = maximumRows;
            if ( this .PageIndex != newPageIndex)
            {
                bool isCanceled = false ;
                if (databind)
                {
                    //  create the event args and raise the event
                    GridViewPageEventArgs args = new GridViewPageEventArgs(newPageIndex);
                    this .OnPageIndexChanging(args);
                    isCanceled = args.Cancel;
                    newPageIndex = args.NewPageIndex;
                }
                //  if the event wasn't cancelled
                //  go ahead and change the paging values
                if (!isCanceled)
                {
                    this .PageIndex = newPageIndex;
                    if (databind)
                    {
                        this .OnPageIndexChanged(EventArgs.Empty);
                    }
                }
                if (databind)
                {
                    this .RequiresDataBinding = true ;
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        int IPageableItemContainer.StartRowIndex
        {
            get { return this .PageSize * this .PageIndex; }
        }
        /// <summary>
        ///
        /// </summary>
        int IPageableItemContainer.MaximumRows
        {
            get { return this .PageSize; }
        }
        /// <summary>
        ///
        /// </summary>
        event EventHandler<PageEventArgs> IPageableItemContainer.TotalRowCountAvailable
        {
            add { base .Events.AddHandler(GridView.EventTotalRowCountAvailable, value); }
            remove { base .Events.RemoveHandler(GridView.EventTotalRowCountAvailable, value); }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="e"></param>
        protected virtual void OnTotalRowCountAvailable(PageEventArgs e)
        {
            EventHandler<PageEventArgs> handler = (EventHandler<PageEventArgs>) base .Events[GridView.EventTotalRowCountAvailable];
            if (handler != null )
            {
                handler( this , e);
            }
        }
        #endregion
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值