|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我以前很喜欢Serv-U,自从它用Java重写之后我就再也没用过,实在是太慢了,我宁可用IIS搭建FTP,虽然IIS搭建FTP在权限管理上很不灵活。asp.net|datagrid|分页 ASP.Net中的DataGrid有内置分页功效,可是它的默许的分页体例效力是很低的,出格是在数据量很年夜的时分,用它内置的分页功效几近是不成能的事,由于它会把一切的数据从数据库读出来再举行分页,这类只拔取了一小部分而丢失落年夜部分的办法是不成往取的.
在最进的一个项目中由于一个办理页面要办理的数据量十分年夜,以是必需分页显现,而且不克不及用DataGrid的内置分页功效,因而本人完成分页.上面先容一下我在项目顶用到的分页办法.
固然显现控件仍是用DataGrid的,由于数据绑定很便利^_^.
要包管不传输冗余的数据,那末必需在数据库中数据读取时完成分页,数据库的分页操纵能够放在存储过程当中.看了CSDN的一篇Blog中讲了一个百万级数据分页的存储历程的完成(http://blog.csdn.net/wellknow/posts/55167.aspx,他的这个办法能够依据分歧情形举行得当的优化),依据他的办法,这里完成一个复杂的SQL语句来完成这里分页必要的存储历程。
createprocedureListProduct
(
@PageIndexint,--分页后必要页的序号
@PageSizeint,--一页的巨细
@ConditionSQLC查询前提的SQL语句
)
AS…详细代码就不写了(能够参考下面的链接).
详细的SQL语句以下:
SELECTTOP100*FROM(select*fromproductwhereproductid<200000)TWHERET.productidNOTIN
(SELECTTOP900productidFROM(selectproductidfromproductwhereproductid<200000)T1ORDERBYT1.productidasc)ORDERBYproductidasc
这条语句的从总的商品(30万)中掏出productid<200000(共20万),再按每页100的巨细分页,然后掏出第10页.
PublicDataTableListProduct(intpageIndex,intpageSize)
{
//ADO.net从数据库中掏出数据的代码就略过^_^.
}
用下面的存储历程读出的数据在DataGrid内里分页,必需把DataGrid的AllowPaging和AllowCustomPaging设置为true
protectedSystem.Web.UI.WebControls.DataGridProductGrid;
ProductGrid.AllowPaging=true;
ProductGrid.AllowCustomPaging=true;
然后在设置要显现的一页的巨细
ProductGrid.PageSize=100;//在显现的时分根据实践的数据显现。
设置一页巨细后,假如要让DataGrid实践分出页数来,还必需设置
ProductGrid.VirtualItemCount=GetProductCount();//GetProductCount()的功效是猎取满意前提的产物数量,这里的前提就是productid<200000.设置这项属性后,那末这个DataGrid的页数就是
VirtualItemCount/PageSize,也就是PageCount的值.不克不及对PageCount间接赋值,由于他是只读的属性.
这些属性设置好后再绑定命据:
ProductGrid.DataSource=ListProduct(1,ProductGrid.PageSize);//在Page_Load内里pageIndex为1,记着判别IsPostBack,在IsPostBack为false时实行这些代码
ProductGrid.DataBind();
如许数据绑定后就能够看到具有分页容貌的页面了.可是还不克不及真实的分页.要完成真实的分页,还必需完成上面的功效.
处置DataGrid的PageIndexChanged事务(处置用户新选中某页时的事务)
privatevoidProductGrid_PageIndexChanged(objectsource,System.Web.UI.WebControls.DataGridPageChangedEventArgse)
{
//假如在存储历程分页功效顶用1暗示第一页的序号的话那末这里必需用e.NewPageIndex+1作为pageIndex(假如选择了DataGrid上页号为3的页,那末e.NewPageIndex就为2),不然的话间接用e.NewPageIndex就能够了
ProductGrid.DataSource=ListProduct(e.NewPageIndex+1,ProductGrid.PageSize);//从数据库中读取新的数据
ProductGrid.DataBind();
//设置以后的Page序号值,假如不设置的话它是不会变得,如许会给用户形成曲解,觉得一切页的数据不异。
ProductGrid.CurrentPageIndex=e.NewPageIndex;
}
假如你处置了DataGrid的ItemCommand的事务的话,必需在ItemCommand事务处置代码后面加上这些代码:
if(e.Item.ItemType==ListItemType.Pager)
{
return;
}
由于当PageIndexChanged事务引发,也就是用户选则了别的一页时会先引发ItemCommand事务,假如不如许处置的话,大概会碰到一些意想不到的情形(假如你的确必要的话也能够下面这段代码,不外最好实践测试一下)。
全部历程完成后,再次扫瞄页面,以为速率真是快多了据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。 |
|