2009-06-17 11 views
0

Subsonicフレームワークでカスタムページングオプション(ref:http://subsonicproject.com/querying/webcast-using-paging/)を使用しているDataGridがあります。Subsonic-Paging-Orderの問題

また、州によってデータをフィルタリングするドロップダウンもあります。これは、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() 

問題は状態が選択されたときに表示されていないようだと、データの唯一の1ページがあります。デフォルトのddlDisplay設定は1ページあたり100レコードですが、50または25を選択してもエラーが表示されます。亜音速2.1.0.0

答えて

0

使用を使用して

qry.OrderAsc(新しい文字列(){ "状態のASC、都市ASC"})

0

PAGING_VIEW_SQLテンプレート(SqlProvider.cs、バグがあるようですライン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. 

あなたがソートされ、一時テーブルに挿入されたデータを命じたが、必要なページより再度、ソートせずに検索された最初でそれを見ることができます:ここでは、スニペットです。最終的に、要求されたページの適切なデータが得られますが、適切なソートが行われません。

第2のselectは、テンポラリテーブルから取得したデータが正しい順序になるように変更する必要があります。このように:

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

、その後の進路コードを再コンパイルし、あなたが:-)

行くオフ
関連する問題