2012-05-04 12 views
0

私はページングを有効にしたultrawebgridを持っています。表示されるデータが約10K行であるため、ページ設定はLoadOnDemand = "XML"プロパティを設定することによって実行されます。XMLとしてLoadOnDemandを使用した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]&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

。これは、カスタムページングがexample in the Infragistics helpのようなページ番号ではなく文字を含むように実装されるため、必要です。

あなたがこれを行うために探している場合は、次の変更を行う必要があります:

  • PageIndexChangedイベントを削除する必要があります。
  • バインド先のデータセットには、特定のページの要素のみが含まれている必要があります。これは並べ替えとフィルタリングにも影響を与え、フィルタリングされた結果やソートされた結果が返されない限り、動作しない可能性があります。

でページングが使用しているコードで作業を示して簡単な例:あなたがfalseにDisplayLayout.AllowCustomPaging設定した場合は、カスタムページングを使用する必要はないかもしれない

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 

注意グリッドは、ポケベルの最初、前、次、最後のオプションをクリックすると自動的にページングを処理します。これにより、データをそのまま保ち、ソートやフィルタリングを手動で処理する必要もありません。これを行うと、PageIndexChangedハンドラは削除されます。

入力後の[戻る]ボタンの場合は、JavaScriptでページを設定する必要があります。これは、WebGridのgoToPageクライアント側メソッドで行うことができます。

あなたが持っている問題とは関係ありませんが、EnableInternalRowsManagementをtrueに設定しても、InitializeDataSourceを使用してWebGridのデータソースを設定しても効果はありません。

+0

あなたによれば(コードスニペットが公開されています)、カスタムページングがtrueに設定されていると、手動でページを並べ替える必要があります。グリッドのInitializeDataSourceイベントでDataSourceを設定すると、これをページの読み込みで直接行うことができ、すべての機能を手動で処理するので、XMLとしてLoadOnDemandを設定する必要はありません。 SampleGrid.Browser = BrowserLevel.Xml&SampleGrid.DisplayLayout.LoadOnDemand = LoadOnDemand.Xmlの使用法は何ですか? Continue ... –

+0

提案したように、カスタムページングをfalseに設定しました。今ページネーションは問題なく、データセット全体の並べ替えを行うことができますが、フィルタリングは私が入っているページでのみ行われます。どのようにしてデータセット全体に対してフィルタリングを行うことができますか?設定するプロパティがあるか、それを手動で行う必要がありますか? –

+1

LoadOnDemandとBrowserをXmlに設定すると、AJAXのロードオンデマンド機能が得られます。ページのロード時にこれを処理する場合は、ページング時に非同期のリフレッシュは発生しません。フィルタリングに関する質問については、フィルタリングに関連してグリッドのどのプロパティを設定しましたか? – alhalama

関連する問題