MOSS 2007开发中难免会碰到列表方式展现数据并进行翻页功能的要求,MOSS 2007的对象模型中,实现翻页的是SPListItemCollection的ListItemCollectionPosition属性,但是这个属性仅记录和下一页的起始位置,并没有属性来记录上一页的位置,所以实现上翻页就比较麻烦了,而且只能一页一页的翻不能进行跳转翻页。如果要实现上述功能就要计算出所有页面的起始位置然后在其中进行跳转。

网上提供过一种变通的实现方式,就是先预读出一部分数据作为前几页的数据来显示,然后当用户需要看到其他部分的数据时,再翻到当前部分数据的最后一页的时候,就去剩余部分数据中再抽取一部分出来展示,这样逐渐去一部分一部分抽取数据,根据的理论是“从统计学的角度讲,用户一般比较关注前面的查询结果,越到后面的页查看的机会越小。因此,我们只需要先返回前面的页即可。按照每页显示20-50行,一次最多显示10页,那么返回的数据量大概在5000条以内。这个基本是可接受的范围。因此,我们可以先获得前10页的数据,然后再进行分页。至于要获得后面的分页,则可以在查看更多信息时获得。”

搜了搜看着不像是原来那篇文章了,把地址贴下来,大家自己去看,里面也说明了大数据量的一些处理方法和原理,包括实现的代码示例。

http://www.cnblogs.com/dotnba/archive/2007/11/19/964004.html

这几天同事在用.net开发的时候就问,为什么不用GridView自身的功能去实现呢,我一想,也是啊,GridView本身就能实现对数据的分页功能,为什么要把查询出来的数据在每次绑定的时候自己去处理呢,只要获取到的SPListItemCollection在赋给GridView的DataSource时能被GridView转换并识别就可以了啊,而且这也是个集合的类型,没什么问题啊。于是同事就去写了一段小代码来做实验,果然可以。

示例一:默认的数据绑定

<asp:GridView ID="GridView1" runat="server" AllowPaging="True"

onpageindexchanging="GridView1_PageIndexChanging">

<PagerStyle HorizontalAlign="Right" />

</asp:GridView>

protected void Page_Load(object sender, EventArgs e)

{

try

{

this.BindData1();

}

catch (Exception ex)

{

Response.Write(ex.Message);

}

}

private void BindData1()

{

SPSite site = new SPSite("http://sc-learning:20000");

SPWeb web = site.OpenWeb();

SPList list = web.Lists["新闻列表"];

SPQuery query = new SPQuery();

query.Query = "<Where><Eq><FieldRef Name=\"Created\" /><Value Type=\"DateTime\">2009-01-23T12:00:00Z</Value></Eq></Where>";

SPListItemCollection items = list.GetItems(query);

this.GridView1.DataSource = items;

this.GridView1.DataBind();

}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

{

this.GridView1.PageIndex = e.NewPageIndex;

this.BindData1();

}

就这样就简单的实现了查询后数据的分页,示例中实现的是查询列表中2009年1月23日后发布的新闻内容。

这个示例完成后,大家可以看到页面上展示出了SPListItem的所有内容,很多是我们不需要的,我们只需要展示自己需要的字段信息就好了。

示例二:展示自定义字段信息

<asp:GridView ID="GridView2" runat="server" AllowPaging="True"

AutoGenerateColumns="False"

onpageindexchanging="GridView2_PageIndexChanging"

onrowdatabound="GridView2_RowDataBound">

<Columns>

<asp:BoundField DataField="ID" HeaderText="ID" />

<asp:BoundField HeaderText="来源" />

<asp:TemplateField HeaderText="GUID">

<ItemTemplate>

<asp:Label ID="wlabGuid" runat="server" Text='<%# Eval("ID")%>'></asp:Label>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="序号">

<ItemStyle HorizontalAlign="Center" Width="10%" />

<ItemTemplate>

<asp:Label ID="lblnum" runat="server"><%#Container.DataItemIndex + 1%></asp:Label>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="标题">

<ItemStyle HorizontalAlign="Center" Width="80%" />

<ItemTemplate>

<a href='/Lists/List1/DispForm.aspx?ID=<%# Eval("ID")%>' target="_blank"><%# Eval("Title")%></a>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="编辑">

<ItemStyle HorizontalAlign="Center" Width="10%" />

<ItemTemplate>

<asp:ImageButton ID="wibtn_Update" ImageUrl="~/Images/update.gif"  runat="server"

CommandArgument='<%# Eval("ID")%>' onclick="wibtn_Update_Click" />

</ItemTemplate>

</asp:TemplateField>

</Columns>

<PagerStyle HorizontalAlign="Right" />

</asp:GridView>

protected void Page_Load(object sender, EventArgs e)

{

try

{

this.BindData2();

}

catch (Exception ex)

{

Response.Write(ex.Message);

}

}

private void BindData2()

{

SPSite site = new SPSite("http://sc-learning:20000");

SPWeb web = site.OpenWeb();

SPList list = web.Lists["新闻列表"];

SPQuery query = new SPQuery();

query.Query = "<Where><Eq><FieldRef Name=\"Created\" /><Value Type=\"DateTime\">2009-01-23T12:00:00Z</Value></Eq></Where>";

SPListItemCollection items = list.GetItems(query);

this.GridView2.DataSource = items;

this.GridView2.DataBind();

}

protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)

{

this.GridView2.PageIndex = e.NewPageIndex;

this.BindData2();

}

protected void wibtn_Update_Click(object sender, ImageClickEventArgs e)

{

ClientScript.RegisterStartupScript(typeof(GridView), "ItemUpdate", "window.open('/Lists/List1/EditForm.aspx?ID=" + ((ImageButton)sender).CommandArgument.Trim() + @"');", true);

}

protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)

{

switch (e.Row.RowType)

{

case DataControlRowType.DataRow:

SPSite site = new SPSite("http://sc-learning:20000");

SPWeb web = site.OpenWeb();

SPList list = web.Lists["新闻列表"];

SPListItem item = list.GetItemById(Convert.ToInt32(e.Row.Cells[0].Text.Trim()));

if (item["来源"] != null)

{

e.Row.Cells[1].Text = item["来源"].ToString();

}

break;

case DataControlRowType.EmptyDataRow:

break;

case DataControlRowType.Footer:

break;

case DataControlRowType.Header:

break;

case DataControlRowType.Pager:

break;

case DataControlRowType.Separator:

break;

default:

break;

}

}

这样就基本实现要求了。不要再去记录翻页位置,而且可以避免在进行查询的同时数据更新造成的每页起始位置变化数据不同步的问题。

用GridView实现SPListItemCollection翻页相关推荐

  1. Android开发笔记(一百七十二)第二代翻页视图ViewPager2

    正如RecyclerView横空出世取代ListView和GridView那样,Android也推出了二代翻页视图ViewPager2,打算替换原来的翻页视图ViewPager.与ViewPager相 ...

  2. yii2.0下,JqPaginator与load实现无刷新翻页

    JqPaginator下载地址http://jqpaginator.keenwon.com/ 控制器部分: <?php namespace backend\controllers;use com ...

  3. UI设计之【android 仿微信、QQ聊天,带表情,可翻页,带翻页拖动缓冲】

    转自: http://blog.csdn.net/lnb333666/article/details/8546497 如题,这是公司项目的一个功能模块,先上个效果图: 其次大致说说原理: 1,首先判断 ...

  4. Android UI【android 仿微信、QQ聊天,带表情,可翻页,带翻页拖动缓冲】

    如题,这是公司项目的一个功能模块,先上个效果图: 其次大致说说原理: 1,首先判断输入的字符,是否包含表情的文字,比如   这个表情对应的文件名为 emoji_1.png,它对应的文字描述 : [可爱 ...

  5. 程序猿媛:滑动翻页+区域点击事件

    Android GridView 滑动翻页+区域点击事件 如有转载,请保留原文地址:"http://www.cnblogs.com/LuoYer/p/3409988.html",谢 ...

  6. 程序猿媛一:Android滑动翻页+区域点击事件

    2019独角兽企业重金招聘Python工程师标准>>> 滑动翻页+区域点击事件 ViewPager+GrideView 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段. ...

  7. 关于Page翻页效果--Page View Controller

    Page View Controllers 你使用一个page view controller用page by page的方式来展示内容.一个page view controller管理一个self- ...

  8. elementUI 写一个表头列名、表体单元格样式、翻页器相对较为动态的表格el-table

    <template><!-- 表格---------------------------------------- --><div class="table&q ...

  9. 翻页导航条页码计算方法

    在开发搜索引擎等应用时,提供一个翻页导航条是必须的.我看过网上一些相关的代码,搞得很复杂.晕~~~ 其实其数学计算公式非常简单,本文提供两种最常用的算法. 翻页式 样式如下.每次显示10个页码,并提供 ...

最新文章

  1. MIT机器学习种菜项目永久关停
  2. vue 实现 js css html分离
  3. WinCE6.0 修改开机Logo方法
  4. 红外遥控协议-NEC协议
  5. js 内置对象的方法
  6. springMVC4(14)各类视图输出实例分析
  7. static 结构体_C++基础-static
  8. Lightroom Classic 教程,如何在 Lightroom 中使用引导式修复透视图?
  9. [学习笔记] JQuery datepicker用法 [转]
  10. centos6.9去掉网关地址后依然可以ping通外网
  11. Python交通流仿真【含源码】
  12. 数据分析师与数据科学家的区别
  13. 从巴菲特身上学习到的投资哲学
  14. 一元二次方程求解以及表达式
  15. 关于不同局域网内经Internet的P2P通信技术
  16. 侦听器watch及其和计算属性、methods方法的总结
  17. douyin视频下载,搜索用户,粉丝,评论接口、API接口
  18. Vue移动端系列 => [07] 文章详情
  19. 基于令牌的服务器访问验证失败
  20. 《重构》第三章 - 读后感(发散、散弹、依恋)

热门文章

  1. 前端小白程序员入门之前知道这些,半年后都拿到8K+的offer
  2. 纳达尔复出迎澳网开门红 直落三盘横扫本土选手
  3. 两种简单高效的“反人脸识别”方法
  4. LINUX 软件安装。
  5. SQLServer------存储过程的使用
  6. 为Visual Studio更换皮肤和背景图
  7. Memcache监控工具 -- memkeys
  8. JDBC Driver
  9. C++ 虚函数表解析(转)
  10. Java多线程_复习(更新中!!)