0
我有一個執行自定義查詢的頁面,該頁面保存在數據庫的某處。 我需要能夠在gridview上啓用分頁。如何使用ROW_NUMBER分頁GridView和SQL自定義查詢
例如目的查詢保存在數據庫上它是這樣的:
select * from requestbases
這將返回10,000行。
用下面的方法讓它返回10行。
public DataTable GetGenericResults(string strsql, int pageIndex)
{
StringBuilder sb = new StringBuilder();
sb.Append("WITH MyPagedData as (");
int indexFrom = strsql.IndexOf("from");
sb.Append(strsql.Substring(0, indexFrom));
sb.Append(", ");
sb.Append("ROW_NUMBER() OVER(ORDER BY RequestBaseId DESC) as RowNum ");
sb.Append(strsql.Substring(indexFrom));
sb.Append(") ");
sb.Append("SELECT * from MyPagedData where RowNum between @StartIndex and @StartIndex + 10");
using(var connection = (SqlConnection)_context.Database.Connection)
{
var adapter = new SqlDataAdapter(sb.ToString(), connection);
adapter.SelectCommand.Parameters.Add("@StartIndex", SqlDbType.Int).Value = pageIndex;
var results = new DataSet();
adapter.Fill(results, "Results");
return results.Tables["Results"];
}
}
這是電網
var datatable = RequestBaseBL.GetGenericResults(query.QuerySql, 0);
if (datatable.Rows.Count > 0)
{
LblCount.Text = datatable.Rows.Count + " records";
PanelResults.Visible = true;
GrvCustomResults.Visible = true;
GrvCustomResults.DataSource = datatable;
GrvCustomResults.DataBind();
}
的問題是查詢本身返回10行,因此在GridView永遠不會顯示尋呼機綁定代碼。
<asp:GridView ID="GrvCustomResults" runat="server" Visible="false" AutoGenerateColumns="true">
<PagerSettings
Visible="true"
Position="TopAndBottom"
PreviousPageText="Previous"
NextPageText="Next"
Mode="NumericFirstLast" />
<HeaderStyle CssClass="gridheader" />
你可以使用一個'ObjectDataSource'並設置它的'SelectCountMethod','SelectMethod'和'EnablePaging'。在這裏看看更多的信息:http://www.codeproject.com/Articles/125541/Effective-Paging-with-GridView-Control-in-ASP-NET –
它沒有工作,我已經試過了,我想我的最好的選擇它的pageddatasource。 –