2010-04-07 97 views
1

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

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

+0

是否有必要使用存储过程? – vittore 2010-04-07 20:26:29

+0

是的,先生,现在至少不能删除现有的功能(SP)。现在数据足够大,并且gridview中的默认分页功能,你知道,不够聪明... – Jango 2010-04-07 20:32:42

+0

您从未评论过我的解决方案 – 2010-04-13 20:14:05

回答

2

.aspx页面中

<asp:DropDownList ID="ddlSelector" AutoPostBack="true" runat="server" 
     onselectedindexchanged="ddlSelector_SelectedIndexChanged" > 
     <asp:ListItem>Employee</asp:ListItem> 
     <asp:ListItem>Customer</asp:ListItem> 
    </asp:DropDownList> 

    <asp:Button ID="btnSearch" runat="server" onclick="btnSearch_Click" Text="Search" /> 

    <br /> 
    <table> 
     <tr> 
      <td class="txtclmn"> 
       First Name:</td> 
      <td> 
       <asp:TextBox ID="txtFname" runat="server"></asp:TextBox> 
      </td> 
      <td class="txtclmn"> 
       Last Name:</td> 
      <td> 
       <asp:TextBox ID="txtLname" runat="server"></asp:TextBox> 
      </td> 
     </tr> 
     <tr> 
      <td class="txtclmn"> 
       Middle Name:</td> 
      <td> 
       <asp:TextBox ID="txtMname" runat="server"></asp:TextBox> 
      </td> 
      <td class="txtclmn"> 
       Phone Number:</td> 
      <td> 
       <asp:TextBox ID="txtPhone" runat="server"></asp:TextBox> 
      </td> 
     </tr> 
     <tr> 
      <td class="txtclmn"> 
       Email Address:</td> 
      <td> 
       <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox> 
      </td> 
      <td class="txtclmn"> 
      </td> 
      <td> 
      </td> 

     </tr> 

    </table> 
    <div runat="server" id="empCriteria"> 
    <table > 
     <tr> 
      <td class="txtclmn"> 
       <asp:Label ID="lblHdate" runat="server" Text="Hire Date:"></asp:Label> 
      </td> 
      <td> 
       <asp:TextBox ID="txtHMonth" runat="server" MaxLength="2" CssClass="input2char"></asp:TextBox> 
       <asp:Label ID="lblHdash1" runat="server" Text="-"></asp:Label> 
       <asp:TextBox ID="txtHDay" runat="server" MaxLength="2" CssClass="input2char"></asp:TextBox> 
       <asp:Label ID="lblHdash2" runat="server" Text="-"></asp:Label> 
       <asp:TextBox ID="txtHYear" runat="server" MaxLength="4" CssClass="input4char"></asp:TextBox> 
      </td> 
      <td class="txtclmn"> 
       <asp:Label ID="lblBdate" runat="server" Text="Birth Date:"></asp:Label> 
       </td> 
      <td> 
       <asp:TextBox ID="txtBMonth" runat="server" MaxLength="2" CssClass="input2char"></asp:TextBox> 
       <asp:Label ID="lblBdash1" runat="server" Text="-"></asp:Label> 
       <asp:TextBox ID="txtBDay" runat="server" MaxLength="2" CssClass="input2char"></asp:TextBox> 
       <asp:Label ID="lblBdash2" runat="server" Text="-"></asp:Label> 
       <asp:TextBox ID="txtBYear" runat="server" MaxLength="4" CssClass="input4char"></asp:TextBox> 
      </td> 
     </tr> 
     <tr> 
      <td class="txtclmn"> 
       <asp:Label ID="lblLoginId" runat="server" Text="Login ID:"></asp:Label> 
      </td> 
      <td> 
       <asp:TextBox ID="txtLogin" runat="server"></asp:TextBox> 
      </td> 
      <td class="txtclmn"> 
       <asp:Label ID="lblJobTitle" runat="server" Text="Job Title:"></asp:Label></td> 
      <td> 
       <asp:TextBox ID="txtJobTitle" runat="server"></asp:TextBox> 
      </td> 
     </tr> 
     <tr> 
      <td class="txtclmn"> 
       <asp:Label ID="lblGender" runat="server" Text="Gender:"></asp:Label> 
      </td> 
      <td> 
       <asp:DropDownList ID="ddlGender" runat="server" style="width: 73px"> 
        <asp:ListItem Value="-1">-----------</asp:ListItem> 
        <asp:ListItem Value="M">Male</asp:ListItem> 
        <asp:ListItem Value="F">Female</asp:ListItem> 
       </asp:DropDownList> 
      </td> 
      <td class="txtclmn"> 
       <asp:Label ID="lblMarStat" runat="server" Text="Marital Status:"></asp:Label> 
      </td> 
      <td> 
       <asp:DropDownList ID="ddlMarStat" runat="server"> 
        <asp:ListItem Value="-1">-----------</asp:ListItem> 
        <asp:ListItem Value="S">Single</asp:ListItem> 
        <asp:ListItem Value="M">Married</asp:ListItem> 
       </asp:DropDownList> 
      </td> 
     </tr> 
     <tr> 
      <td class="txtclmn"> 
       <asp:Label ID="lblActive" runat="server" Text="Active:"></asp:Label> 
      </td> 
      <td> 
       <asp:DropDownList ID="ddlActive" runat="server"> 
        <asp:ListItem Value="-1">-----</asp:ListItem> 
        <asp:ListItem Value="1">Yes</asp:ListItem> 
        <asp:ListItem Value="0">No</asp:ListItem> 
       </asp:DropDownList> 
      </td> 
      <td class="txtclmn"> 
       <asp:Label ID="lblSalary" runat="server" Text="Salaried:"></asp:Label></td> 
      <td> 
       <asp:DropDownList ID="ddlSalary" runat="server"> 
        <asp:ListItem Value="-1">-----</asp:ListItem> 
        <asp:ListItem Value="1">Yes</asp:ListItem> 
        <asp:ListItem Value="0">No</asp:ListItem> 
       </asp:DropDownList> 
      </td> 
     </tr> 
    </table> 
    </div> 
    <br /> 
    <br /> 
    <asp:GridView ID="gdvCust" runat="server" AllowPaging="True" 
     AutoGenerateColumns="False" 
     onpageindexchanging="gdvCust_PageIndexChanging"> 
     <Columns> 
      <asp:BoundField DataField="ContactID" HeaderText="ContactID" ReadOnly="True" 
       SortExpression="ContactID" /> 
      <asp:BoundField DataField="Title" HeaderText="Title" ReadOnly="True" 
       SortExpression="Title" /> 
      <asp:BoundField DataField="FirstName" HeaderText="FirstName" ReadOnly="True" 
       SortExpression="FirstName" /> 
      <asp:BoundField DataField="MiddleName" HeaderText="MiddleName" ReadOnly="True" 
       SortExpression="MiddleName" /> 
      <asp:BoundField DataField="LastName" HeaderText="LastName" ReadOnly="True" 
       SortExpression="LastName" /> 
      <asp:BoundField DataField="Suffix" HeaderText="Suffix" ReadOnly="True" 
       SortExpression="Suffix" /> 
      <asp:BoundField DataField="EmailAddress" HeaderText="EmailAddress" 
       ReadOnly="True" SortExpression="EmailAddress" /> 
      <asp:BoundField DataField="Phone" HeaderText="Phone" ReadOnly="True" 
       SortExpression="Phone" /> 
      <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" /> 
     </Columns> 
    </asp:GridView> 


    <br /> 
    <asp:GridView ID="gdvEmp" runat="server" AllowPaging="True" 
     AutoGenerateColumns="False" 
     onpageindexchanging="gdvEmp_PageIndexChanging"> 
     <Columns> 
      <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" ReadOnly="True" 
       SortExpression="EmployeeID" /> 
      <asp:BoundField DataField="JobTitle" HeaderText="Job Title" ReadOnly="True" 
       SortExpression="Title" /> 
      <asp:BoundField DataField="FirstName" HeaderText="FirstName" ReadOnly="True" 
       SortExpression="FirstName" /> 
      <asp:BoundField DataField="MiddleName" HeaderText="MiddleName" ReadOnly="True" 
       SortExpression="MiddleName" /> 
      <asp:BoundField DataField="LastName" HeaderText="LastName" ReadOnly="True" 
       SortExpression="LastName" /> 
      <asp:BoundField DataField="Suffix" HeaderText="Suffix" ReadOnly="True" 
       SortExpression="Suffix" /> 
      <asp:BoundField DataField="EmailAddress" HeaderText="EmailAddress" 
       ReadOnly="True" SortExpression="EmailAddress" /> 
      <asp:BoundField DataField="Phone" HeaderText="Phone" ReadOnly="True" 
       SortExpression="Phone" /> 
      <asp:BoundField DataField="LoginID" HeaderText="LoginID" ReadOnly="True" 
       SortExpression="LoginID" /> 
      <asp:BoundField DataField="Title" HeaderText="Title" ReadOnly="True" 
       SortExpression="Title" /> 
      <asp:BoundField DataField="BirthDate" HeaderText="BirthDate" ReadOnly="True" 
       SortExpression="BirthDate" /> 
      <asp:BoundField DataField="MaritalStatus" HeaderText="MaritalStatus" ReadOnly="True" 
       SortExpression="MaritalStatus" /> 
      <asp:BoundField DataField="Gender" HeaderText="Gender" ReadOnly="True" 
       SortExpression="Gender" /> 
      <asp:BoundField DataField="HireDate" HeaderText="HireDate" 
       ReadOnly="True" SortExpression="HireDate" /> 
      <asp:CheckBoxField DataField="SalariedFlag" HeaderText="SalariedFlag" 
       ReadOnly="True" SortExpression="SalariedFlag" /> 
      <asp:CheckBoxField DataField="CurrentFlag" HeaderText="CurrentFlag" 
       ReadOnly="True" SortExpression="CurrentFlag" /> 
     </Columns> 
    </asp:GridView> 


