Web applications 使用LoadOnDemand作为XML的ultrawebgrid分页

Web applications 使用LoadOnDemand作为XML的ultrawebgrid分页,web-applications,pagination,infragistics,ultrawebgrid,Web Applications,Pagination,Infragistics,Ultrawebgrid,我有一个启用了分页功能的ultrawebgrid。由于要显示的数据约为10K行,因此通过设置LoadOnDemand=“XML”属性来执行分页 我面临的问题是,当我浏览页面时,我可以看到一个AJAX调用正在发生,但显示的数据只是第一个页面的数据 例如:我有10页数据,当我点击“3”页时,网格显示“1”页本身的内容 但如果我对任何列进行排序或筛选,则排序和筛选结果与预期一致 .aspx: <DisplayLayout BorderCollapseDefault="Separate" Name

我有一个启用了分页功能的ultrawebgrid。由于要显示的数据约为10K行,因此通过设置LoadOnDemand=“XML”属性来执行分页

我面临的问题是,当我浏览页面时,我可以看到一个AJAX调用正在发生,但显示的数据只是第一个页面的数据

例如:我有10页数据,当我点击“3”页时,网格显示“1”页本身的内容

但如果我对任何列进行排序或筛选,则排序和筛选结果与预期一致

.aspx:

<DisplayLayout BorderCollapseDefault="Separate" Name="SampleGrid" RowHeightDefault="20px" SelectTypeRowDefault="Single" Version="4.00" AllowColSizingDefault="Free" SelectTypeColDefault="Single" TableLayout="Fixed" AllowAddNewDefault="Yes" AllowSortingDefault="OnClient" AllowUpdateDefault="Yes" AutoGenerateColumns="False" CellClickActionDefault="Edit" ViewType="Hierarchical">.

<Pager><PagerStyle CssClass="igwgPgrBlack2k7" /></Pager>

</DisplayLayout>
Protected Sub SampleGrid_InitializeDataSource(ByVal sender As Object, ByVal e As Infragistics.WebUI.UltraWebGrid.UltraGridEventArgs) Handles SampleGrid.InitializeDataSource

Dim dsData As System.Data.DataSet

Dim sql As String

dsData = DataManager.ExecuteDataset(ConnectionType.XXX, Data.CommandType.Text, sql) // getting dataset


'Me.SampleGrid.DisplayLayout.Pager.PageCount = Math.Ceiling(dsData.Tables(0).Rows.Count/Me.SampleGrid.DisplayLayout.Pager.PageSize) //on first load, i'm getting the PageSize as 8 whereas it has to be 50 rows, I tried setting the page size in 'InitializeLayout' but 'InitializeDataSource' event is called first. So where do i set the grid's PageSize.


SampleGrid.DataSource = dsData
End Sub


Protected Sub SampleGrid_InitializeLayout(ByVal sender As Object, ByVal e As Infragistics.WebUI.UltraWebGrid.LayoutEventArgs) Handles SampleGrid.InitializeLayout

Dim htmlString As New StringBuilder

SampleGrid.Browser  = BrowserLevel.Xml

e.Layout.LoadOnDemand   = LoadOnDemand.Xml

e.Layout.RowsRange = 50

e.Layout.XmlLoadOnDemandType = XmlLoadOnDemandType.Accumulative

SampleGrid.DisplayLayout.Pager.StyleMode=PagerStyleMode.QuickPages

SampleGrid.DisplayLayout.EnableInternalRowsManagement=True 

SampleGrid.DisplayLayout.Pager.AllowCustomPaging=True 

SampleGrid.DisplayLayout.Pager.AllowPaging = True

SampleGrid.DisplayLayout.Pager.PageSize = 50

SampleGrid.DisplayLayout.Pager.QuickPages = 5

htmlString.Append("<table cellspacing='0' cellpadding='0' style='width:100%;border:solid 1px Black;'>")

htmlString.Append("<tr>")

htmlString.Append("<td width='25%' align='right'>Viewing page [currentpageindex] of [pagecount] </td>")

