Die Kombination einer gespeicherten Prozedur macht das Paging am einfachsten. Bitte sehen Sie sich den folgenden Quellcode an.
Die von dieser Paging-Klasse betriebene gespeicherte Prozedur
/**//********************************************* *** ************
*
* Leistungsstarke Funktion, kombiniert mit der folgenden gespeicherten Prozedur
*
*************************************************** * *****/
/**//*
-- Pager 1,10,0,0, 'EmployeeID>2 und EmployeeID<5 ' , 'Employees','*','LastName',0
PROZEDUR-Pager erstellen
@PageIndex int,--index Seite 1
@PageSize int,--Anzahl der Seiten pro Seite 2
@RecordCount int out,--Gesamtzahl der Zeilen 3
@PageCount int out,--Gesamtzahl der Seiten 4
@WhereCondition Nvarchar(1000),--Abfragebedingung 5
@TableName nvarchar(500),--Query-Tabellenname 6
@SelectStr nvarchar(500) = '*',--Abfragespalte 7
@Order nvarchar(500),--sortierte Spalte 8
@OrderType Bit = 0, -- Legt den Sortiertyp fest, ein Wert ungleich 0 ist absteigende Reihenfolge 9
@Groupby NVarChar(100) = ''
AS
deklariert @strSQL nvarchar(2000) – Hauptanweisung
deklarieren Sie @strTmp nvarchar(1000) – temporäre Variable
@strOrder nvarchar(1000) deklarieren – Sortiertyp,
wenn @OrderType != 0
beginnen
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @Order +' desc'
Ende
anders
beginnen
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @Order +' asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from '
+ @TableName + ' where ' + @Order + '' + @strTmp + '(['
+ @Order + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @Order + '] from ' + @TableName + '' + @strOrder + ') as tblTmp)'
+ @Groupby + @strOrder
if @WhereCondition != ''
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from '
+ @TableName + ' where ' + @Order + '' + @strTmp + '(['
+ @Order + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @Order + '] from ' + @TableName + ' where (' + @WhereCondition + ') '
+ @strOrder + ') als tblTmp) und (' + @WhereCondition + ') ' + @Groupby + @strOrder,
wenn @PageIndex = 1
beginnen
set @strTmp = ''
if @WhereCondition != ''
set @strTmp = ' where (' + @WhereCondition + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @SelectStr + ' from '
+ @TableName + '' + @strTmp + ' ' + @Groupby + @strOrder
Ende
exec(@strSQL)
--print @strSQL
IF @WhereCondition <>''
Beginnen
SET @strTmp = 'SELECT -1 FROM ' + @TableName + ' Where ' + (@WhereCondition)
Ende
ANDERS
Beginnen
SET @strTmp = 'SELECT -1 FROM ' + @TableName
Ende
EXEC SP_EXECUTESQL @strTmp
SET @RecordCount = @@RowCount
-- Ermitteln Sie die Gesamtzahl der Seiten
-- Funktion „CEILING“: Ermittelt die kleinste Ganzzahl, die nicht kleiner als eine bestimmte Zahl ist
SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)
GEHEN
************************************************** * **************************/
/**//********************************************* *** *******************************
*
* Nutzung
*
*************************************************** * *****************************/
/**//*
Dim ts As String = Request.Form.Item("txtDate")
If (ts = "" Or ts Is Nothing) Then
ts = Request.QueryString("txtDate")
Ende wenn
Dim ts2 As String = Request.Form.Item("txtDate2")
If (ts2 = "" Or ts2 Is Nothing) Then
ts2 = Request.QueryString("txtDate2")
End If
Dim ps As String = Request.Form.Item("pageIndex")
If (ps = "" Or ps Is Nothing) Then
ps = Request.QueryString("pageIndex")
End If
Dim t As Integer = 2
Dim p As Integer = 1
Wenn es nichts ist, dann
ts = ""
Ende wenn
Wenn ps nichts ist, dann
ps = ""
Ende, wenn
nicht (ps = ""), dann
p = Integer.Parse(ps)
Ende, wenn
Pager als Pager dimmen = Neuer Pager
pager.PageIndex = p
pager.PageSize = 20
pager.PageMode = PageMode.Str
pager.WhereCondition = "TheDate zwischen konvertieren(datetime,'" + ts + "') und konvertieren(datetime,'" + ts2 + "')"
'pager.WhereCondition = " Convert(char(10),TheDate,120)= '" + ts + "'"
pager.TableName = "LoadCountlog"
pager.SelectStr = "*"
pager.Order = "ID"
pager.OrderType = False
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) + "< /strong>"
*/
#endregion
Verwenden des Systems;
Verwenden von System.Data;
Verwenden von System.Data.SqlClient;
Verwenden von System.Configuration;
Verwenden von System.Collections;
Verwenden von System.Text;
Namespace solucky
{
/**//// <Zusammenfassung>
/// Paging-Modus
/// </summary>
öffentliche Enumeration PageMode
{
/**//// <Zusammenfassung>
///Nummern-Paging
/// </summary>
Anzahl =0,
/**//// <Zusammenfassung>
/// Zeichen-Paging
/// </summary>
Str =1
}
/**//// <Zusammenfassung>
/// Die Paging-Klasse kann durch gespeicherte Prozeduren blättern und ist sehr leistungsfähig.
/// </summary>
Pager der öffentlichen Klasse
{
private int pageIndex = 0;
private int recordCount = 0;
private int pageSize = 20;
private int pageCount = 0;
private int rowCount = 0;
private Zeichenfolge tableName = "";
private Zeichenfolge whereCondition = "1=1";
private Zeichenfolge selectStr = "*";
private string order = "";
private Zeichenfolge procedure="pager";
private bool orderType = true;
privater PageMode pageMode =PageMode.Num;
private Zeichenfolge sqlConnectionString = ConfigurationSettings.AppSettings["database"];
private Zeichenfolge DatabaseOwner = „dbo“;
Datenverbindung#Region Datenverbindung
/**//// <Zusammenfassung>
/// Datenverbindungszeichenfolge
/// </summary>
private Zeichenfolge SqlConnectionString
{
erhalten
{
return this.sqlConnectionString;
}
Satz
{
this.sqlConnectionString=value;
}
}
/**//// <Zusammenfassung>
///Holen Sie sich die Verbindungsinstanz
/// </summary>
/// <returns></returns>
private SqlConnection GetSqlConnectionString()
{
versuchen
{
return new SqlConnection(SqlConnectionString);
}
fangen
{
throw new Exception("SQL Connection String is invalid.");
}
}
/**//// <Zusammenfassung>
/// Eigentümer des Datenobjekts
/// </summary>
private Zeichenfolge DatabaseOwner
{
erhalten
{
return this.databaseOwner;
}
Satz{
this.databaseOwner=value;
}
}
#endregion
public Pager()
{
//
// TODO: Konstruktorlogik hier hinzufügen
//
//Enum.Parse(tyo
}
öffentlicher Pager(string connstr)
{
if (connstr!=null)
this.SqlConnectionString=connstr;
}
#Region
/**//// <Zusammenfassung>
/// Der Name der gespeicherten Prozedur, die ausgeführt werden soll, verfügt über eine standardmäßig gespeicherte Paging-Prozedur.
/// </summary>
öffentliche Zeichenfolge Prozedur
{
erhalten{
return this.procedure;
}
Satz {
if (value==null || value.Length <=0)
{
this.procedure="pager";
}
anders
{
this.procedure=value;
}
}
}
/**//// <Zusammenfassung>
/// Die Anzahl der aktuell anzuzeigenden Seiten
/// </summary>
public int PageIndex
{
erhalten
{
return this.pageIndex;
}
Satz
{
this.pageIndex = value;
}
}
/**//// <Zusammenfassung>
///Gesamtzahl der Seiten
/// </summary>
public int Seitenanzahl
{
erhalten
{
return this.pageCount;
}
Satz
{
this.pageCount = value;
}
}
/**//// <Zusammenfassung>
///Gesamtzahl der Zeilen
/// </summary>
public int RecordCount
{
erhalten
{
return this.recordCount;
}
Satz
{
this.recordCount = value;
}
}
/**//// <Zusammenfassung>
///Anzahl der Elemente pro Seite
/// </summary>
public int Seitengröße
{
erhalten
{
return this.pageSize;
}
Satz
{
this.pageSize = value;
}
}
/**//// <Zusammenfassung>
///Tabellenname
/// </summary>
öffentliche Zeichenfolge TableName
{
erhalten
{
return Tabellenname;
}
Satz
{
this.tableName = value;
}
}
/**//// <Zusammenfassung>
/// Bedingte Abfrage
/// </summary>
öffentliche Zeichenfolge WhereCondition
{
erhalten
{
return whereCondition;
}
Satz
{
whereCondition = value;
}
}
/**//// <Zusammenfassung>
/// Abfrageziel (Suchziel), z. B.: AddTime AS-Zeit, ID AS-Nummer
/// </summary>
öffentliche Zeichenfolge SelectStr
{
erhalten
{
return selectStr;
}
Satz
{
selectStr = value;
}
}
/**//// <Zusammenfassung>
/// Sortierte Spalten
/// </summary>
öffentliche Zeichenfolge Reihenfolge
{
erhalten
{
Rücksendeauftrag;
}
Satz
{
Bestellung = Wert;
}
}
/**//// <Zusammenfassung>
/// Sortiertyp true:asc false:desc
/// </summary>
öffentlicher bool OrderType
{
erhalten
{
return orderType;
}
Satz
{
orderType = value;
}
}
/**//// <Zusammenfassung>
/// Paging-Modus
/// </summary>
öffentlicher PageMode PageMode
{
erhalten
{
return this.pageMode;
}
Satz
{
this.pageMode = value;
}
}
/**//// <Zusammenfassung>
/// Holen Sie sich die aktuell zurückgegebene Menge
/// </summary>
public int RowCount
{
erhalten
{
return this.rowCount;
}
}
privater String groupby;
öffentliche Zeichenfolge Groupby
{
erhalten
{
return this.groupby;
}
Satz
{
this.groupby = value;
}
}
#endregion
/**//// <Zusammenfassung>
/// Paginierung der Suchergebnisse
/// </summary>
öffentliche Datentabelle GetDatas(int pageIndex)
{
this.pageIndex = pageIndex;
Pager Pager = this;
//pager.pageIndex = pageIndex;
DataTable returnTb = Pagination(ref pager).Tables[0];
this.rowCount = returnTb.Rows.Count;
return returnTb;
}
/**//// <Zusammenfassung>
/// Funktion der gespeicherten Prozedur für den Paging-Vorgang
/// </summary>
/// <param name="pager"></param>
/// <returns></returns>
private DataSet-Paginierung (ref Pager Pager)
{
mit (SqlConnection myConnection = GetSqlConnectionString() )
{
SqlDataAdapter myCommand = new SqlDataAdapter(pager.databaseOwner + "."+pager.Procedure, myConnection);
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlParameter parameterPageIndex = new SqlParameter("@PageIndex", SqlDbType.Int);
parameterPageIndex.Value = pager.PageIndex;
myCommand.SelectCommand.Parameters.Add(parameterPageIndex);
SqlParameter parameterPageSize = new SqlParameter("@PageSize", SqlDbType.Int);
parameterPageSize.Value = pager.PageSize;
myCommand.SelectCommand.Parameters.Add(parameterPageSize);
SqlParameter parameterRecordCount = new SqlParameter("@RecordCount", SqlDbType.Int);
ParameterRecordCount.Value = 0;
parameterRecordCount.Direction = ParameterDirection.InputOutput;
myCommand.SelectCommand.Parameters.Add(parameterRecordCount);
SqlParameter parameterPageCount = new SqlParameter("@PageCount", SqlDbType.Int);
ParameterPageCount.Value = 0;
parameterPageCount.Direction = ParameterDirection.InputOutput;
myCommand.SelectCommand.Parameters.Add(parameterPageCount);
SqlParameter parameterWhereCondition = new SqlParameter("@WhereCondition", SqlDbType.NVarChar,500);
parameterWhereCondition.Value = pager.WhereCondition;
myCommand.SelectCommand.Parameters.Add(parameterWhereCondition);
SqlParameter parameterTableName = new SqlParameter("@TableName", SqlDbType.NVarChar,500);
parameterTableName.Value = pager.TableName;
myCommand.SelectCommand.Parameters.Add(parameterTableName);
SqlParameter parameterOrder = new SqlParameter("@Order", SqlDbType.NVarChar,500);
parameterOrder.Value = pager.Order;
myCommand.SelectCommand.Parameters.Add(parameterOrder);
SqlParameter parameterSelectStr = new SqlParameter("@SelectStr", SqlDbType.NVarChar,500);
parameterSelectStr.Value = pager.SelectStr;
myCommand.SelectCommand.Parameters.Add(parameterSelectStr);
SqlParameter parameterGroupby = new SqlParameter("@Groupby", SqlDbType.NVarChar, 100);
parameterGroupby.Value = pager.Groupby;
myCommand.SelectCommand.Parameters.Add(parameterGroupby);
SqlParameter parameterOrderType = new SqlParameter("@OrderType", SqlDbType.Bit);
parameterOrderType.Value = pager.OrderType==false?0:1;
myCommand.SelectCommand.Parameters.Add(parameterOrderType);
DataSet returnDS = new DataSet();
//SqlDataAdapter sqlDA = myCommand.crnew SqlDataAdapter(myCommand);
myCommand.Fill(returnDS);
pager.PageCount = (int)parameterPageCount.Value;
pager.RecordCount = (int)parameterRecordCount.Value
;
}
}
Paginierung generieren #region Paginierung generieren
/**//// <Zusammenfassung>
/// Paging-Format generieren
/// </summary>
/// <param name="pager"></param>
/// <param name="url"></param>
/// <param name="isBr"></param>
/// <returns></returns>
öffentlicher String OutPager(Pager pager,string url,bool isBr)
{
StringBuilder returnOurWml;
if(isBr)
{
returnOurWml= new StringBuilder("["+ pager.PageCount.ToString() + "page," + pager.RecordCount.ToString() +"bar]<br/>");
}
anders
{
returnOurWml = new StringBuilder();
}
if (pager.PageMode == PageMode.Num)
{
//Die in jeder Paging-Zeile angezeigte Nummer
int seitenCount = 10;
int Seiten = 0;
int startInt = 1;
int endInt = pager.PageCount;
int i = 1;
string endStr = "";
if (pager.PageCount>pagersCount)
{
//double k = ;
pagers = pager.PageIndex / pagersCount;
if (Pager == 0)
{
Pager = 1;
}
sonst if((pager.PageIndex % pagersCount)!=0)
{
Pager +=1;
}
endInt = pagers * pagersCount;
if (pager.PageIndex <= endInt)
{
startInt = endInt +1 - pagersCount;
if (startInt <1)
{
startInt = 1;
}
}
//pagersCount, wenn die Anzeigemenge nicht ausreicht
if (endInt>=pager.PageCount)
{
endInt = pager.PageCount;
}
anders
{
//if (pager.PageIndex)
endStr = " <a href="";
endStr += url + "&pageIndex=" + (endInt + 1).ToString() + "" title='page" + (endInt + 1).ToString()+"page'>";
endStr += ">>";
endStr += "</a> ";
}
if (Pager > 1)
{
returnOurWml.Append(" <a href="");
returnOurWml.Append(url + "&pageIndex=" + (startInt - 1).ToString() + "" title='page" + (startInt - 1).ToString()+"page'>");
returnOurWml.Append("<<");
returnOurWml.Append("</a> ");
}
}
for (i = startInt; i<=endInt;i++)
{
if (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> ");
}
anders
{
returnOurWml.Append("<u>"+ i.ToString() + "</u>");
}
}
returnOurWml.Append(endStr);
return returnOurWml.Append("<br/>").ToString();
}
anders
{
if (pager.PageIndex > 1)
{
returnOurWml.Append(" <a href="");
returnOurWml.Append(url + "&pageIndex=" + (pager.PageIndex -1).ToString() + "">");
returnOurWml.Append("Vorherige Seite");
returnOurWml.Append("</a> ");
}
if (pager.PageIndex < pager.PageCount)
{
returnOurWml.Append(pager.PageIndex.ToString());
returnOurWml.Append(" <a href="");
returnOurWml.Append(url + "&pageIndex=" + (pager.PageIndex +1).ToString() + "">");
returnOurWml.Append("Nächste Seite");
returnOurWml.Append("</a> ");
}
return returnOurWml.Append("<br/>").ToString();
}
}
#endregion
}
}
http://www.cnblogs.com/solucky/archive/2006/09/20/509741.html