</form> 

代码隐藏

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<Contact> _conResults; 
    //static IQueryable<EmpContact> _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<Contact> CreateCustQuery() 
    { 
     TestDataClassDataContext dc = new TestDataClassDataContext(); 
     var predicate = PredicateBuilder.True<Contact>(); 
     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当时另一个项目,但是这可能会帮助你完成卡斯特结果了解获取GridView需要做什么。这是使用LINQ用的AdventureWorks作为示例数据库现在你需要注意的是

<asp:GridView ID="gdvCust" runat="server" AllowPaging="True" 
     AutoGenerateColumns="False" 
     onpageindexchanging="gdvCust_PageIndexChanging"> 

和哪些代码

解释aspx页面上的列和绑定字段,其中的DataField =列的名称在数据库中,并且Header字段是在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(); 
} 

他们做的从数据源和寻呼控制结合。如果您需要更多解释,请发表评论

+0

它是自定义分页吗? – Jango 2010-04-08 13:51:29

+0

是的,这是一个自定义分页与这些功能。 GridViewPageEventArgs e是处理页面更改所需的全部内容,否则是绑定到gridview控件的可绑定数据对象。我想你知道如何用你当前的存储过程来做到这一点 – 2010-04-08 13:52:38

+0

谢谢我会尝试并给你反馈 – Jango 2010-04-08 14:13:08

