费话不多说,主要是Linq中的Skip及Take这二个扩展方法
int RecordCount = 0;
int PageCount = 1;
DataClassesDataContext data = new DataClassesDataContext();
int SkipIndex = 0;
private string _PageString = "";
public string PageString
{
get {
return _PageString;
}
set {
_PageString = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
RecordCount = data.Orders.Count(); //得到记录数
PageCount = (int)Math.Ceiling((decimal)RecordCount / 10); //以10条记录为一页,计算总页码
int page = 1;
if (!string.IsNullOrEmpty(Request.QueryString["page"]))
page = Convert.ToInt16(Request.QueryString["page"]);
SkipIndex = (page-1) * 10; //计算起始索引,以供后面的Skip扩展方法之用
//拼接分页代码
StringBuilder sb = new StringBuilder();
for (int i = 1; i < PageCount; i++)
{
sb.AppendFormat(@" <a href=""?page={0}"">{0}</a> ",i);
}
_PageString = sb.ToString();
bind();
}
void bind()
{
//奇妙的Linq表达式
var q = (from c in data.Orders select new
{ CustomerID = c.CustomerID, ShipAddress=c.ShipAddress,ID = c.OrderID}
).Skip(SkipIndex).Take(10);
this.GridView1.DataSource = q;
this.GridView1.DataBind();
}
当显示的是第一页时,看linq表达式中为我们动态生成了什么样的语句:
SELECT TOP 10 [t0].[CustomerID], [t0].[ShipAddress], [t0].[OrderID] AS [ID]
FROM [dbo].[Orders] AS [t0]
是不是觉得非常熟悉?
相当Easy