您的位置:首页 > 编程语言 > ASP

实现ASPxGridView基于AJAX和自定义数据源的分页查询

2011-08-18 18:12 513 查看
为了实现这个功能,可算是折腾了好久,因为我本人一直在用XpoDataSource绑定,不怎么关注自定义分页数据源的。

首先要明确一点的是,自定义数据源(指绑定到自己写的数据访问层,至于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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