如何使用存储过程实现Gridview自定义分页?

有人可以将我重定向到您自己的博客链接或任何其他链接,解释有关如何使用存储过程实现gridview自定义分页的完整教程吗?

我在谷歌搜索给我2006年的旧文章。现在我使用的是asp.net 3.5和c#。

.aspx页面

 Employee Customer   
First Name: Last Name:
Middle Name: Phone Number:
Email Address:
----------- Male Female ----------- Single Married
----- Yes No ----- Yes No



代码隐藏

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; namespace TestProj { public partial class Search : System.Web.UI.Page { static IQueryable _conResults; //static IQueryable _empResults; protected void Page_Load(object sender, EventArgs e) { } protected void ddlSelector_SelectedIndexChanged(object sender, EventArgs e) { gdvCust.DataSource = null; gdvCust.DataBind(); gdvEmp.DataSource = null; gdvEmp.DataBind(); bool flag; if (ddlSelector.SelectedValue == "Employee") flag = true; else { flag = false; } foreach( Control c in empCriteria.Controls) { c.Visible = flag; } } private IQueryable CreateCustQuery() { TestDataClassDataContext dc = new TestDataClassDataContext(); var predicate = PredicateBuilder.True(); var cust = from individual in dc.Individuals join contact in dc.Contacts on individual.ContactID equals contact.ContactID select contact; if (!string.IsNullOrEmpty(txtLname.Text)) predicate = predicate.And( e => e.LastName.Contains(txtLname.Text)); if (!string.IsNullOrEmpty(txtFname.Text)) predicate = predicate.And(e => e.FirstName.Contains(txtFname.Text)); if (!string.IsNullOrEmpty(txtMname.Text)) predicate = predicate.And(e => e.MiddleName.Contains(txtMname.Text)); if (Utility.IsValidPhone(txtPhone.Text)) predicate = predicate.And(e => e.Phone.Contains(txtPhone.Text)); if (Utility.IsValidEmailAddress(txtEmail.Text)) predicate = predicate.And(e => e.EmailAddress.Contains(txtEmail.Text)); var results = cust.Where(predicate); return results; } //private void CreateEmpQuery() //{ // TestDataClassDataContext dc = new TestDataClassDataContext(); // var emp = from c in dc.Contacts // from e in dc.Employees // where c.ContactID == e.ContactID // select new // { // FirstName = c.FirstName,LastName = c.LastName, MiddleName =c.MiddleName, Phone = c.Phone, // EmailAddress = c.EmailAddress // }; // var predicate = PredicateBuilder.True<>(); // if (!string.IsNullOrEmpty(txtLname.Text)) // predicate = predicate.And(e => e.LastName.Contains(txtLname.Text)); // if (!string.IsNullOrEmpty(txtFname.Text)) // predicate = predicate.And(e => e.FirstName.Contains(txtFname.Text)); // if (!string.IsNullOrEmpty(txtMname.Text)) // predicate = predicate.And(e => e.MiddleName.Contains(txtMname.Text)); // if (Utility.IsValidPhone(txtPhone.Text)) // predicate = predicate.And(e => e.Phone.Contains(txtPhone.Text)); // if (Utility.IsValidEmailAddress(txtEmail.Text)) // predicate = predicate.And(e => e.EmailAddress.Contains(txtEmail.Text)); // var results = emp.Where(predicate); //} private void GetCustResults() { _conResults = CreateCustQuery(); gdvCust.DataSource = _conResults; gdvCust.DataBind(); } //private void GetEmpResults() //{ // _empResults = CreateEmpQuery(); // gdvEmp.DataSource = _empResults; // gdvEmp.DataBind(); //} protected void gdvCust_PageIndexChanging(object sender, GridViewPageEventArgs e) { gdvCust.PageIndex = e.NewPageIndex; gdvCust.DataSource = _conResults; gdvCust.DataBind(); } //protected void gdvEmp_PageIndexChanging(object sender, GridViewPageEventArgs e) //{ // gdvCust.PageIndex = e.NewPageIndex; // gdvEmp.DataSource = _empResults; // gdvEmp.DataBind(); //} protected void btnSearch_Click(object sender, EventArgs e) { if (ddlSelector.SelectedValue == "Customer") GetCustResults(); //else //GetEmpResults(); } } } 

在我转移到另一个我当时正在使用linq的项目之前,只完成了cust结果,但这可能有助于您了解获得gridview所需的内容。 这是使用linq和AdventureWorks作为示例数据库

现在代码解释你需要注意的是

   

以及aspx页面上的列和绑定字段,其中DataField =数据库中列的名称,而标题字段是gridview上列顶部标记的内容。

现在看看背后的代码

 private void GetCustResults() { _conResults = CreateCustQuery(); gdvCust.DataSource = _conResults; gdvCust.DataBind(); } //and protected void gdvCust_PageIndexChanging(object sender, GridViewPageEventArgs e) { gdvCust.PageIndex = e.NewPageIndex; gdvCust.DataSource = _conResults; gdvCust.DataBind(); } 

他们从数据源和分页控件进行绑定。 如果您需要更多解释,请发表评论

检查下面的代码。

 CREATE PROCEDURE getDeals @StartIndex int, @PageSize int, @TotalCount int OutPut as select @TotalCount=count(1) from mstrDeals; WITH CTE AS ( select top(@startIndex+@PageSize-1) ROW_NUMBER() OVER(ORDER BY creationdate) RowNumber,dealid,dealTitle from mstrDeals ) select * from CTE where RowNumber between @startIndex and (@startIndex+@PageSize-1) 

然后我们需要生成总页数没有行,页面大小和当前页面的分页器,下面是填充分页器的示例代码这里寻呼机链接的总数是5,可以通过重置名为totalLinkInPage的局部变量进行自定义,并具有第一个和最后一个按钮也会在当前页面首先或最后相应时自动启用或禁用。

检查生成分页代码并绑定gridview代码(参考): –

在asp.net中使用gridview中的存储过程进行自定义分页,具有良好的分页

由于自2006年以来SQL的语法没有太大变化,因此没有太多要更新的内容。 在存储过程方面,您仍然会执行ROW_Number()调用。

  With table AS ( SELECT ID, NAME, ROW_NUMBER() OVER (order by Name) as RowNumber FROM Customers ) select * from table Where RowNumber >= @RowStart and RowNumber <= @RowEnd end