首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

初学者实在找不出有关问题出在哪里了,已经奄奄一息,各位神,救命吧!

2013-09-10 
菜鸟实在找不出问题出在哪里了,已经奄奄一息,各位神,救命吧!!!Datalist控件利用PagedDataSource做分页,从

菜鸟实在找不出问题出在哪里了,已经奄奄一息,各位神,救命吧!!!
Datalist控件利用PagedDataSource做分页,从首页开始按下一页按钮按到第二下就岿然不动了。这时候是在第二页,当按上一页按钮返回的时候又出现“索引-5不是为负数就是大于行数”,按尾页按钮出现同样的索引问题。
我的项目思路是这样:

1、一个留言板,利用Datalist控件把数据表中的数据读取过来并显示。
2、利用分页控件PagedDataSource进行分页。
3、页面Page_Load事件中调用自定义函数bangding(int currentpage);
4、函数bangding(int currentpage)里定义PagedDataSource的各项属性
pds.AllowPaging = true;
        pds.PageSize = 5;
        pds.CurrentPageIndex = currentpage;
5、函数参数currentpage用来传递分页按钮传递过来的CurrenPageIndex的值。

下面,勇敢的贴出菜鸟代码

1、留言前台页面


<h1>简易留言板</h1>
        <asp:DataList ID="DataList2" runat="server" OnItemCommand="DataList2_ItemCommand">
            <ItemTemplate>
                <div id="liuyan">
                    <div id="fu">
                        <div id="zuo"><%--前台留言板左右两列布局,这里是左,显示昵称头像等。--%>
                            <ul>
                                <li class="li1">昵称:<%# Eval("name")%></li>
                                <li class="li1">QQ:<%# Eval("qq") %></li>
                                <li class="li1">头像:<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("touxiang")%>'/></li>
                                <li class="li1"><marquee><%# Eval("name")%></marquee></li>
                            </ul>


                        </div>
                        <div id="youu"><%--前台留言板左右两列布局,这里是右边,显示用户发的文字。--%>

                            <%# Eval("content") %>
                        </div>
                    </div>
                </div>
            </ItemTemplate>
            <FooterTemplate><%--以下是分页的四个按钮,首页上一页下一页尾页,在分页的四个按钮中都加入CommandName属性,为后台cs文件的ItemCommand事件传递字符。--%>
                <asp:LinkButton ID="LinkButton1" class="linkbutton" runat="server" CommandName="first">首页</asp:LinkButton>
                <asp:LinkButton ID="LinkButton2" class="linkbutton" runat="server" CommandName="pre">上一页</asp:LinkButton>
                <asp:LinkButton ID="LinkButton3" class="linkbutton" runat="server" CommandName="next">下一页</asp:LinkButton>
                <asp:LinkButton ID="LinkButton4" class="linkbutton" runat="server" CommandName="last">尾页</asp:LinkButton>
                
            </FooterTemplate>
        </asp:DataList>



2、留言的cs文件

public partial class Default3 : System.Web.UI.Page
{
    PagedDataSource pds = new PagedDataSource();//实例化分页类。
    protected void Page_Load(object sender, EventArgs e)
      {
        if (!IsPostBack)
            {


                bangding(0);
            }
      }
//下面是自定义函数bangding()
    private void bangding(int currentpage)
      {

        pds.AllowPaging = true;
        pds.PageSize = 5;
        pds.CurrentPageIndex = currentpage;
        string str = "Data Source=CHUNCHUN;Database=tb_newss;User       ID=sa;Password=123321";
        SqlConnection mon = new SqlConnection(str);
        mon.Open();
        string oo = "select * from Table_1 ";
        SqlDataAdapter da = new SqlDataAdapter(oo, mon);
        DataSet ds = new DataSet();
        da.Fill(ds);
        pds.DataSource = ds.Tables[0].DefaultView;
        DataList2.DataSource = pds;
        DataList2.DataBind();
        mon.Close();
     }

//下面是分页按钮的ItemCommand事件。
   protected void DataList2_ItemCommand(object source, DataListCommandEventArgs e)
      {
        switch (e.CommandName)
        { 
            case"first":
                pds.CurrentPageIndex = 0;
                bangding(pds.CurrentPageIndex);
                break;
            case "pre":
                pds.CurrentPageIndex = pds.CurrentPageIndex-1;
                bangding(pds.CurrentPageIndex);
                break;


            case "next":
                pds.CurrentPageIndex = pds.CurrentPageIndex+1;
                bangding(pds.CurrentPageIndex);
                break;
            case "last":
                pds.CurrentPageIndex = pds.PageCount-1;
                bangding(pds.CurrentPageIndex);
                break;

        }
    }
}




[解决办法]
呵呵,例如 pds.CurrentPageIndex = pds.CurrentPageIndex-1 这句如果真的执行到这里,那么你永远都是得到 -1。而 pds.CurrentPageIndex = pds.CurrentPageIndex+1 永远都得到 1。因为你的 pds 都是刚刚重新初始化来的!

如果要这么麻烦地去使用分页功能,那么你至少需要在ViewState上有 CurrentPageIndex 值,而不是 pds。

热点排行