La combinaison d'une procédure stockée fait de la pagination la chose la plus simple. Veuillez consulter le code source suivant
La procédure stockée exploitée par cette classe de pagination #region La procédure stockée exploitée par cette classe de pagination.
/**//********************************************* *** ************
*
* Fonction puissante, combinée à la procédure stockée suivante
*
************************************************* * *****/
/**//*
-- Pager 1,10,0,0, 'EmployeeID>2 et EmployeeID<5 ' , 'Employés','*','LastName',0
CRÉER UNE PROCÉDURE Téléavertisseur
@PageIndex int,--index page 1
@PageSize int,--nombre de pages par page 2
@RecordCount int out,--Nombre total de lignes 3
@PageCount int out,--nombre total de pages 4
@WhereCondition Nvarchar(1000),--condition de requête 5
@TableName nvarchar(500),--requête du nom de la table 6
@SelectStr nvarchar(500) = '*',--Requête colonne 7
@Order nvarchar(500),--colonne triée 8
@OrderType bit = 0, -- Définit le type de tri, la valeur non-0 est par ordre décroissant 9
@Groupby NVarChar(100) = ''
AS
déclare @strSQL nvarchar(2000) -- instruction principale
déclarer @strTmp nvarchar(1000) -- variable temporaire
déclarer @strOrder nvarchar(1000) -- type de tri
si @OrderType != 0
commencer
set @strTmp = '<(sélectionner min'
set @strOrder = 'ordonner par ' + @Order +' desc'
fin
autre
commencer
set @strTmp = '>(sélectionner max'
set @strOrder = 'ordonner par ' + @Order +' asc'
end
set @strSQL = 'select top ' + str (@PageSize) + ' ' + @SelectStr + ' from '
+ @TableName + ' où ' + @Order + '' + @strTmp + '(['
+ @Order + ']) from (sélectionnez top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @Order + '] de ' + @TableName + '' + @strOrder + ') comme tblTmp)'
+ @Groupby + @strOrder
si @WhereCondition != ''
set @strSQL = 'select top ' + str (@PageSize) + ' ' + @SelectStr + ' from '
+ @TableName + ' où ' + @Order + '' + @strTmp + '(['
+ @Order + ']) from (sélectionnez top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @Order + '] de ' + @TableName + ' où (' + @WhereCondition + ') '
+ @strOrder + ') comme tblTmp) et (' + @WhereCondition + ') ' + @Groupby + @strOrder
si @PageIndex = 1
commencer
définir @strTmp = ''
si @WhereCondition != ''
set @strTmp = 'where (' + @WhereCondition + ')'
set @strSQL = 'select top ' + str (@PageSize) + ' ' + @SelectStr + ' from '
+ @TableName + '' + @strTmp + ' ' + @Groupby + @strOrder
fin
exécutable (@strSQL)
--print @strSQL
SI @WhereCondition <>''
Commencer
SET @strTmp = 'SELECT -1 FROM ' + @TableName + ' Where ' + (@WhereCondition)
Fin
AUTRE
Commencer
SET @strTmp = 'SELECT -1 FROM ' + @TableName
Fin
EXEC SP_EXECUTESQL @strTmp
FIXER @RecordCount = @@RowCount
-- Obtenez le nombre total de pages
-- Fonction "PLAFOND": Obtenez le plus petit entier qui n'est pas inférieur à un certain nombre
FIXER @PageCount = PLAFOND (@RecordCount * 1.0 / @PageSize)
ALLER
************************************************** * **************************/
/**//********************************************* *** *******************************
*
* Utilisation
*
************************************************* * ****************************/
/**//*
Dim ts As String = Request.Form.Item("txtDate")
If (ts = "" Or ts Is Nothing) Then
ts = Request.QueryString("txtDate")
Fin si
Dim ts2 As String = Request.Form.Item("txtDate2")
If (ts2 = "" Or ts2 Is Nothing) Then
ts2 = Requête.QueryString("txtDate2")
Fin si
Dim ps As String = Request.Form.Item("pageIndex")
If (ps = "" Or ps Is Nothing) Then
ps = Request.QueryString("pageIndex")
Fin si
Dim t As Integer = 2
Dim p comme entier = 1
Si ce n'est rien, alors
ts = ""
Fin si
Si ps n'est rien alors
ps = ""
Fin si
sinon (ps = "") alors
p = Entier.Parse(ps)
Terminer si
le téléavertisseur est faible en tant que téléavertisseur = Nouveau téléavertisseur
pager.PageIndex = p
pager.PageSize = 20
pager.PageMode = PageMode.Str
pager.WhereCondition = "TheDate entre convert(datetime,'" + ts + "') et convert(datetime,'" + ts2 + "')"
'pager.WhereCondition = " convert(char(10),TheDate,120)= '" + ts + "'"
pager.TableName = "LoadCountlog"
pager.SelectStr = "*"
pager.Commande = "ID"
pager.OrderType = Faux
Dim dt As System.Data.DataTable = pager.GetDatas(p)
myDataGrid.DataSource = dt
myDataGrid.DataBind()
Dim goUrl As String = "WebForm1.aspx?txtDate=" + ts + "&txtDate2=" + ts2
Me.Label3.Text = "Total :" + pager.PageCount.ToString + "Page", + pager.RecordCount.ToString() + "Bar<strong>" + pager.OutPager(pager, goUrl, False) + "< /fort>"
*/
#endregion
utiliser le système ;
en utilisant System.Data ;
en utilisant System.Data.SqlClient ;
en utilisant System.Configuration ;
en utilisant System.Collections ;
en utilisant System.Text ;
espace de noms, Solucky
{
/**//// <résumé>
/// Mode pagination
/// </summary>
Énumération publique PageMode
{
/**//// <résumé>
///Pagination des numéros
/// </summary>
Nombre =0,
/**//// <résumé>
/// Pagination des caractères
/// </summary>
Force =1
}
/**//// <résumé>
/// La classe de pagination peut effectuer une pagination via des procédures stockées et est assez puissante.
/// </summary>
Téléavertisseur de classe publique
{
pageIndex int privé = 0 ;
private int recordCount = 0 ;
privé int pageSize = 20 ;
private int pageCount = 0 ;
private int rowCount = 0 ;
chaîne privée tableName = "" ;
chaîne privée oùCondition = "1=1" ;
chaîne privée selectStr = "*" ;
ordre de chaîne privé = "" ;
procédure de chaîne privée = "pager" ;
private bool orderType = true ;
PageMode privé pageMode =PageMode.Num;
chaîne privée sqlConnectionString = ConfigurationSettings.AppSettings["database"];
chaîne privée databaseOwner = "dbo" ;
connexion de données # connexion de données régionale
/**//// <résumé>
/// Chaîne de connexion aux données
/// </summary>
chaîne privée SqlConnectionString
{
obtenir
{
renvoie this.sqlConnectionString ;
}
ensemble
{
this.sqlConnectionString=valeur ;
}
}
/**//// <résumé>
///Obtenir l'instance de connexion
/// </summary>
/// <retours></retours>
privé SqlConnection GetSqlConnectionString()
{
essayer
{
renvoyer un nouveau SqlConnection(SqlConnectionString);
}
attraper
{
throw new Exception("La chaîne de connexion SQL n'est pas valide.");
}
}
/**//// <résumé>
/// Propriétaire de l'objet de données
/// </summary>
chaîne privée DatabaseOwner
{
obtenir
{
renvoie this.databaseOwner ;
}
ensemble{
this.databaseOwner=valeur ;
}
}
#endregion
téléavertisseur public()
{
//
// TODO : ajouter la logique du constructeur ici
//
//Enum.Parse(tyo
}
Pager public (connstr de chaîne)
{
si (connstr!=null)
this.SqlConnectionString=connstr;
}
#région
/**//// <résumé>
/// Le nom de la procédure stockée à utiliser possède une procédure stockée de pagination par défaut.
/// </summary>
chaîne publique Procédure
{
obtenir{
renvoie cette.procédure ;
}
ensemble {
si (valeur==null || valeur.Longueur <=0)
{
this.procedure="pageur";
}
autre
{
this.procedure=valeur ;
}
}
}
/**//// <résumé>
/// Le nombre de pages actuellement à afficher
/// </summary>
public int PageIndex
{
obtenir
{
renvoie this.pageIndex ;
}
ensemble
{
this.pageIndex = valeur ;
}
}
/**//// <résumé>
///Nombre total de pages
/// </summary>
public int Nombre de pages
{
obtenir
{
renvoie this.pageCount ;
}
ensemble
{
this.pageCount = valeur ;
}
}
/**//// <résumé>
///Nombre total de lignes
/// </summary>
public int Nombre d'enregistrements
{
obtenir
{
renvoie this.recordCount ;
}
ensemble
{
this.recordCount = valeur ;
}
}
/**//// <résumé>
///Nombre d'éléments par page
/// </summary>
public int Taille de la page
{
obtenir
{
renvoie this.pageSize ;
}
ensemble
{
this.pageSize = valeur ;
}
}
/**//// <résumé>
///Nom de la table
/// </summary>
chaîne publique NomTable
{
obtenir
{
renvoie le nom de la table ;
}
ensemble
{
this.tableName = valeur ;
}
}
/**//// <résumé>
/// Requête conditionnelle
/// </summary>
chaîne publique WhereCondition
{
obtenir
{
retourner oùCondition ;
}
ensemble
{
oùCondition = valeur ;
}
}
/**//// <résumé>
/// Cible de requête (cible de recherche), telle que : heure AddTime AS, numéro ID AS
/// </summary>
chaîne publique SelectStr
{
obtenir
{
retourner selectStr;
}
ensemble
{
selectStr = valeur ;
}
}
/**//// <résumé>
/// Colonnes triées
/// </summary>
chaîne publique Ordre
{
obtenir
{
ordre de retour ;
}
ensemble
{
ordre = valeur ;
}
}
/**//// <résumé>
/// Type de tri true:asc false:desc
/// </summary>
public bool Type de commande
{
obtenir
{
type de commande de retour ;
}
ensemble
{
type de commande = valeur ;
}
}
/**//// <résumé>
/// Mode pagination
/// </summary>
Mode Page public Mode Page
{
obtenir
{
renvoie this.pageMode ;
}
ensemble
{
this.pageMode = valeur ;
}
}
/**//// <résumé>
/// Récupère la quantité actuellement retournée
/// </summary>
public int Nombre de lignes
{
obtenir
{
renvoie this.rowCount ;
}
}
chaîne privée groupby ;
chaîne publique Groupby
{
obtenir
{
renvoie this.groupby ;
}
ensemble
{
this.groupby = valeur ;
}
}
#endregion
/**//// <résumé>
/// Résultats de la recherche de pagination
/// </summary>
public DataTable GetDatas (int pageIndex)
{
this.pageIndex = pageIndex;
Téléavertisseur téléavertisseur = ceci ;
//pager.pageIndex = pageIndex;
DataTable returnTb = Pagination(ref pager).Tables[0];
this.rowCount = returnTb.Rows.Count ;
retourner retournerTb ;
}
/**//// <résumé>
/// Fonction de procédure stockée d'opération de pagination
/// </summary>
/// <param name="pager"></param>
/// <retours></retours>
Pagination DataSet privée (réf. Pager pager)
{
en utilisant (SqlConnection myConnection = GetSqlConnectionString() )
{
SqlDataAdapter myCommand = new SqlDataAdapter(pager.databaseOwner + "."+pager.Procedure, myConnection);
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlParameter paramètrePageIndex = new SqlParameter("@PageIndex", SqlDbType.Int);
paramètrePageIndex.Value = pager.PageIndex;
myCommand.SelectCommand.Parameters.Add(parameterPageIndex);
SqlParameter paramètrePageSize = new SqlParameter("@PageSize", SqlDbType.Int);
paramètrePageSize.Value = pager.PageSize;
myCommand.SelectCommand.Parameters.Add(parameterPageSize);
SqlParameter ParameterRecordCount = new SqlParameter("@RecordCount", SqlDbType.Int);
paramètreRecordCount.Value = 0 ;
ParameterRecordCount.Direction = ParameterDirection.InputOutput ;
myCommand.SelectCommand.Parameters.Add(parameterRecordCount);
ParameterParameterPageCount = new SqlParameter("@PageCount", SqlDbType.Int);
paramètrePageCount.Value = 0 ;
ParameterPageCount.Direction = ParameterDirection.InputOutput ;
myCommand.SelectCommand.Parameters.Add(parameterPageCount);
SqlParameter paramètreWhereCondition = new SqlParameter("@WhereCondition", SqlDbType.NVarChar,500);
paramètreWhereCondition.Value = pager.WhereCondition;
myCommand.SelectCommand.Parameters.Add(parameterWhereCondition);
SqlParameter paramètreTableName = new SqlParameter("@TableName", SqlDbType.NVarChar,500);
paramètreTableName.Value = pager.TableName;
myCommand.SelectCommand.Parameters.Add(parameterTableName);
SqlParameter paramètreOrder = new SqlParameter("@Order", SqlDbType.NVarChar,500);
paramètreOrder.Value = pager.Order;
myCommand.SelectCommand.Parameters.Add(parameterOrder);
SqlParameter ParameterSelectStr = new SqlParameter("@SelectStr", SqlDbType.NVarChar,500);
paramètreSelectStr.Value = pager.SelectStr;
myCommand.SelectCommand.Parameters.Add(parameterSelectStr);
SqlParameter ParameterGroupby = new SqlParameter("@Groupby", SqlDbType.NVarChar, 100);
paramètreGroupby.Value = pager.Groupby;
myCommand.SelectCommand.Parameters.Add(parameterGroupby);
SqlParameter paramètreOrderType = new SqlParameter("@OrderType", SqlDbType.Bit);
paramètreOrderType.Value = pager.OrderType==false?0:1;
myCommand.SelectCommand.Parameters.Add(parameterOrderType);
DataSet returnDS = new DataSet();
//SqlDataAdapter sqlDA = myCommand.crnew SqlDataAdapter(myCommand);
maCommand.Fill(returnDS);
pager.PageCount = (int)parameterPageCount.Value;
pager.RecordCount = (int)parameterRecordCount.Value ;
return returnDS ;
}
}
Générer la pagination #region Générer la pagination
/**//// <résumé>
/// Générer le format de pagination
/// </summary>
/// <param name="pager"></param>
/// <param name="url"></param>
/// <param name="isBr"></param>
/// <retours></retours>
chaîne publique OutPager (pager pager, chaîne url, bool isBr)
{
StringBuilder returnOurWml ;
si (estBr)
{
returnOurWml= new StringBuilder("["+ pager.PageCount.ToString() + "page," + pager.RecordCount.ToString() +"bar]<br/>");
}
autre
{
returnOurWml = new StringBuilder();
}
si (pager.PageMode == PageMode.Num)
{
//Le numéro affiché dans chaque ligne de pagination
int pagesCount = 10 ;
pages entières = 0 ;
int startInt = 1;
int endInt = pager.PageCount;
int je = 1;
chaîne endStr = "";
si (pager.PageCount>pagersCount)
{
//double k = ;
téléavertisseurs = pager.PageIndex / pagersCount ;
si (téléavertisseurs == 0)
{
téléavertisseurs = 1 ;
}
sinon if((pager.PageIndex % pagersCount)!=0)
{
téléavertisseurs +=1 ;
}
endInt = pagers * pagersCount;
si (pager.PageIndex <= endInt)
{
startInt = endInt +1 - pagersCount ;
si (startInt <1)
{
startInt = 1 ;
}
}
//pagersCount lorsque la quantité affichée est insuffisante
si (endInt>=pager.PageCount)
{
endInt = pager.PageCount;
}
autre
{
//if (pager.PageIndex)
endStr = " <a href="";
endStr += url + "&pageIndex=" + (endInt + 1).ToString() + "" title='page" + (endInt + 1).ToString()+"page'>";
endStr += ">>";
endStr += "</a> ";
}
si (pagers > 1)
{
returnOurWml.Append(" <a href="");
returnOurWml.Append(url + "&pageIndex=" + (startInt - 1).ToString() + "" title='page" + (startInt - 1).ToString()+"page'>");
returnOurWml.Append("<<");
returnOurWml.Append("</a> ");
}
}
pour (i = startInt; i<=endInt;i++)
{
si (i!=pager.PageIndex)
{
returnOurWml.Append(" <a href="");
returnOurWml.Append(url + "&pageIndex=" + i.ToString() + "" title='page"+ i.ToString()+"page'>");
returnOurWml.Append("["+i.ToString() + "]");
returnOurWml.Append("</a> ");
}
autre
{
returnOurWml.Append("<u>"+ i.ToString() + "</u>");
}
}
returnOurWml.Append(endStr);
return returnOurWml.Append("<br/>").ToString();
}
autre
{
si (pager.PageIndex > 1)
{
returnOurWml.Append(" <a href="");
returnOurWml.Append(url + "&pageIndex=" + (pager.PageIndex -1).ToString() + "">");
returnOurWml.Append("Page précédente");
returnOurWml.Append("</a> ");
}
si (pager.PageIndex < pager.PageCount)
{
returnOurWml.Append(pager.PageIndex.ToString());
returnOurWml.Append(" <a href="");
returnOurWml.Append(url + "&pageIndex=" + (pager.PageIndex +1).ToString() + "">");
returnOurWml.Append("Page suivante");
returnOurWml.Append("</a> ");
}
return returnOurWml.Append("<br/>").ToString();
}
}
#endregion
}
}
http://www.cnblogs.com/solucky/archive/2006/09/20/509741.html