Web applications 使用LoadOnDemand作为XML的ultrawebgrid分页
我有一个启用了分页功能的ultrawebgrid。由于要显示的数据约为10K行,因此通过设置LoadOnDemand=“XML”属性来执行分页 我面临的问题是,当我浏览页面时,我可以看到一个AJAX调用正在发生,但显示的数据只是第一个页面的数据 例如:我有10页数据,当我点击“3”页时,网格显示“1”页本身的内容 但如果我对任何列进行排序或筛选,则排序和筛选结果与预期一致 .aspx: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
<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] [prev]</b>")
htmlString.Append(" ")
htmlString.Append("[default]")
htmlString.Append(" ")
htmlString.Append("<b>[next] [page:[pagecount]:Last]</b>")
htmlString.Append(" ")
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] [prev]</b>")
htmlString.Append(" ")
htmlString.Append("[default]")
htmlString.Append(" ")
htmlString.Append("<b>[next] [page:[pagecount]:Last]</b>")
htmlString.Append(" ")
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按需加载功能。如果要在页面加载中处理此问题,则在分页时不会得到异步刷新。对于过滤问题,您设置了哪些与过滤相关的网格属性?