2012-05-04 9 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 핸들러가 여전히 제거됩니다.

입력 후 이동 버튼의 경우 goToPage 클라이언트 측 메소드 인 WebGrid을 사용하여 JavaScript로 페이지를 설정해야 할 수 있습니다.

발생하는 문제와 관련이 없지만 InitializeDataSource를 사용하여 WebGrid의 데이터 소스를 설정할 때 EnableInternalRowsManagement을 true로 설정해도 아무런 영향이 없습니다.

+0

(코드 스 니펫이 게시 됨) 맞춤 페이지가 true로 설정된 경우 우리는 탐색 할 때 수동으로 각 페이지의 데이터를 제공해야하며 수동으로 정렬 및 필터링을 처리해야합니다. 그리드의 InitializeDataSource 이벤트에서 DataSource를 설정하면 페이지로드시이를 직접 수행 할 수 있으며 모든 기능을 수동으로 처리 할 때 XML로 LoadOnDemand를 설정할 필요조차 없습니다. SampleGrid.Browser = BrowserLevel.Xml 및 SampleGrid.DisplayLayout.LoadOnDemand = LoadOnDemand.Xml의 사용법은 무엇입니까? Continue ... –

+0

제안한대로 사용자 지정 페이징을 false로 설정했습니다.이제 페이지 매김이 잘되어 전체 데이터 집합을 정렬 할 수는 있지만 필터링은 내가 속한 페이지에서만 수행됩니다. 전체 데이터 집합에 대해 필터링을 수행하는 방법을 제안 할 수 있습니까? 우리가 수동으로 설정하거나 설정할 필요가있는 속성이 있습니까? –

+1

LoadOnDemand 및 Browser를 Xml로 설정하면 AJAX로드 온 디맨드 기능을 사용할 수 있습니다. 페이지로드시이를 처리해야한다면 페이징 할 때 비동기 새로 고침이 발생하지 않습니다. 필터링 관련 질문에 대해서는 필터링과 관련하여 그리드의 어떤 속성을 설정 했습니까? – alhalama