我有一个数据网格,我在Subsonic框架中使用自定义分页选项(ref:http://subsonicproject.com/querying/webcast-using-paging/)。
我还有一个按州过滤数据的下拉列表。这将通过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设置是每页100条记录,但即使选择了50或25,也会出现错误。
使用Subsonic 2.1.0.0
答案 0 :(得分:0)
使用 qry.OrderAsc(New String(){“state asc,city asc”})
答案 1 :(得分: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.
您可以看到,首先对有序数据进行排序并将其插入到临时表中,但检索到所需页面时不再进行排序。这最终导致获取所请求页面的正确数据,但没有正确排序。
需要修改第二个select
,以便在从临时表中获取数据时,数据的顺序正确。像这样:
SELECT * FROM #temp
WHERE _indexID BETWEEN ((@Page - 1) * @PageSize + 1) AND (@Page * @PageSize) {3}
然后当然重新编译代码然后离开: - )