我有一個啓用了分頁的ultrawebgrid。由於要顯示的數據大約爲10K行,因此通過設置LoadOnDemand =「XML」屬性執行分頁。使用LoadOnDemand作爲XML的ultrawebgrid分頁
我面對的問題是當我瀏覽頁面時,我可以看到一個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] [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
根據你(代碼片段u've posted),自定義分頁設置爲true,我們必須手動爲每個頁面提供數據,因爲我們導航並手動處理排序和過濾,然後我們必須在Grid的InitializeDataSource事件中設置DataSource,我們可以在頁面加載時直接實現這一點,我們甚至不需要將LoadOnDemand設置爲XML,因爲我們正在手動處理所有功能。 SampleGrid.Browser = BrowserLevel.Xml和SampleGrid.DisplayLayout.LoadOnDemand = LoadOnDemand.Xml有什麼用處。繼續... –
正如你所建議的,我沒有將自定義分頁設置爲false。現在分頁沒問題,我可以對整個數據集進行排序,但只能在我所在的頁面上進行篩選。您能否建議我們如何實現整個數據集的篩選?是否有任何財產需要設置或我們是否需要手動處理。 –
將LoadOnDemand和Browser設置爲Xml的價值在於,它爲您提供了AJAX按需加載功能。如果您要在頁面加載中處理此問題,則在分頁時不會進行異步刷新。對於有關過濾的問題,您設置了與過濾相關的網格屬性? – alhalama