การรวมขั้นตอนที่เก็บไว้ทำให้การเพจเป็นสิ่งที่ง่ายที่สุด โปรดดูซอร์สโค้ดต่อไปนี้
ที่ดำเนินการโดยคลาสการเพจนี้ #region กระบวนการที่เก็บไว้ที่ดำเนินการโดยคลาสการเพจนี้
/***//********************************************* *** ************
-
* ฟังก์ชั่นอันทรงพลังรวมกับขั้นตอนการจัดเก็บดังต่อไปนี้
-
************************************************* * *****/
-
-- เพจเจอร์ 1,10,0,0, 'EmployeeID>2 และ EmployeeID<5 ' , 'Employees','*','LastName',0
สร้างขั้นตอนเพจเจอร์
@PageIndex int,--ดัชนีหน้า 1
@PageSize int,--จำนวนหน้าต่อหน้า 2
@RecordCount int out,--จำนวนแถวทั้งหมด 3
@PageCount int out,--จำนวนหน้าทั้งหมด 4
@WhereCondition Nvarchar (1,000) -- เงื่อนไขการสืบค้น 5
@TableName nvarchar(500),--สอบถามชื่อตาราง 6
@SelectStr nvarchar(500) = '*',--คอลัมน์แบบสอบถาม 7
@Order nvarchar(500)--เรียงลำดับคอลัมน์ 8
@OrderType bit = 0, -- ตั้งค่าประเภทการเรียงลำดับ ค่าที่ไม่ใช่ 0 จะเรียงลำดับจากมากไปน้อย 9
@กลุ่มโดย NVarChar(100) = ''
AS
ประกาศ @strSQL nvarchar(2000) -- คำสั่งหลัก
ประกาศ @strTmp nvarchar(1000) -- ตัวแปรชั่วคราว
ประกาศ @strOrder nvarchar(1000) -- ประเภทการเรียงลำดับ
ถ้า @OrderType != 0
เริ่ม
set @strTmp = '<(เลือกขั้นต่ำ'
set @strOrder = ' สั่งซื้อโดย ' + @Order +' desc'
จบ
อื่น
เริ่ม
set @strTmp = '>(เลือกสูงสุด'
set @strOrder = ' สั่งซื้อโดย ' + @Order +' asc'
จบ
ชุด @strSQL = 'เลือกด้านบน ' + str(@PageSize) + ' ' + @SelectStr + ' จาก '
+ @TableName + ' โดยที่ ' + @Order + '' + @strTmp + '(['
+ @Order + ']) จาก (เลือกด้านบน ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @Order + '] จาก ' + @TableName + '' + @strOrder + ') เป็น tblTmp)'
+ @Groupby + @strOrder
ถ้า @WhereCondition != ''
set @strSQL = 'เลือกด้านบน ' + str(@PageSize) + ' ' + @SelectStr + ' จาก '
+ @TableName + ' โดยที่ ' + @Order + '' + @strTmp + '(['
+ @Order + ']) จาก (เลือกด้านบน ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @Order + '] จาก ' + @TableName + ' โดยที่ (' + @WhereCondition + ') '
+ @strOrder + ') เป็น tblTmp) และ (' + @WhereCondition + ') ' + @Groupby + @strOrder
ถ้า @PageIndex = 1
เริ่ม
ตั้ง @strTmp = ''
ถ้า @WhereCondition != ''
set @strTmp = ' โดยที่ (' + @WhereCondition + ')'
set @strSQL = 'เลือกด้านบน ' + str(@PageSize) + ' ' + @SelectStr + ' จาก '
+ @TableName + '' + @strTmp + ' ' + @Groupby + @strOrder
จบ
ผู้บริหาร(@strSQL)
--print @strSQL
ถ้า @WhereCondition <>''
เริ่ม
SET @strTmp = 'SELECT -1 FROM ' + @TableName + ' โดยที่ ' + (@WhereCondition)
จบ
อื่น
เริ่ม
SET @strTmp = 'เลือก -1 จาก ' + @TableName
จบ
EXEC SP_EXECUTESQL @strTmp
SET @RecordCount = @@RowCount
-- รับจำนวนหน้าทั้งหมด
-- ฟังก์ชัน "CEILING": รับจำนวนเต็มที่น้อยที่สุดซึ่งไม่น้อยกว่าจำนวนที่กำหนด
SET @PageCount = เพดาน(@RecordCount * 1.0 / @PageSize)
ไป
************************************************** * ***************************/
/***//********************************************* *** *******************************
-
* การใช้งาน
-
************************************************* * *****************************/
-
Dim ts As String = Request.Form.Item("txtDate")
ถ้า (ts = "" Or ts Is Nothing) แล้ว
ts = Request.QueryString("txtDate")
สิ้นสุดถ้า
Dim ts2 As String = Request.Form.Item("txtDate2")
ถ้า (ts2 = "" หรือ ts2 ไม่มีอะไรเลย) จากนั้น
ts2 = Request.QueryString("txtDate2")
สิ้นสุดถ้า
Dim ps As String = Request.Form.Item("pageIndex")
ถ้า (ps = "" หรือ ps ไม่มีอะไรเลย) แล้ว
PS = Request.QueryString("pageIndex")
สิ้นสุดถ้า
Dim t As Integer = 2
หรี่ p As Integer = 1
ถ้าไม่มีอะไรแล้ว
ทีเอส = ""
สิ้นสุดถ้า
ถ้า PS ไม่มีอะไรแล้ว
ปล = ""
สิ้นสุดถ้า
ถ้าไม่ใช่ (ps = "") จากนั้น
p = จำนวนเต็ม.Parse(ps)
สิ้นสุด ถ้า
Dim pager As Pager = New Pager
เพจเจอร์ PageIndex = p
เพจเจอร์ PageSize = 20
pager.PageMode = PageMode.Str
pager.WhereCondition = "วันที่ระหว่างการแปลง (datetime,'" + ts + "') และการแปลง (datetime,'" + ts2 + "')"
'pager.WhereCondition = " แปลง (ถ่าน (10), TheDate, 120) = '" + ts + "'"
pager.TableName = "LoadCountlog"
เพจเจอร์.SelectStr = "*"
เพจเจอร์.Order = "ID"
pager.OrderType = เท็จ
Dim dt As System.Data.DataTable = pager.GetDatas(p)
myDataGrid.DataSource = dt
myDataGrid.DataBind()
หรี่ 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) + "< /แข็งแกร่ง>"
-
#ภูมิภาคสุดท้าย
ใช้ระบบ;
ใช้ System.Data;
โดยใช้ System.Data.SqlClient;
โดยใช้ระบบการกำหนดค่า;
ใช้ System.Collections;
ใช้ System.Text;
เนมสเปซโชคดี
-
/***////// <สรุป>
/// โหมดเพจ
/// </สรุป>
แจกแจงสาธารณะ PageMode
-
/***////// <สรุป>
/// เพจหมายเลข
/// </สรุป>
หมายเลข = 0,
/***////// <สรุป>
/// การเพจตัวละคร
/// </สรุป>
Str =1
-
/***////// <สรุป>
/// คลาสการเพจสามารถดำเนินการเพจผ่านขั้นตอนที่เก็บไว้และค่อนข้างมีประสิทธิภาพ
/// </สรุป>
เพจเจอร์คลาสสาธารณะ
-
ดัชนีเพจ int ส่วนตัว = 0;
int recordCount ส่วนตัว = 0;
ขนาดเพจ int ส่วนตัว = 20;
จำนวนหน้า int ส่วนตัว = 0;
ส่วนตัว int rowCount = 0;
สตริงส่วนตัว tableName = "";
สตริงส่วนตัวโดยที่เงื่อนไข = "1 = 1";
สตริงส่วนตัว selectStr = "*";
เพื่อสตริงส่วนตัว = "";
ขั้นตอนสตริงส่วนตัว = "เพจเจอร์";
orderType บูลส่วนตัว = true;
PageMode ส่วนตัว pageMode = PageMode.Num;
สตริงส่วนตัว sqlConnectionString = ConfigurationSettings.AppSettings ["ฐานข้อมูล"];
สตริงส่วนตัวdatabaseOwner = "dbo";
การเชื่อมต่อข้อมูล #การเชื่อมต่อข้อมูลภูมิภาค
/***////// <สรุป>
/// สตริงการเชื่อมต่อข้อมูล
/// </สรุป>
สตริงส่วนตัว SqlConnectionString
-
รับ
-
กลับ this.sqlConnectionString;
-
ชุด
-
this.sqlConnectionString=ค่า;
-
}
/**//// <สรุป>
/// รับอินสแตนซ์การเชื่อมต่อ
/// </สรุป>
/// <ส่งคืน></ส่งคืน>
SqlConnection ส่วนตัว GetSqlConnectionString()
-
พยายาม
-
ส่งคืน SqlConnection ใหม่ (SqlConnectionString);
-
จับ
-
โยนข้อยกเว้นใหม่ ("สตริงการเชื่อมต่อ SQL ไม่ถูกต้อง");
-
-
/***////// <สรุป>
/// เจ้าของวัตถุข้อมูล
/// </สรุป>
เจ้าของฐานข้อมูลสตริงส่วนตัว
-
รับ
-
ส่งคืน this.databaseOwner;
-
ชุด{
this.databaseOwner=ค่า;
-
}
#endregion
เพจเจอร์สาธารณะ()
-
-
// สิ่งที่ต้องทำ: เพิ่มตรรกะคอนสตรัคเตอร์ที่นี่
-
//Enum.Parse(tyo
-
เพจเจอร์สาธารณะ (สตริง connstr)
-
ถ้า (connstr!=null)
this.SqlConnectionString=connstr;
-
#ภูมิภาค
/***////// <สรุป>
/// ชื่อของขั้นตอนการจัดเก็บที่จะดำเนินการมีขั้นตอนการจัดเก็บเพจเริ่มต้น
/// </สรุป>
ขั้นตอนสตริงสาธารณะ
-
รับ{
ส่งคืนขั้นตอนนี้;
-
ชุด {
ถ้า (value==null || value.Length <=0)
-
this.procedure = "เพจเจอร์";
-
อื่น
-
this.procedure=ค่า;
-
-
}
/**//// <สรุป>
/// จำนวนหน้าที่จะแสดงในปัจจุบัน
/// </สรุป>
ดัชนีหน้าสาธารณะ int
{
รับ
-
กลับ this.pageIndex;
-
ชุด
-
this.pageIndex = ค่า;
-
}
/**//// <สรุป>
///จำนวนหน้าทั้งหมด
/// </สรุป>
สาธารณะ int PageCount
-
รับ
-
กลับ this.pageCount;
-
ชุด
-
this.pageCount = ค่า;
-
}
/**//// <สรุป>
///จำนวนแถวทั้งหมด
/// </สรุป>
สาธารณะ int RecordCount
-
รับ
-
ส่งคืน this.recordCount;
-
ชุด
-
this.recordCount = ค่า;
-
}
/**//// <สรุป>
///จำนวนรายการต่อหน้า
/// </สรุป>
ขนาดหน้าเพจสาธารณะ int
-
รับ
-
กลับ this.pageSize;
-
ชุด
-
this.pageSize = ค่า;
-
}
/**//// <สรุป>
///ชื่อตาราง
/// </สรุป>
TableName สตริงสาธารณะ
-
รับ
-
กลับชื่อตาราง;
-
ชุด
-
this.tableName = ค่า;
-
}
/**//// <สรุป>
/// สอบถามแบบมีเงื่อนไข
/// </สรุป>
สตริงสาธารณะ WhereCondition
-
รับ
-
กลับสภาพ;
-
ชุด
-
โดยที่เงื่อนไข = ค่า;
-
}
/**//// <สรุป>
/// เป้าหมายการค้นหา (เป้าหมายการค้นหา) เช่น: AddTime AS time, ID AS number
/// </สรุป>
สตริงสาธารณะ SelectStr
-
รับ
-
กลับ selectStr;
-
ชุด
-
selectStr = ค่า;
-
}
/**//// <สรุป>
/// เรียงลำดับคอลัมน์
/// </สรุป>
ลำดับสตริงสาธารณะ
-
รับ
-
สั่งคืน;
-
ชุด
-
ลำดับ = มูลค่า;
-
}
/**//// <สรุป>
/// ประเภทการเรียงลำดับ true:asc false:desc
/// </สรุป>
OrderType บูลสาธารณะ
-
รับ
-
ประเภทการสั่งซื้อคืน;
-
ชุด
-
ประเภทการสั่งซื้อ = ค่า;
-
-
/***////// <สรุป>
/// โหมดเพจ
/// </สรุป>
PageMode สาธารณะ PageMode
-
รับ
-
กลับ this.pageMode;
-
ชุด
-
this.pageMode = ค่า;
-
-
/***////// <สรุป>
/// รับจำนวนที่ส่งคืนในปัจจุบัน
/// </สรุป>
สาธารณะ int RowCount
-
รับ
-
กลับ this.rowCount;
-
}
groupby สตริงส่วนตัว;
สตริงสาธารณะ Groupby
-
รับ
-
ส่งคืน this.groupby;
-
ชุด
-
this.groupby = ค่า;
-
}
#endregion
/***////// <สรุป>
/// ผลการค้นหาการแบ่งหน้า
/// </สรุป>
DataTable GetDatas สาธารณะ (int pageIndex)
-
this.pageIndex = pageIndex;
เพจเจอร์ เพจเจอร์ = นี่;
//pager.pageIndex = pageIndex;
DataTable returnTb = การแบ่งหน้า (อ้างอิงเพจเจอร์).Tables[0];
this.rowCount = returnTb.Rows.Count;
กลับคืนTb;
}
/**//// <สรุป>
/// การดำเนินการเพจจิ้งฟังก์ชันขั้นตอนการจัดเก็บ
/// </สรุป>
/// <param name="เพจเจอร์"></param>
/// <ส่งคืน></ส่งคืน>
การแบ่งหน้าชุดข้อมูลส่วนตัว (อ้างอิงเพจเจอร์เพจเจอร์)
-
การใช้ (SqlConnection myConnection = GetSqlConnectionString() )
-
SqlDataAdapter myCommand = SqlDataAdapter ใหม่ (pager.databaseOwner + "."+pager.Procedure, myConnection);
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlParameter parameterPageIndex = new SqlParameter("@PageIndex", SqlDbType.Int);
parameterPageIndex.Value = เพจเจอร์.PageIndex;
myCommand.SelectCommand.Parameters.Add(parameterPageIndex);
SqlParameter parameterPageSize = new SqlParameter("@PageSize", SqlDbType.Int);
parameterPageSize.Value = เพจเจอร์.PageSize;
myCommand.SelectCommand.Parameters.Add(parameterPageSize);
SqlParameter parameterRecordCount = new SqlParameter("@RecordCount", SqlDbType.Int);
พารามิเตอร์RecordCount.Value = 0;
parameterRecordCount.Direction = ParameterDirection.InputOutput;
myCommand.SelectCommand.Parameters.Add (parameterRecordCount);
SqlParameter parameterPageCount = ใหม่ SqlParameter("@PageCount", SqlDbType.Int);
พารามิเตอร์PageCount.Value = 0;
parameterPageCount.Direction = ParameterDirection.InputOutput;
myCommand.SelectCommand.Parameters.Add(parameterPageCount);
พารามิเตอร์ SqlParameterWhereCondition = new SqlParameter("@WhereCondition", SqlDbType.NVarChar,500);
parameterWhereCondition.Value = เพจเจอร์ WhereCondition;
myCommand.SelectCommand.Parameters.Add(parameterWhereCondition);
SqlParameter parameterTableName = new SqlParameter("@TableName", SqlDbType.NVarChar,500);
parameterTableName.Value = เพจเจอร์.TableName;
myCommand.SelectCommand.Parameters.Add(parameterTableName);
SqlParameter parameterOrder = new SqlParameter("@Order", SqlDbType.NVarChar,500);
parameterOrder.Value = เพจเจอร์.Order;
myCommand.SelectCommand.Parameters.Add(parameterOrder);
SqlParameter parameterSelectStr = new SqlParameter("@SelectStr", SqlDbType.NVarChar,500);
parameterSelectStr.Value = เพจเจอร์.SelectStr;
myCommand.SelectCommand.Parameters.Add(parameterSelectStr);
SqlParameter parameterGroupby = new SqlParameter("@Groupby", SqlDbType.NVarChar, 100);
parameterGroupby.Value = เพจเจอร์ Groupby;
myCommand.SelectCommand.Parameters.Add(parameterGroupby);
SqlParameter parameterOrderType = new SqlParameter("@OrderType", SqlDbType.Bit);
parameterOrderType.Value = เพจเจอร์.OrderType==false?0:1;
myCommand.SelectCommand.Parameters.Add(parameterOrderType);
ชุดข้อมูล returnDS = ชุดข้อมูลใหม่ ();
//SqlDataAdapter sqlDA = myCommand.crnew SqlDataAdapter(myCommand);
myCommand.Fill(returnDS);
pager.PageCount = (int)parameterPageCount.Value;
pager.RecordCount = (int)parameterRecordCount.Value
ส่งคืน DS;
}
}
สร้างการแบ่งหน้า #region สร้างการแบ่งหน้า
/***////// <สรุป>
/// สร้างรูปแบบเพจ
/// </สรุป>
/// <param name="เพจเจอร์"></param>
/// <ชื่อพารามิเตอร์ = "url" ></ พารามิเตอร์>
/// <ชื่อพารามิเตอร์ = "isBr" ></ พารามิเตอร์>
/// <ส่งคืน></ส่งคืน>
สตริงสาธารณะ OutPager (เพจเจอร์เพจเจอร์, สตริง url, บูล isBr)
-
StringBuilder ส่งคืน OurWml;
ถ้า(เป็นBr)
-
returnOurWml= new StringBuilder("["+ pager.PageCount.ToString() + "page," + pager.RecordCount.ToString() +"bar]<br/>");
-
อื่น
-
returnOurWml = StringBuilder ใหม่ ();
-
ถ้า (เพจเจอร์.PageMode == PageMode.Num)
-
//ตัวเลขที่แสดงในแต่ละแถวของเพจ
int หน้านับ = 10;
หน้า int = 0;
int startInt = 1;
int endInt = เพจเจอร์.PageCount;
int i = 1;
string endStr = "";
ถ้า (pager.PageCount>pagersCount)
{
// ดับเบิล k = ;
เพจเจอร์ = เพจเจอร์.PageIndex / pagersCount;
ถ้า (เพจเจอร์ == 0)
-
เพจเจอร์ = 1;
-
อื่นถ้า ((pager.PageIndex % pagersCount)!=0)
-
เพจเจอร์ +=1;
}
endInt = เพจเจอร์ * pagersCount;
ถ้า (เพจเจอร์.PageIndex <= endInt)
-
startInt = endInt +1 - pagersCount;
ถ้า (startInt <1)
-
startInt = 1;
-
-
//pagersCount เมื่อปริมาณที่แสดงไม่เพียงพอ
ถ้า (endInt>=pager.PageCount)
-
endInt = เพจเจอร์.PageCount;
-
อื่น
-
//ถ้า (เพจเจอร์.PageIndex)
endStr = " <a href="";
endStr += url + "&pageIndex=" + (endInt + 1).ToString() + "" title='page" + (endInt + 1).ToString()+"page'>";
endStr += ">>";
endStr += "</a> ";
}
ถ้า (เพจเจอร์ > 1)
-
returnOurWml.Append(" <a href="");
returnOurWml.Append(url + "&pageIndex=" + (startInt - 1).ToString() + "" title='page" + (startInt - 1).ToString()+"page'>");
returnOurWml.Append("<<");
returnOurWml.Append("</a> ");
-
-
สำหรับ (i = startInt; i<=endInt;i++)
-
ถ้า (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> ");
-
อื่น
-
returnOurWml.Append("<u>"+ i.ToString() + "</u>");
-
-
returnของเราWml.ผนวก(endStr);
return return OurWml.Append("<br/>").ToString();
-
อื่น
-
ถ้า (เพจเจอร์.PageIndex > 1)
-
returnOurWml.Append(" <a href="");
returnOurWml.Append(url + "&pageIndex=" + (pager.PageIndex -1).ToString() + "">");
returnOurWml.Append("หน้าก่อนหน้า");
returnOurWml.Append("</a> ");
-
ถ้า (pager.PageIndex < pager.PageCount)
-
returnOurWml.Append(pager.PageIndex.ToString());
returnOurWml.Append(" <a href="");
returnOurWml.Append(url + "&pageIndex=" + (pager.PageIndex +1).ToString() + "">");
returnOurWml.Append("หน้าถัดไป");
returnOurWml.Append("</a> ");
-
return return OurWml.Append("<br/>").ToString();
-
}
#endregion
-
-
http://www.cnblogs.com/solucky/archive/2006/09/20/509741.html