【ASP.NET】datalist、repeater+PagedDataSource分页翻页

 

 
 
1,datalist可以使用html中table元素标签随意展示和控制数据在列表项中显示。 
★单击普通项中imagebutton,改变对应普通项的背景色(可以互斥) 
在datalist的项命令ItemCommand事件中写代码: 
int index=e.Item.ItemIndex; //获取单击项索引 
dl1.Items[index].BackColor=System.Drawing.Color.Red; //更改对应项的背景色 
 
2,repeater不提供任何布局内容,但可以使用无序或有序列表,把<ul>或<ol>标签及其元素要写完整。 
并且用于RSS基于XML格式,不能在其中出现html标签包括<、>之类的都会引发异常。 
 
3,PagedDataSource+datalist实现分页翻页 
其实就是指定PagedDataSource的几个属性 
PagedDataSource pdsroomtype = new PagedDataSource();//创建PagedDataSource实例 
pdsroomtype.AllowPaging = true;                    //允许分页 
pdsroomtype.PageSize = 1;                          //每页记录数 
pdsroomtype.CurrentPageIndex = Convert.ToInt32(ViewState["currentpageindex"]);//首页从0开始 
pdsroomtype.DataSource = GetRoomType();//指定PagedDataSource数据源为数据泛型 
dl1.DataSource = pdsroomtype;//绑定数据展示控件的数据源为PagedDataSource实例 
dl1.DataBind(); 
enable(pdsroomtype);//设置翻页按钮状态 
return pdsroomtype.PageCount;//返回总页数 
 
翻页 
pdsroomtype.CurrentPageIndex = Convert.ToInt32(ViewState["currentpageindex"])+1; 
或 
pdsroomtype.CurrentPageIndex = Convert.ToInt32(ViewState["currentpageindex"])-1; 
首页 
pdsroomtype.CurrentPageIndex =0; 
尾页 
pdsroomtype.CurrentPageIndex = 总页数-1; 
PagedDataSource实现分页只能用于数据行在万行以内,而且效率低下。一般用拼装sql语句分页,或者用基于此原理的第三方控件ASPNetPager分页,将在下一篇文章中详细讲解。 
本人写的PagedDataSource+datalist分页源代码如下,供大家参考: 
 
using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Data.SqlClient; 
using System.Collections.Generic; 
 
 
public partial class _Default : System.Web.UI.Page 

    protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!Page.IsPostBack) 
        { 
            ViewState["currentpageindex"] = 0; 
            bangding(); 
        } 
    } 
    //分页绑定PagedDataSource 
    public int bangding() 
    { 
        PagedDataSource pdsroomtype = new PagedDataSource();//创建PagedDataSource实例 
        pdsroomtype.AllowPaging = true;                    //允许分页 
        pdsroomtype.PageSize = 1;                          //每页记录数 
        pdsroomtype.CurrentPageIndex = Convert.ToInt32(ViewState["currentpageindex"]);//首页从0开始 
        pdsroomtype.DataSource = GetRoomType();//指定PagedDataSource数据源为数据泛型 
        dl1.DataSource = pdsroomtype;//绑定数据展示控件的数据源为PagedDataSource实例 
        dl1.DataBind(); 
        enable(pdsroomtype);//设置翻页按钮状态 
        return pdsroomtype.PageCount;//返回总页数 
    } 
 
    List<RoomType> GetRoomType() 
    { 
        SqlConnection con = new SqlConnection(); 
        con.ConnectionString = "Data Source=.;Initial Catalog=HotelManage;Integrated Security=True"; 
        SqlCommand cmd = new SqlCommand(); 
        cmd.Connection = con; 
        cmd.CommandText = "select * from roomtype"; 
        List<RoomType> list = new List<RoomType>(); 
        con.Open(); 
        SqlDataReader read = cmd.ExecuteReader(); 
        while (read.Read()) 
        { 
            RoomType roomtype = new RoomType(); 
            roomtype.TypeID = (int)read["typeid"]; 
            list.Add(roomtype); 
        } 
        read.Close(); 
        con.Close(); 
        return list; 
    } 
//单击普通项imagebutton更改对应项的背景色 
    protected void dl1_ItemCommand(object source, DataListCommandEventArgs e) 
    { 
        int index = e.Item.ItemIndex; 
        dl1.Items[index].BackColor = System.Drawing.Color.Red; 
    } 
    //向后翻页 
    protected void btnnext_Click(object sender, EventArgs e) 
    { 
        ViewState["currentpageindex"] = Convert.ToInt32(ViewState["currentpageindex"]) + 1; 
        bangding(); 
    } 
    //向前翻页 
    protected void btnpre_Click(object sender, EventArgs e) 
    { 
        ViewState["currentpageindex"] = Convert.ToInt32(ViewState["currentpageindex"]) - 1; 
        bangding(); 
    } 
    //跳转到尾页 
    protected void btnlast_Click(object sender, EventArgs e) 
    { 
        ViewState["currentpageindex"] = bangding() - 1;//尾页为总页数减1 
        bangding(); 
    } 
    //跳转到首页 
    protected void btnfirst_Click(object sender, EventArgs e) 
    { 
        ViewState["currentpageindex"] = 0; 
        bangding(); 
    } 
    //设置翻页按钮是否可用 
    public void enable(PagedDataSource pds) 
    { 
        btnfirst.Enabled = true; 
        btnpre.Enabled = true; 
        btnnext.Enabled = true; 
        btnlast.Enabled = true; 
        if (pds.IsFirstPage)//首页按钮状态 
        { 
            btnfirst.Enabled = false; 
            btnpre.Enabled = false; 
        } if (pds.IsLastPage)//尾页按钮状态 
        { 
            btnnext.Enabled = false; 
            btnlast.Enabled = false; 
        } 
    } 
 
posted @ 2011-06-09 16:09  ValiancyHe  阅读(652)  评论(0)    收藏  举报