实现ASPxGridView基于AJAX和自定义数据源的分页查询
2011-08-18 18:12
513 查看
为了实现这个功能,可算是折腾了好久,因为我本人一直在用XpoDataSource绑定,不怎么关注自定义分页数据源的。
首先要明确一点的是,自定义数据源(指绑定到自己写的数据访问层,至于ObjectDataSource可不可以,目前我还没验证过)不支持自动汇总、分组、自动筛选(包括列头筛选)、非绑定列,这在官方文档关于DataSourceForceStandardPaging属性的说明中有提到,如果真要实现这些功能,还要自己写很多非常复杂的代码,个人觉得还不如在GridView外自己实现。也就是说我们可以实现的就是自定义分页及排序。废话少说,贴代码(数据访问层的代码就不贴了):
前台:
效果图:
本文来源于阿朴的专栏,http://blog.csdn.net/rogerslee/archive/2009/10/03/4631051.aspx
首先要明确一点的是,自定义数据源(指绑定到自己写的数据访问层,至于ObjectDataSource可不可以,目前我还没验证过)不支持自动汇总、分组、自动筛选(包括列头筛选)、非绑定列,这在官方文档关于DataSourceForceStandardPaging属性的说明中有提到,如果真要实现这些功能,还要自己写很多非常复杂的代码,个人觉得还不如在GridView外自己实现。也就是说我们可以实现的就是自定义分页及排序。废话少说,贴代码(数据访问层的代码就不贴了):
前台:
Imports DevExpress.Xpo.DB Partial Public Class CustomPaging Inherits System.Web.UI.Page Private product As New NorthwindLibrary.BusinessFacade.Product(New DevExpress.Xpo.Session) Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load BindData() End Sub Private Sub BindData() Dim ds As Data.DataSet = product.GetEntityList(GetHeaderFilterExpression(), Pager.PageIndex + 1, Pager.ItemsPerPage, SortFieldName, SortDirection) gv.DataSource = ds gv.DataBind() Pager.ItemCount = ds.Tables(1).Rows(0).Item(1).ToString End Sub Protected Sub gv_BeforeColumnSortingGrouping(ByVal sender As Object, ByVal e As DevExpress.Web.ASPxGridView.ASPxGridViewBeforeColumnGroupingSortingEventArgs) Handles gv.BeforeColumnSortingGrouping Select Case e.Column.SortOrder Case DevExpress.Data.ColumnSortOrder.Ascending SortDirection = WebControls.SortDirection.Ascending Case DevExpress.Data.ColumnSortOrder.Descending SortDirection = WebControls.SortDirection.Descending Case Else End Select SortFieldName = e.Column.FieldName BindData() End Sub Protected Sub Pager_PageIndexChanging(ByVal source As Object, ByVal e As DevExpress.Web.ASPxPager.PagerPageEventArgs) Handles Pager.PageIndexChanging Dim js As String = "gv.PerformCallback();" ScriptManager.RegisterStartupScript(Page, Me.GetType(), "", js, True) End Sub ''' <summary> ''' ''' 排序字段 ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> Public Property SortFieldName() As String Get If Session("SortFieldName") = Nothing Then Session("SortFieldName") = "产品ID" End If Return Session("SortFieldName").ToString End Get Set(ByVal value As String) Session("SortFieldName") = value End Set End Property Public Property SortDirection() As SortDirection Get If Session("SortDirection") = Nothing Then Session("SortDirection") = SortDirection.Ascending End If Return Session("SortDirection") End Get Set(ByVal value As SortDirection) Session("SortDirection") = value End Set End Property Public Function GetHeaderFilterExpression() As String Dim filter As String = String.Empty For Each col In gv.Columns Try If col.FilterExpression <> String.Empty Then filter += col.FilterExpression + " & " End If Catch ex As Exception End Try Next filter = filter.Trim.TrimEnd("&").Replace("&", "AND") If filter <> String.Empty Then filter = "WHERE " & filter End If Return filter End Function Protected Sub gv_CustomColumnSort(ByVal sender As Object, ByVal e As DevExpress.Web.ASPxGridView.CustomColumnSortEventArgs) Handles gv.CustomColumnSort End Sub Protected Sub gv_CustomDataCallback(ByVal sender As Object, ByVal e As DevExpress.Web.ASPxGridView.ASPxGridViewCustomDataCallbackEventArgs) Handles gv.CustomDataCallback End Sub Protected Sub gv_HeaderFilterFillItems(ByVal sender As Object, ByVal e As DevExpress.Web.ASPxGridView.ASPxGridViewHeaderFilterEventArgs) Handles gv.HeaderFilterFillItems If e.Column.Settings.AllowHeaderFilter = DevExpress.Web.ASPxClasses.DefaultBoolean.True Then e.Values.Clear() e.AddShowAll() Dim dt As DataTable = product.GetEntityFilterData(e.Column.FieldName, Nothing) For Each row As DataRow In dt.Rows e.AddValue(row(0).ToString, row(0).ToString) Next GetHeaderFilterExpression() End If End Sub End Class
效果图:
本文来源于阿朴的专栏,http://blog.csdn.net/rogerslee/archive/2009/10/03/4631051.aspx
相关文章推荐
- JQuery实现基于Ajax的数据查询、排序和分页功能
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能
- ajax实现分页,多条件查询步骤(基于nodejs)
- Ajax写分页查询(实现不刷新页面)
- GridView 实现自定义分页、排序、查询、添加、编辑、多选删除
- GridView 实现自定义分页、排序、查询、添加、编辑、多选删除 之代码规范
- GridView利用分页存储过程实现真正的自定义分页查询
- JQuery+Ajax实现数据查询、排序和分页功能
- JQuery+Ajax实现数据查询、排序和分页功能
- SQL行号排序和分页(SQL查询中插入行号 自定义分页的另类实现)
- ES Java API_基于search template实现按品牌分页查询模板
- 基于Json的Ajax无刷新分页效果实现(一)
- 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
- 基于HTML5 Bootstrap搭建的后台模板,分页,模糊查询已经全部JS实现,无需编码,嵌入数据即可开发,内置8款皮肤,欧美风格,非常好用!
- 基于Dapper的分页实现,支持筛选,排序,结果集总数,多表查询,非存储过程
- GridView 实现自定义分页、排序、查询、添加、编辑、多选删除 之代码规范