首页 > 编程 > ASP > 正文

DataList控件也玩分页 (转自aspcn.com)

2024-05-04 11:06:34
字体:
来源:转载
供稿:网友
  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 众所周知,asp.net中给我们提供了三个数据控件--datagrid,repeater,datalist。在这三个控件中,datagrid控件的功能最强大,repeater控件最忠实于模版原样,datalist控件则兼而有之。

    datagrid控件太有名了,所以以前用的讲的也很多,repeater功能太少,没有什么好讲的。这里主要是讲一讲datalist控件。

    datalist控件其实功能也很强大,他支持选择、编辑,实现的方法也很简单,不过最令人头疼的就是它不像datagrid控件一样内置了分页的功能,这么好的一个控件竟然不能分页!!!

    确实是一个很让人头疼的事情。

    不过,只是datalist没有提供内置的分页功能,但是并不表示,我们不能使用datalist控件来实现分页,既然它不给我分页功能,那只好自己动手了。

    下面是全部原代码,其实用到的方法和php中的分页差不多,只是这里用的是dataadapter与dataset组合,而不是php中的sql语句直接搞定。

    (本程序在.net framework beta 2下测试通过)


    <% @ page language="c#" %>
    <% @ import namespace="system.data" %>
    <% @ import namespace="system.data.oledb" %>
    <script language="c#" runat="server">
    /*
        create by 飞刀
        http://www.aspcn.com
        2001-7-25 01:44

        support .net framework beta 2
    */
    oledbconnection myconn;
    int pagesize,recordcount,pagecount,currentpage;
    public void page_load(object src,eventargs e)
    {
        //设定pagesize
        pagesize = 10;
        
        //连接语句
        string myconnstring = "provider=microsoft.jet.oledb.4.0; data source="+server.mappath(".")+"..//database//db1.mdb;";
        myconn = new oledbconnection(myconnstring);
        myconn.open();

        //第一次请求执行
        if(!page.ispostback)
        {
            listbind();
            currentpage = 0;
            viewstate["pageindex"] = 0;

            //计算总共有多少记录
            recordcount = calculaterecord();
            lblrecordcount.text = recordcount.tostring();

            //计算总共有多少页
            pagecount = recordcount/pagesize;
            lblpagecount.text = pagecount.tostring();
            viewstate["pagecount"] = pagecount;
        }
    }
    //计算总共有多少条记录
    public int calculaterecord()
    {
        int intcount;
        string strcount = "select count(*) as co from score";
        oledbcommand mycomm = new oledbcommand(strcount,myconn);
        oledbdatareader dr = mycomm.executereader();
        if(dr.read())
        {
            intcount = int32.parse(dr["co"].tostring());
        }
        else
        {
            intcount = 0;
        }
        dr.close();
        return intcount;
    }

    icollection createsource()
    {
        
        int startindex;
        
        //设定导入的起终地址
        startindex    = currentpage*pagesize;
        string strsel = "select * from score";
        dataset ds = new dataset();

        oledbdataadapter myadapter = new oledbdataadapter(strsel,myconn);
        myadapter.fill(ds,startindex,pagesize,"score");
        
        return ds.tables["score"].defaultview;
    }
    public void listbind()
    {
        score.datasource = createsource();
        score.databind();
        
        lbnnextpage.enabled = true;
        lbnprevpage.enabled = true;
        if(currentpage==(pagecount-1)) lbnnextpage.enabled = false;
        if(currentpage==0) lbnprevpage.enabled = false;
        lblcurrentpage.text = (currentpage+1).tostring();

    }

    public void page_onclick(object sender,commandeventargs e)
    {
        currentpage = (int)viewstate["pageindex"];
        pagecount    = (int)viewstate["pagecount"];

        string cmd = e.commandname;
        //判断cmd,以判定翻页方向
        switch(cmd)
        {
            case "next":
                if(currentpage<(pagecount-1)) currentpage++;
                break;
            case "prev":
                if(currentpage>0) currentpage--;
                break;
        }

        viewstate["pageindex"] = currentpage;

        listbind();
        
    }
    </script>
    <html>
    <head>
    <title></title>
    </head>
    <body>
    <form runat="server">
    共有<asp:label id="lblrecordcount" forecolor="red" runat="server" />条记录     
    当前为<asp:label id="lblcurrentpage" forecolor="red" runat="server" />/<asp:label id="lblpagecount" forecolor="red" runat="server" />页 

    <asp:datalist id="score" runat="server"
    headerstyle-backcolor="#aaaadd"
    alternatingitemstyle-backcolor="gainsboro"
    edititemstyle-backcolor="yellow"
    >
        <itemtemplate>
            姓名:<%# databinder.eval(container.dataitem,"name") %>
            <asp:linkbutton id="btnselect" text="编辑" commandname="edit" runat="server" />
        </itemtemplate>
    </asp:datalist>
    <asp:linkbutton id="lbnprevpage" text="上一页" commandname="prev" oncommand="page_onclick" runat="server" />
    <asp:linkbutton id="lbnnextpage" text="下一页" commandname="next" oncommand="page_onclick" runat="server" />

    </form>
    </body>
    </html>


     


    运行结果如上图:)

    大家在写程序时,最重要的是自己去动脑去想,决对不是一出现问题去哪去问。问题太简单了,还没有人愿意回答。

    多多思考,多多查资料,才是真正有收获的。

    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表