使用LoadOnDemand作为XML的ultrawebgrid分页

时间:2012-05-04 10:56:03

标签: web-applications pagination infragistics ultrawebgrid

我有一个启用了分页的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>

的.vb:

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

1 个答案:

答案 0 :(得分:1)

使用自定义分页时,您需要提供要加载的页面的数据。这是必要的,因为您的自定义分页可以实现为包含字母而不是example in the Infragistics help等页码。

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

  • 应删除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.AllowCustomPaging设置为false,则当您单击寻呼机中的first,prev,numbers,next和last选项时,网格将自动处理分页。这也可以让您按原样保存数据,而不必手动处理排序和过滤。如果你这样做,你仍然会删除PageIndexChanged处理程序。

请注意,对于输入后的转到按钮,您可能需要在JavaScript中设置页面,这可以使用WebGrid的goToPage客户端方法来完成。

虽然它与您遇到的问题无关,但在使用InitializeDataSource设置WebGrid的DataSource时,将EnableInternalRowsManagement设置为true无效。