欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET之Datalist详解(分页)

程序员文章站 2022-07-02 18:44:17
datalist控件数据源绑定方法和gridview控件基本相似,但要显示数据需要设计控件的模版 datalist分页 .apsx界面  

datalist控件数据源绑定方法和gridview控件基本相似,但要显示数据需要设计控件的模版
datalist分页
.apsx界面
 <head runat="server">
    <title></title>
    <style type="text/css">
        .style3
        {
            width: 19px;
        }
        .style5
        {
            width: 157px;
        }
        .style7
        {
            width: 133px;
        }
        .style8
        {
            width: 294px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <p>
    <table  border="0" cellpadding="0" cellspacing="0"
            style="width: 653px">
        <tr>
          <td align="left">
        <:datalist id="datalist1" runat="server" style="margin-right: 5px"
            width="575px" onitemcommand="datalist1_itemcommand"
            onitemdatabound="datalist1_itemdatabound" backcolor="lightgoldenrodyellow"
                  bordercolor="tan" borderwidth="1px" cellpadding="2" forecolor="black">
            <headerstyle backcolor="tan" font-bold="true" />
        <itemtemplate>
           <table>
                            <tr style="border-bottom-style: groove; border-bottom-width: medium; border-bottom-color: #ffffff">
                                <td rowspan="3" align="center" class="style3">
                                <a href='#'>
                                                    <img border="0" height="80"
                                                        src='images/showimg.gif'
                                                        width="80"> </img> </a>
                                </td>
                                <td align="left" class="style8">
                                    <asp:image id="image4" runat="server" imageurl="~/images/ico2.gif" />
                                    <a><%#eval("bg_name")%></a>
                                </td>
                                <td align="left" class="style7">
                                    &nbsp;</td>
                                <td class="style5">
                                    &nbsp;</td>
                            </tr>
                            <tr>
                                <td align="left" class="style8">
                                    空间主人:<a><%#eval("bg_name") %></a></td>
                                <td align="left" class="style7">
                                    创建时间:<a><%#eval("bg_createtime","{0:d}") %></a></td>
                                <td class="style5">
                                    &nbsp;</td>
                            </tr>
                            <tr>
                                <td align="left" colspan="3">
                                    个性签名:<a ><%#eval("bg_p_autograph").tostring().length > 20 ? eval("bg_p_autograph").tostring().substring(0, 20) + "..." : eval("bg_p_autograph")%></a></td>
                            </tr>
                        </table>
        </itemtemplate>
        
            <alternatingitemstyle backcolor="palegoldenrod" />
            <footerstyle backcolor="tan" />
        
        <footertemplate>
         <p style="text-align: center">
                    <table id="page" border="1" cellpadding="0" cellspacing="0" 
                        style="font-size: 12px; width: 68%">
                        <tr>
                            <td >
                <asp:label id="labcurrentpage" runat="server"></asp:label>/
                <asp:label id="labpagecount" runat="server"></asp:label>
                <asp:linkbutton id="lnkbtnfirst" runat="server" commandname="first" font-underline="false"
                                    forecolor="black">首页</asp:linkbutton>
                <asp:linkbutton id="lnkbtnfront" runat="server" commandname="pre" font-underline="false"
                                    forecolor="black">上一页</asp:linkbutton> 
                <asp:linkbutton id="lnkbtnnext" runat="server" commandname="next" font-underline="false"
                                    forecolor="black">下一页</asp:linkbutton>
                <asp:linkbutton id="lnkbtnlast" runat="server" commandname="last" font-underline="false"
                                    forecolor="black">尾页</asp:linkbutton>
                                &nbsp;&nbsp; 跳转至:<asp:textbox id="txtpage" runat="server" width="35px" height="21px"></asp:textbox>
                                <asp:button id="button1" runat="server" commandname="search" text="go"
                                    height="19px" />
                <br />
                            </td>
                        </tr>
                    </table>
                </p>
        </footertemplate>
 
            <selecteditemstyle backcolor="darkslateblue" forecolor="ghostwhite" />
 
        </asp:datalist>
                    </td>
        </tr>
      </table>
    </p>
    </form>
</body>
</html>
核心在datalist控件的
itemtemplate和footertemplate 至于其他杂七杂八的都是做的些美工。
.cs 界面
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
using system.data;
using system.data.sqlclient;
using system.configuration;
 
public partial class _default : system.web.ui.page
{
    protected static pageddatasource pds = new pageddatasource();//创建一个分页数据源的对象且一定要声明为静态
    protected void page_load(object sender, eventargs e)
    {
        if (!ispostback)
        {
           //调用自定义方法绑定数据到控件(为以后做mvc打下基础)
            binddatalist(0);
        } 
    }
    //对datelist进行数据绑定
    private void binddatalist(int currentpage)
    {
        pds.allowpaging = true;//允许分页
        pds.pagesize = 3;//每页显示3条数据
        pds.currentpageindex = currentpage;//当前页为传入的一个int型值
        //这里将连接字符串写在web.config文件中,通过这个语句来调用,这样方便对连接字符串的修改
        string connstr = configurationmanager.connectionstrings["connstr"].connectionstring;
        //创建数据库连接对象
        sqlconnection con = new sqlconnection(connstr);
        //定义查询语句,这里最好将sql语句在sql中写好并验证正确确在复制粘贴过来(在对数据查询时最好只查所需的一些不需要的数据就不要取出,这样可以提高运行的效率)
        string strsql = "select * from bg_spatial";//定义一条sql语句
        con.open();//打开数据库连接 (当然此句可以不写的)
        sqldataadapter sda = new sqldataadapter(strsql, con);
        dataset ds = new dataset();
        sda.fill(ds);//把执行得到的数据放在数据集中
        pds.datasource = ds.tables[0].defaultview;//把数据集中的数据放入分页数据源中
        datalist1.datasource = pds;//绑定datalist
        datalist1.databind();
        con.close();
    }
     
    protected void datalist1_itemcommand(object source, datalistcommandeventargs e)
    {
        switch (e.commandname)
        {
            //以下5个为 捕获用户点击 上一页 下一页等时发生的事件
            case "first"://第一页
                pds.currentpageindex = 0;
                binddatalist(pds.currentpageindex);
                break;
            case "pre"://上一页
                pds.currentpageindex = pds.currentpageindex - 1;
                binddatalist(pds.currentpageindex);
                break;
            case "next"://下一页
                pds.currentpageindex = pds.currentpageindex + 1;
                binddatalist(pds.currentpageindex);
                break;
            case "last"://最后一页
                pds.currentpageindex = pds.pagecount - 1;
                binddatalist(pds.currentpageindex);
                break;
            case "search"://页面跳转页
                if (e.item.itemtype == listitemtype.footer)
                {
                    int pagecount = int.parse(pds.pagecount.tostring());
                    textbox txtpage = e.item.findcontrol("txtpage") as textbox;
                    int mypagenum = 0;
                    if (!txtpage.text.equals(""))
                        mypagenum = convert.toint32(txtpage.text.tostring());
                    if (mypagenum <= 0 || mypagenum > pagecount)
                    {
                        response.write("<script>alert('请输入页数并确定没有超出总页数!')</script>");
                        txtpage.text = "";
                    }
                    else
                        binddatalist(mypagenum - 1);
                }
                break;
        }
    }
    protected void  datalist1_itemdatabound(object sender, datalistitemeventargs e)
    {
        if (e.item.itemtype == listitemtype.footer)
        {
            //以下六个为得到脚模板中的控件,并创建变量.
            label currentpage = e.item.findcontrol("labcurrentpage") as label;
            label pagecount = e.item.findcontrol("labpagecount") as label;
            linkbutton firstpage = e.item.findcontrol("lnkbtnfirst") as linkbutton;
            linkbutton prepage = e.item.findcontrol("lnkbtnfront") as linkbutton;
            linkbutton nextpage = e.item.findcontrol("lnkbtnnext") as linkbutton;
            linkbutton lastpage = e.item.findcontrol("lnkbtnlast") as linkbutton;
            currentpage.text = (pds.currentpageindex + 1).tostring();//绑定显示当前页
            pagecount.text = pds.pagecount.tostring();//绑定显示总页数
            if (pds.isfirstpage)//如果是第一页,首页和上一页不能用
            {
                firstpage.enabled = false;
                prepage.enabled = false;
            }
            if (pds.islastpage)//如果是最后一页"下一页"和"尾页"按钮不能用
            {
                nextpage.enabled = false;
                lastpage.enabled = false;
            }
        }
    }
}

 

摘自 jory