2010-04-07 5 views
1

Quelqu'un peut-il me rediriger vers votre propre lien de blog ou tout autre lien expliquant tutoriel sur la façon d'implémenter la pagination gridview personnalisée en utilisant la procédure stockée?Comment mettre en œuvre la pagination personnalisée Gridview à l'aide de la procédure stockée?

Ma recherche dans google me donner des articles anciens de l'année 2006. En ce moment je suis en utilisant asp.net 3.5 et C#.

+0

Est-il nécessaire d'utiliser des procédures stockées? – vittore

+0

Oui monsieur, ne peut pas supprimer la fonctionnalité existante (SP) au moins pour l'instant. Maintenant, les données sont suffisamment grandes et la fonctionnalité de pagination par défaut dans gridview, vous le savez, n'est pas assez intelligente ... – Jango

+0

Vous n'avez jamais commenté sur ma solution –

Répondre

2

page .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> 

codebehind

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(); 
    } 



} 
} 

terminé seulement les résultats cust avant de déménager à un autre projet que je LINQ au moment, mais cela pourrait vous aider Comprendre ce qui est nécessaire pour obtenir un gridview. est d'utiliser LINQ avec AdventureWorks comme base de données exemple

Explication du Code maintenant ce que vous devez prêter attention est la

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

et les colonnes et les champs liés à la page ASPX où DataField = Nom de la colonne dans la base de données et le champ En-tête est ce qui est étiqueté en haut de la colonne sur la grille.

maintenant sur le code regarder derrière vous à

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(); 
} 

ils la liaison à partir d'une source de données et le contrôle de pagination. commentaire si vous avez besoin de plus explaination

+0

Est-ce une pagination personnalisée? – Jango

+0

oui c'est une pagination personnalisée avec ces fonctions. le GridViewPageEventArgs e est ce qui gère le changement de page tout ce dont vous avez besoin autrement est un objet de données pouvant être lié pour lier au contrôle gridview. Je suppose que vous savez comment faire cela avec vos procédures stockées actuelles –

+0

Merci Je vais essayer et vous donner des commentaires – Jango

0

Depuis la syntaxe de SQL n'a pas beaucoup change depuis 2006, il n'y a pas grand-chose à mettre à jour. Du côté de la procédure stockée, vous devez toujours effectuer un appel 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

Je crois, je peux gérer la fonctionnalité de niveau de procédure stockée très facilement. Mais le problème est l'implémentation de la pagination personnalisée dans gridview à l'aide de sqldatasource. Une idée là-bas? – Jango

1

Vérifiez le code ci-dessous.

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]) 

Ensuite, nous avons besoin de générer téléavertisseur sans total de lignes, la taille de la page et la page en cours, ci-dessous est le code d'échantillon qui peuplant téléavertisseur ici nombre total de liens de téléavertisseur est 5 qui peut être personnaliser davantage en réinitialisant variable locale nommé totalLinkInPage et ont le premier et le dernier bouton également qui activer ou désactiver automatiquement lorsque la page actuelle est la première ou la dernière en conséquence.

Découvrez générer le code de pagination et de lier le code gridview (référence): -

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

0

d'abord mettre en œuvre votre Custom Paging in SQL Server Stored Procedure puis appelez avec votre code C# et remplir le datatable. Enfin, définissez la propriété DataSource de gridview avec cette donnée.

Voir ASP.NET GridView Custom Paging pour l'utilisation de la pagination personnalisée avec gridview. L'astuce est la propriété gridview 'VirtualItemCount' qui est définie avec le nombre total d'enregistrements de la source de données.

+0

Le VirtualItemCount n'est pas pris en charge dans .Net 3.5 (ASP 2.0), donc pour ceux qui souhaitent faire cela, ils devront rouler leur votre propre contrôle de radiomessagerie ou utilisez un contrôle gridview commercial ou open source existant. –

Questions connexes