0

由于自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 
+0

我相信,我可以非常轻松地处理存储过程级别的功能。但问题是使用sqldatasource在gridview中实现自定义分页。有任何线索吗? – Jango 2010-04-07 20:29:30

1

查看下面的代码。

CREATE PROCEDURE getDeals 
    @StartIndex int, 
    @PageSize int, 
    @TotalCount int OutPut 
as 

select @TotalCount=count(1) from mstrDeals; 
WITH CTE AS 
(
    select top(@[email protected]) ROW_NUMBER() OVER(ORDER BY creationdate) RowNumber,dealid,dealTitle from mstrDeals 
) 
select * from CTE where RowNumber between @startIndex and (@[email protected]) 

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

退房生成分页代码和绑定gridview的代码(参考): -

Custom paging in asp.net using stored procedure in gridview with nice pagination

0

首先实现你Custom Paging in SQL Server Stored Procedure然后用你的C#代码中调用它,并填补了数据表。最后用这个数据表设置gridview的DataSource属性。

请参阅ASP.NET GridView Custom Paging以使用自定义分页与gridview。技巧是gridview属性'VirtualItemCount',它由数据源的记录总数设置。

+0

.Net 3.5(ASP 2.0)不支持VirtualItemCount,因此对于那些希望这样做的人来说,他们将不得不推出他们的自己的分页控制或使用现有的商业或开源的gridview控件。 – 2016-03-29 15:20:52

相关问题