htmlString.Append("<td align='center'>")

htmlString.Append("<b>[page:1:First]&nbsp;[prev]</b>")

htmlString.Append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")

htmlString.Append("[default]")

htmlString.Append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")

htmlString.Append("<b>[next]&nbsp;[page:[pagecount]:Last]</b>")

htmlString.Append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")

htmlString.Append("</td>")

htmlString.Append("<td width='25%' align='left' title='Enter page number and press Enter'>")

htmlString.Append("Go to:<input id='PagerGotoPageNumber' size='5' style='vertical-align:text-bottom;height:20px;font-family:verdana;font-size:8pt;padding:0 0 0 0;border:solid 1px black' onkeydown='return gotoPageKeyDown();' type='text' autocomplete='off' />")

htmlString.Append("<button style='height:22px' onclick='gotoPage();'>Go</button>")

htmlString.Append("</td>")

htmlString.Append("</tr>")

htmlString.Append("</table>")

SampleGrid.DisplayLayout.Pager.Pattern=htmlString.ToString()

End Sub


Private Sub SampleGrid_PageIndexChanged(ByVal sender As System.Object, ByVal e As Infragistics.WebUI.UltraWebGrid.PageEventArgs) Handles SampleGrid.PageIndexChanged

        SampleGrid.DisplayLayout.Pager.CurrentPageIndex = e.NewPageIndex

    End Sub
.vb:

<DisplayLayout BorderCollapseDefault="Separate" Name="SampleGrid" RowHeightDefault="20px" SelectTypeRowDefault="Single" Version="4.00" AllowColSizingDefault="Free" SelectTypeColDefault="Single" TableLayout="Fixed" AllowAddNewDefault="Yes" AllowSortingDefault="OnClient" AllowUpdateDefault="Yes" AutoGenerateColumns="False" CellClickActionDefault="Edit" ViewType="Hierarchical">.

<Pager><PagerStyle CssClass="igwgPgrBlack2k7" /></Pager>

</DisplayLayout>
Protected Sub SampleGrid_InitializeDataSource(ByVal sender As Object, ByVal e As Infragistics.WebUI.UltraWebGrid.UltraGridEventArgs) Handles SampleGrid.InitializeDataSource

Dim dsData As System.Data.DataSet

Dim sql As String

dsData = DataManager.ExecuteDataset(ConnectionType.XXX, Data.CommandType.Text, sql) // getting dataset


'Me.SampleGrid.DisplayLayout.Pager.PageCount = Math.Ceiling(dsData.Tables(0).Rows.Count/Me.SampleGrid.DisplayLayout.Pager.PageSize) //on first load, i'm getting the PageSize as 8 whereas it has to be 50 rows, I tried setting the page size in 'InitializeLayout' but 'InitializeDataSource' event is called first. So where do i set the grid's PageSize.


SampleGrid.DataSource = dsData
End Sub


Protected Sub SampleGrid_InitializeLayout(ByVal sender As Object, ByVal e As Infragistics.WebUI.UltraWebGrid.LayoutEventArgs) Handles SampleGrid.InitializeLayout

Dim htmlString As New StringBuilder

SampleGrid.Browser  = BrowserLevel.Xml

e.Layout.LoadOnDemand   = LoadOnDemand.Xml

e.Layout.RowsRange = 50

e.Layout.XmlLoadOnDemandType = XmlLoadOnDemandType.Accumulative

SampleGrid.DisplayLayout.Pager.StyleMode=PagerStyleMode.QuickPages

SampleGrid.DisplayLayout.EnableInternalRowsManagement=True 

SampleGrid.DisplayLayout.Pager.AllowCustomPaging=True 

SampleGrid.DisplayLayout.Pager.AllowPaging = True

SampleGrid.DisplayLayout.Pager.PageSize = 50

SampleGrid.DisplayLayout.Pager.QuickPages = 5

htmlString.Append("<table cellspacing='0' cellpadding='0' style='width:100%;border:solid 1px Black;'>")

htmlString.Append("<tr>")

