(转)实现DataList的分页 新增列
前几天在做网上商城,要展示商品信息(有图片,有文字),DataView虽然可以分页,但它的缺点是不能自定义显示格式。而DataList解决了它的缺点,但DataList本身却不能分页。很是头痛,于是在网上找了些资料,问题解决了。现在将我的实现过程与大家分享下:
1、自己写代码(自定义控件) 2、用第三方控件(如AspNetPager)
我把我的自定义控件的分享下,
我的DataList分页方法的核心原理是利用PagedDataSource对象,PagedDataSource类封装了DataGrid 控件的属性,这些属性使 DataGrid 可以执行分页,下面是PagedDataSource的公共属性:
AllowCustomPaging 获取或设置指示是否启用自定义分页的值。
AllowPaging 获取或设置指示是否启用分页的值。
Count 获取要从数据源使用的项数。
CurrentPageIndex 获取或设置当前页的索引。
DataSource 获取或设置数据源。
DataSourceCount 获取数据源中的项数。
FirstIndexInPage 获取页中的第一个索引。
IsCustomPagingEnabled 获取一个值,该值指示是否启用自定义分页。
IsFirstPage 获取一个值,该值指示当前页是否是首页。
IsLastPage 获取一个值,该值指示当前页是否是最后一页。
IsPagingEnabled 获取一个值,该值指示是否启用分页。
IsReadOnly 获取一个值,该值指示数据源是否是只读的。
IsSynchronized 获取一个值,该值指示是否同步对数据源的访问(线程安全)。
PageCount 获取显示数据源中的所有项所需要的总页数。
PageSize 获取或设置要在单页上显示的项数。
VirtualCount 获取或设置在使用自定义分页时数据源中的实际项数。第一步,取出数据到datatable中,然后获得dataview,付给PagedDataSource对象
DataView objView = objTable.DefaultView;
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = objView;第二步,PagedDataSource对象objPds的设置
objPds.AllowPaging = true;
objPds.PageSize = 4;
objPds.CurrentPageIndex = int.Parse(ViewState["pageindex"].ToString());上面的这两段代码都是写在BindData()函数中的,供每次点击分页按钮时调用。BindData()函数如下:
private void BindData()
{
Books book = new Books(); //Books是我一个操作数据库表的类
DataTable objTable = book.GetNewBooks(24);//book有个函数,返回结果是DataTable类型,大家根据自己的情况修改此处代码就行了。
if (objTable != null && objTable.Rows.Count > 0)
{
DataView objView = objTable.DefaultView;
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = objView;objPds.AllowPaging = true;
objPds.PageSize = 4;
objPds.CurrentPageIndex = int.Parse(ViewState["pageindex"].ToString());if (!objPds.IsFirstPage)
{
lkPre.Visible = true;
}
else
{
lkPre.Visible = false;
}if (!objPds.IsLastPage)
{
lkNext.Visible = true;
}
else
{
lkNext.Visible = false;
}dlData.DataSource = objPds;
dlData.DataBind();
}
}
上面的第三行代码中的 ViewState["pageindex"] 是用来控制PagedDataSource的当前页的,我们在Page_Load事件中和第三步将要将的函数中来具体讲解如何利用 ViewState["pageindex"]控制当前页。
第三步,分页控制
第二步中说过利用 ViewState["pageindex"] 来控制当前页,为了在页面加载的时候就显示第一页,我们当然要在Page_load事件中将 ViewState["pageindex"]置为0。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["pageindex"] = "0";
BindData(); }
}我们需要加两个linkbutton按钮(Previous、Next)来点击进行分页控制。
<asp:DataList ID="dlData" runat="server" RepeatColumns="4" >
<ItemTemplate>
<asp:Label ID="lblName" runat="server" /><br />
<asp:Label ID="lblTime" runat="server" />
</ItemTemplate>
</asp:DataList>
<asp:linkbutton ID="lkPre" OnCommand="IndexChanging" CommandArgument="pre" runat="server" >PREVIOUS PAGE></asp:linkbutton>
<asp:linkbutton ID="lkNext" OnCommand="IndexChanging" CommandArgument="next" runat="server" >NEXT PAGE</asp:linkbutton>两个按钮的 OnCommand都是IndexChanging()函数,我们通过CommandArgument(pre和next)来区分到底是向前翻还是向后翻。下面是IndexChanging()函数
protected void IndexChanging(object sender, EventArgs e)
{
string strCommand = ((LinkButton)sender).CommandArgument.ToString();int pageindex = int.Parse(ViewState["pageindex"].ToString());
if (strCommand == "pre")
{
pageindex = pageindex - 1;
}
else
{
pageindex = pageindex + 1;
}ViewState["pageindex"] = pageindex;
BindData();
}至此,我们的分页函数已经写完了。
最后附上本人在初步接触DataList之后实现分页和新增列功能的程序:
public void pagebind(int topicID) // DataList控件分页,数据绑定
{ int curpage = Convert.ToInt32(this.lblPage.Text);
SQLiteConnection Conn = Connection.Conn();
Conn.Open(); //打开数据库
string sqlstr = string.Format("select * from v_TopicReply where TopicID={0}", topicID);//获取对应行的数据
SQLiteCommand mycmd = new SQLiteCommand(sqlstr, Conn); //获取数据
mycmd.ExecuteNonQuery(); // 执行操作
//定义并初始化一个数据适配器
SQLiteDataAdapter myda = new SQLiteDataAdapter(mycmd);
//创建一个dataset数据集
DataSet myds = new DataSet();
myda.Fill(myds);
replysum.InnerHtml = Convert.ToString(myds.Tables[].Rows.Count); //显示总的回复数 myds.Tables[].Columns.Add("floorID",typeof(int));
ArrayList list = new ArrayList(); //新增楼层列
for (int i = ; i <= myds.Tables[].Rows.Count; i++)
{
myds.Tables[].Rows[i-]["floorID"] = i;
}
if(myds.Tables[].Rows.Count==)
{
List.Visible = false;
}
//创建一个PageDataSource类创建对象
PagedDataSource ps = new PagedDataSource(); //调用公共类创建数据库链接
ps.DataSource = myds.Tables[].DefaultView;//少分页数据源 ps.AllowPaging = true;
ps.PageSize = ; //单页上显示的项数
ps.CurrentPageIndex = curpage - ; //设置当前页的索引
this.lnkbtnLast.Enabled = true;
this.lnkbtnNext.Enabled = true;
this.lnkbtnOne.Enabled = true;
this.lnkbtnUp.Enabled = true;
if (ps.PageCount <= ) //回复页数小于等于1时隐藏分页按钮
{
div_page.Visible = false;
}
else
{
if (curpage == ) //首页状态
{
this.lnkbtnUp.Enabled = false;
this.lnkbtnOne.Enabled = false;
}
if (curpage == ps.PageCount) //末页状态
{
this.lnkbtnNext.Enabled = false;
this.lnkbtnLast.Enabled = false;
}
}
this.lblBackPage.Text = Convert.ToString(ps.PageCount); //显示总页数
this.Dtl_1.DataSource = ps; //将分页的数据源绑定到DataList控件上
//this.Dtl_1.DataKeyField = "ReplyID"; //获取或设置由datalist属性指定的数据源中的键文字
this.Dtl_1.DataBind();
myds.Dispose();
myda.Dispose();
mycmd.Dispose();
Conn.Close(); }
转载地址:http://blog.csdn.net/mane_yao/article/details/5403599
(转)实现DataList的分页 新增列的更多相关文章
- datatable.js 服务端分页+fixColumns列固定
前言 记得还是15年的时候,工作需要,独自写后台管理系统..记得那时候,最让我头疼的不是后台逻辑,而是数据的列表展示. 列很多的时候,页面显示问题;分页样式问题;表格样式问题;数据加载...很多细节的 ...
- Mysql 修改字段长度、修改列名、新增列
alter table 表名 modify column 字段名 类型; 例如 数据库中user表 name字段是varchar(30) 可以用 ) ; --修改字段长度 )--修改表列名 ); -- ...
- spark使用udf给dataFrame新增列
在 spark 中给 dataframe 增加一列的方法一般使用 withColumn // 新建一个dataFrame val sparkconf = new SparkConf() .setMas ...
- oracle 在已有表新增列内批量加数据
创建每列随机值的语句 create table TEST_ZHAA01A_03 as select rownum as id, to_char(sysdate + rownum/24/3600, 'y ...
- Mysql 修改字段长度、修改列名、新增列、修改自增主键起始值
alter table 表名 modify column 字段名 类型; 例如 数据库中user表 name字段是varchar(30) 可以用 ) ; --修改字段长度 )--修改表列名 ); -- ...
- Hadoop生态新增列式存储系统Kudu
Hadoop生态系统发展到现在,存储层主要由HDFS和HBase两个系统把持着,一直没有太大突破.在追求高吞吐的批处理场景下,我们选用HDFS,在追求低延迟,有随机读写需求的场景下,我们选用H ...
- ext:grid分页,列宽度自动填满grid宽度
var cm = new Ext.grid.ColumnModel([{ header : '编号', dataIndex : 'id' }, { header ...
- BootStrap的table技术小结:数据填充、分页、列宽可拖动
本文结构:先说明,后代码.拷贝可直接运行. 一.demo结构: 二.文件引入 这些里面除了下面2个比较难找,其他的都很好找 bootstrap-table-resizable.js colResiza ...
- 【mysql】新增列 时间戳
参考地址:https://www.cnblogs.com/SZxiaochun/p/9299392.html ALTER TABLE worksheet_data_12 ), ADD COLUMN ` ...
随机推荐
- [LeetCode] Binary Tree Right Side View 二叉树的右侧视图
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...
- Servlet的生命周期
Servlet的生命周期 Servlet的生命周期是由tomcat服务器来控制的. 1 构造方法: 创建servlet对象的时候调用.默认情况下,第一访问servlet就会创建servlet对象只创建 ...
- 基本组件的使用——UINavigationController
作用:在多个ViewController中切换.UINavigationController内部以栈的形式维护一组ViewController, 因此,当导航进入一个新视图的时候,会以push的形式将 ...
- array
1.array() //创建数组 2.array_change_key_case($arr,CASE_UPPER); //将键名全部大写,不加参数全变小写--没啥用 3.array_chunk($ar ...
- js或css文件后面的参数是什么意思?
经常看到不少导航网站测样式或js文件后面加了一些参数,主要是一你为一些并不经常更新的页面重新加载新修改的文件. 经常遇到页面里加载的js与css文件带有参数,比如: <script type=& ...
- mybatis一对多关联
这里的一对多指的是:当我们查询一个对象的时候,同时将其有关联的多方对象都查询出来. 下面以国家(Country)和部长(Minsiter)做案例 一个国家有多个部长 1.定义实体 定义实体的时候需要注 ...
- [转]ExtJs基础--Html DOM、Ext Element及Component三者之间的区别
要学习及应用好Ext框架,必须需要理解Html DOM.Ext Element及Component三者之间的区别. 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM ...
- sql三维数据
今天有个钢铁项目在导入数据时 存货规格各种缺 相吐血 原表结构是这样的 编码.规格.名称 三种存货 三种都有想同的规格 规格对分厚度和宽度 那么问题来了 简简单单的几个厚度宽度 三种商品 就到了 10 ...
- spring MVC入门教程
写一个spring mvc后台传值到前台的一个小例子. 分为以下几个步骤: 1.创建web项目. 导入项目包.具体有如下: spring-aop-4.0.4.RELEASE.jar spring-be ...
- nginx代理TCP端口
1.升级nginx 版本至1.9.0以上 升级流程参考 nginx平滑升级 2.配置编译的时候需要加上 ./configure --prefix=/usr/local/nginx --user=www ...