菜鸟实在找不出问题出在哪里了,已经奄奄一息,各位神,救命吧!!!
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>
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;
}
}
}