htmlString.Append("<td width='25%' align='right'>Viewing page [currentpageindex] of [pagecount] </td>")

htmlString.Append("<td align='center'>")

htmlString.Append("<b>[page:1:First]&nbsp;[prev]</b>")

htmlString.Append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")

htmlString.Append("[default]")

htmlString.Append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")

htmlString.Append("<b>[next]&nbsp;[page:[pagecount]:Last]</b>")

htmlString.Append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;")

htmlString.Append("</td>")

htmlString.Append("<td width='25%' align='left' title='Enter page number and press Enter'>")

htmlString.Append("Go to:<input id='PagerGotoPageNumber' size='5' style='vertical-align:text-bottom;height:20px;font-family:verdana;font-size:8pt;padding:0 0 0 0;border:solid 1px black' onkeydown='return gotoPageKeyDown();' type='text' autocomplete='off' />")

htmlString.Append("<button style='height:22px' onclick='gotoPage();'>Go</button>")

htmlString.Append("</td>")

htmlString.Append("</tr>")

htmlString.Append("</table>")

SampleGrid.DisplayLayout.Pager.Pattern=htmlString.ToString()

End Sub


Private Sub SampleGrid_PageIndexChanged(ByVal sender As System.Object, ByVal e As Infragistics.WebUI.UltraWebGrid.PageEventArgs) Handles SampleGrid.PageIndexChanged

        SampleGrid.DisplayLayout.Pager.CurrentPageIndex = e.NewPageIndex

    End Sub
Protected Sub-SampleGrid\u InitializeDataSource(ByVal sender作为对象,ByVal e作为Infragistics.WebUI.UltraWebGrid.UltraGridEventArgs)处理SampleGrid.InitializeDataSource
将dsData设置为System.Data.DataSet
将sql设置为字符串
dsData=DataManager.ExecuteDataset(ConnectionType.XXX,Data.CommandType.Text,sql)//获取数据集
'Me.SampleGrid.DisplayLayout.Pager.PageCount=Math.天花板(dsData.Tables(0.Rows.Count/Me.SampleGrid.DisplayLayout.Pager.PageSize)//在第一次加载时,我将页面大小设置为8,而它必须是50行,我尝试在'InitializeLayout'中设置页面大小,但首先调用'InitializeDataSource'事件。那么我在哪里设置网格的页面大小呢。
SampleGrid.DataSource=dsData
端接头
受保护的子SampleGrid_InitializeLayout(ByVal sender作为对象,ByVal e作为Infragistics.WebUI.UltraWebGrid.LayoutEventArgs)处理SampleGrid.InitializeLayout
Dim htmlString作为新的StringBuilder
SampleGrid.Browser=BrowserLevel.Xml
e、 Layout.LoadOnDemand=LoadOnDemand.Xml
e、 Layout.RowsRange=50
e、 Layout.XmlLoadOnDemandType=XmlLoadOnDemandType
SampleGrid.DisplayLayout.Pager.StyleMode=PagerStyleMode.QuickPages
SampleGrid.DisplayLayout.EnableInternalRowsManagement=True
SampleGrid.DisplayLayout.Pager.AllowCustomPaging=True
SampleGrid.DisplayLayout.Pager.AllowPaging=True
SampleGrid.DisplayLayout.Pager.PageSize=50
SampleGrid.DisplayLayout.Pager.QuickPages=5
htmlString.Append(“”)
htmlString.Append(“”)
附加(“查看页面[pagecount]的[currentpageindex]”)
htmlString.Append(“”)
htmlString.Append(“[page:1:First][prev]”)
htmlString.Append(“”)
htmlString.Append(“[默认]”)
htmlString.Append(“”)
追加(“[next][page:[pagecount]:Last]”)
htmlString.Append(“”)
htmlString.Append(“”)
htmlString.Append(“”)
附加(“转到:”)
htmlString.Append(“Go”)
htmlString.Append(“”)
htmlString.Append(“”)
htmlString.Append(“”)
SampleGrid.DisplayLayout.Pager.Pattern=htmlString.ToString()
端接头
私有子SampleGrid_PageIndexChanged(ByVal sender作为System.Object,ByVal e作为Infragistics.WebUI.UltraWebGrid.PageEventArgs)处理SampleGrid.PageIndexChanged
SampleGrid.DisplayLayout.Pager.CurrentPageIndex=e.NewPageIndex
端接头

