2009-06-17 5 views
0

Subsonic 프레임 워크에서 사용자 지정 페이징 옵션 (ref : http://subsonicproject.com/querying/webcast-using-paging/)을 사용하는 DataGrid가 있습니다.Subsonic-Paging-Order problem

또한 주별로 데이터를 필터링하는 드롭 다운 목록도 있습니다. 이는 addwhere 호출을 통해 쿼리에 추가됩니다.

데이터는 주 ASC 및 도시 ASC 순으로 정렬됩니다.

상태가 선택되지 않았을 때 데이터가 잘 정리되어 있으므로 addwhere가 절에 추가되지 않습니다. 하지만 페이지 매김이 시작될만큼 충분한 레코드가있는 상태를 선택하면 일부 레코드가 순서가 잘못 표시됩니다. 또한 항상 현재 페이지의 마지막 몇 레코드가 그리드 중간에 표시되는 것으로 나타났습니다. 코드의

조각은 loadgrid합니다 :

Dim qry As New SubSonic.Query({myTableSchema}) 
    If ddlStates.SelectedValue.Trim.ToLower <> "all states" Then 
     qry.AddWhere("state", ddlStates.SelectedValue.Trim) 
    End If 
    qry.ORDER_BY("state", "ASC").ORDER_BY("city", "ASC") 
    qry.PageSize = ddlDisplay.SelectedValue 
    qry.PageIndex = pageNumber 
    gvOrganizers.DataSource = qry.ExecuteDataSet 
    gvOrganizers.DataBind() 

문제는 상태가 선택과 데이터의 한 페이지가있을 때 나타나는하지 않는 것 같습니다. 기본 ddlDisplay 설정은 페이지 당 100 개의 레코드이지만 50 또는 25를 선택하더라도 오류가 나타납니다. 음속 2.1.0.0

답변

0

사용 qry.OrderAsc 사용

(새 문자열을() { "상태 오름차순, 도시 ASC"})

PAGING_VIEW_SQL 템플릿 버그 ( SqlProvider.cs있는 것으로 보인다
0

, 라인 1702).

... 
SELECT _indexID = IDENTITY(int, 1, 1), {1} INTO #temp FROM {0} WHERE 1 = 0 
INSERT INTO #temp ({1}) SELECT {1} FROM {0} {2} {3} 

SELECT * FROM #temp 
WHERE _indexID BETWEEN ((@Page - 1) * @PageSize + 1) AND (@Page * @PageSize) 

--clean up 
DROP TABLE #temp", where {3} represents serialized order-by-collection. 

당신은 분류와 임시 테이블에 삽입 된 데이터를 주문하지만 필요한 페이지보다 다시 정렬하지 않고 검색됩니다 처음에 그것을 볼 수 있습니다 여기에 조각입니다. 결국 요청 된 페이지에 대해 올바른 데이터를 얻지 만 적절한 정렬이 이루어지지 않게됩니다.

두 번째 select은 임시 테이블에서 데이터를 가져올 때 데이터가 올바른 순서로 수정되어야합니다. 이처럼 : 다음

SELECT * FROM #temp  
WHERE _indexID BETWEEN ((@Page - 1) * @PageSize + 1) AND (@Page * @PageSize) {3} 

와 물론 코드를 다시 컴파일하면 :-)

갈 떨어져