Sorting 亚音速寻呼次序问题

Sorting 亚音速寻呼次序问题,sorting,subsonic,custompaging,Sorting,Subsonic,Custompaging,我有一个datagrid,我正在亚音速框架中使用自定义分页选项(ref:) 我还有一个按州过滤数据的下拉列表。这将通过addwhere调用添加到查询中 数据由州ASC和城市ASC排序 如果没有选择任何状态,因此没有将addwhere添加到子句中,则数据的顺序似乎很好。但是,如果您选择的状态有足够的记录,从而导致分页开始,则某些记录将按顺序显示。我还注意到,在当前页面上的最后几条记录似乎总是显示在网格中间的某个地方。 加载网格的代码片段: Dim qry As New SubSonic.Q

我有一个datagrid,我正在亚音速框架中使用自定义分页选项(ref:)

我还有一个按州过滤数据的下拉列表。这将通过addwhere调用添加到查询中

数据由州ASC和城市ASC排序

如果没有选择任何状态,因此没有将addwhere添加到子句中,则数据的顺序似乎很好。但是,如果您选择的状态有足够的记录,从而导致分页开始,则某些记录将按顺序显示。我还注意到,在当前页面上的最后几条记录似乎总是显示在网格中间的某个地方。 加载网格的代码片段:

    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()
Dim qry作为新的亚音速.Query({myTableSchema})
如果ddlStates.SelectedValue.Trim.ToLower“all states”,则
qry.AddWhere(“state”,ddlStates.SelectedValue.Trim)
如果结束
由(“州”、“ASC”)下达的订单。由(“市”、“ASC”)下达的订单
qry.PageSize=ddlDisplay.SelectedValue
qry.PageIndex=页码
gvOrganizers.DataSource=qry.ExecuteDataSet
gvOrganizers.DataBind()
当选择一个状态并且只有一页数据时,问题似乎不会出现。默认ddlDisplay设置为每页100条记录,但即使选择了50或25条,也会出现错误


使用亚音速2.1.0.0

使用qry.OrderAsc(新字符串(){“state asc,city asc”})
分页视图\u 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.
您可以看到,在第一次排序时,已排序的数据被排序并插入到临时表中,但在没有再次排序的情况下检索到所需的页面。这最终导致为请求的页面获取正确的数据,但没有正确的排序

需要修改第二个
选择
,以便从临时表中获取数据时,数据顺序正确。像这样:

SELECT * FROM #temp    
WHERE _indexID BETWEEN ((@Page - 1) * @PageSize + 1) AND (@Page * @PageSize) {3}
然后,当然,重新编译代码,然后开始:-)