使用自定义分页,您将提供要加载的页面的数据。这是必要的,因为您的自定义分页可能实现为具有字母而不是页码,如

如果您希望这样做,则需要进行以下更改:

  • 应删除PageIndexChanged事件
  • 要绑定到的数据集应仅包含特定页面的元素。请注意,这也会对排序和筛选产生影响,并且可能会阻止它们工作,除非您返回已筛选和/或已排序的结果
下面是一个简单的示例,演示如何使用您正在使用的代码进行分页:

Protected Sub UltraWebGrid1_InitializeDataSource(sender As Object, e As Infragistics.WebUI.UltraWebGrid.DataSourceEventArgs) Handles UltraWebGrid1.InitializeDataSource        
    Me.UltraWebGrid1.DisplayLayout.Pager.PageCount = 4

    Me.UltraWebGrid1.DataSource = Me.GetEmployees(Me.UltraWebGrid1.DisplayLayout.Pager.CurrentPageIndex)
End Sub

    Private Function GetEmployees(page As Integer) As DataTable
    Dim dtData As DataTable = New DataTable("Employees")

    dtData.Columns.Add("EmployeeID", GetType(Integer))
    dtData.Columns.Add("Name", GetType(String))
    dtData.Columns.Add("OnSite", GetType(Boolean))
    dtData.Columns.Add("DateOfHire", GetType(DateTime))
    dtData.Columns.Add("Department", GetType(Integer))

    For i As Integer = (page - 1) * 50 To (page - 1) * 50 + 50 Step 1
        dtData.Rows.Add(New Object() {i, String.Format("Name {0}", i), (i Mod 2 = 0), DateTime.Today, i Mod 8})
    Next

    Return dtData
End Function

'Protected Sub UltraWebGrid1_PageIndexChanged(sender As Object, e As Infragistics.WebUI.UltraWebGrid.PageEventArgs) Handles UltraWebGrid1.PageIndexChanged
'    Me.UltraWebGrid1.DisplayLayout.Pager.CurrentPageIndex = e.NewPageIndex
'End Sub
请注意,您可能不需要使用自定义分页,如果将DisplayLayout.AllowCustomCompaging设置为false,则当您单击分页器中的第一个、上一个、数字、下一个和最后一个选项时,网格将自动处理分页。这还允许您保持数据的原样,而不必手动处理排序和筛选。如果这样做,仍然会删除PageIndexChanged处理程序

请注意,对于输入之后的go to按钮,可能需要使用JavaScript设置页面,这可以通过的goToPage客户端方法完成


虽然它与您遇到的问题无关,但当使用InitializeDataSource设置WebGrid的数据源时,设置为true没有任何影响。

根据您的说法(您发布的代码片段),当自定义分页设置为true时,我们必须在导航时手动提供每个页面的数据,还需要手动处理排序和筛选,然后我们必须在网格的InitializeDataSource事件中设置数据源,我们可以直接在页面加载上实现这一点,甚至不需要将LoadOnDemand设置为XML,因为我们正在手动处理所有功能。SampleGrid.Browser=BrowserLevel.Xml&SampleGrid.DisplayLayout.LoadOnDemand=LoadOnDemand.Xml的用途是什么。继续…正如您所建议的,我确实将自定义分页设置为false。现在分页很好,我可以对整个数据集进行排序,但过滤只在我所在的页面上进行。你能建议我们如何实现对整个数据集的过滤吗。是否有任何属性需要设置或需要手动修改。将LoadOnDemand和Browser设置为Xml的价值在于,这为您提供了AJAX按需加载功能。如果要在页面加载中处理此问题,则在分页时不会得到异步刷新。对于过滤问题,您设置了哪些与过滤相关的网格属性?