我的代码:
public void dlBind()
{
int curpage = Convert.ToInt32(this.Label1.Text);
SqlConnection mycon = GetConnection();
string cmdtxt1 = "SELECT * FROM tb_LeaveWord order by bianhao desc";
SqlDataAdapter MyAdapter = new SqlDataAdapter();
MyAdapter.SelectCommand = new SqlCommand(cmdtxt1, mycon);
DataSet ds = new DataSet();
MyAdapter.Fill(ds, "tb_LeaveWord"); PagedDataSource ps = new PagedDataSource();
ps.DataSource = ds.Tables["tb_LeaveWord"].DefaultView;
ps.AllowPaging = true; //是否可以分页 ps.PageSize = 3; //显示的数量
ps.CurrentPageIndex = curpage - 1; //取得当前页的页码 Button1.Enabled = true;
Button2.Enabled = true;
Button3.Enabled = true;
Button4.Enabled = true;
if (curpage == 1)
{
Button1.Enabled = false;//不显示第一页按钮
Button2.Enabled = false;//不显示上一页按钮
}
if (curpage == ps.PageCount)
{
Button3.Enabled = false;//不显示下一页
Button4.Enabled = false;//不显示最后一页
}
this.labCount.Text = Convert.ToString(ps.PageCount);
mycon.Open();
SqlCommand cmd = new SqlCommand("select count(*) from tb_LeaveWord", mycon);
this.Label2.Text = Convert.ToString((int)cmd.ExecuteScalar());
mycon.Close(); this.DataList1.DataSource = ps;
this.DataList1.DataKeyField = "bianhao";
this.DataList1.DataBind();
}
上一页和下一页代码:
protected void Button2_Click(object sender, EventArgs e)
{
this.Label1.Text = Convert.ToString(Convert.ToInt32(this.Label1.Text) - 1);
this.dlBind();
} //下一页
protected void Button3_Click(object sender, EventArgs e)
{
this.Label1.Text = Convert.ToString(Convert.ToInt32(this.Label1.Text) + 1);
this.dlBind();
}
问题:
按下一页只能查看到第二页,虽然一共不只2页,但怎么按都只能保持在第二页;
按上一页的时候就会出现代码提示:
异常详细信息: System.IndexOutOfRangeException: 索引 -3 不是为负数,就是大于行数。 源错误:
行 81: this.DataList1.DataSource = ps;
行 82: this.DataList1.DataKeyField = "bianhao";
行 83: this.DataList1.DataBind();
行 84: }
行 85: public SqlConnection GetConnection()//获取数据联结 堆栈跟踪:
[IndexOutOfRangeException: 索引 -3 不是为负数,就是大于行数。]
System.Data.DataView.GetElement(Int32 index) +60
System.Data.DataView.System.Collections.IList.get_Item(Int32 recordIndex) +5
System.Web.UI.WebControls.EnumeratorOnIList.get_Current() +23
System.Web.UI.WebControls.DataList.CreateControlHierarchy(Boolean useDataSource) +520
System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) +57
System.Web.UI.WebControls.BaseDataList.DataBind() +62
message.dlBind() in d:\百特\baite\message.aspx.cs:83
message.Button2_Click(Object sender, EventArgs e) in d:\百特\baite\message.aspx.cs:107
System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) +75
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +97
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +172
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4926这个问题到底出在哪?让我烦恼了好几天,还请大侠们帮仔细看下我的代码有没哪出问题了,万分感激!!!
public void dlBind()
{
int curpage = Convert.ToInt32(this.Label1.Text);
SqlConnection mycon = GetConnection();
string cmdtxt1 = "SELECT * FROM tb_LeaveWord order by bianhao desc";
SqlDataAdapter MyAdapter = new SqlDataAdapter();
MyAdapter.SelectCommand = new SqlCommand(cmdtxt1, mycon);
DataSet ds = new DataSet();
MyAdapter.Fill(ds, "tb_LeaveWord"); PagedDataSource ps = new PagedDataSource();
ps.DataSource = ds.Tables["tb_LeaveWord"].DefaultView;
ps.AllowPaging = true; //是否可以分页 ps.PageSize = 3; //显示的数量
ps.CurrentPageIndex = curpage - 1; //取得当前页的页码 Button1.Enabled = true;
Button2.Enabled = true;
Button3.Enabled = true;
Button4.Enabled = true;
if (curpage == 1)
{
Button1.Enabled = false;//不显示第一页按钮
Button2.Enabled = false;//不显示上一页按钮
}
if (curpage == ps.PageCount)
{
Button3.Enabled = false;//不显示下一页
Button4.Enabled = false;//不显示最后一页
}
this.labCount.Text = Convert.ToString(ps.PageCount);
mycon.Open();
SqlCommand cmd = new SqlCommand("select count(*) from tb_LeaveWord", mycon);
this.Label2.Text = Convert.ToString((int)cmd.ExecuteScalar());
mycon.Close(); this.DataList1.DataSource = ps;
this.DataList1.DataKeyField = "bianhao";
this.DataList1.DataBind();
}
上一页和下一页代码:
protected void Button2_Click(object sender, EventArgs e)
{
this.Label1.Text = Convert.ToString(Convert.ToInt32(this.Label1.Text) - 1);
this.dlBind();
} //下一页
protected void Button3_Click(object sender, EventArgs e)
{
this.Label1.Text = Convert.ToString(Convert.ToInt32(this.Label1.Text) + 1);
this.dlBind();
}
问题:
按下一页只能查看到第二页,虽然一共不只2页,但怎么按都只能保持在第二页;
按上一页的时候就会出现代码提示:
异常详细信息: System.IndexOutOfRangeException: 索引 -3 不是为负数,就是大于行数。 源错误:
行 81: this.DataList1.DataSource = ps;
行 82: this.DataList1.DataKeyField = "bianhao";
行 83: this.DataList1.DataBind();
行 84: }
行 85: public SqlConnection GetConnection()//获取数据联结 堆栈跟踪:
[IndexOutOfRangeException: 索引 -3 不是为负数,就是大于行数。]
System.Data.DataView.GetElement(Int32 index) +60
System.Data.DataView.System.Collections.IList.get_Item(Int32 recordIndex) +5
System.Web.UI.WebControls.EnumeratorOnIList.get_Current() +23
System.Web.UI.WebControls.DataList.CreateControlHierarchy(Boolean useDataSource) +520
System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) +57
System.Web.UI.WebControls.BaseDataList.DataBind() +62
message.dlBind() in d:\百特\baite\message.aspx.cs:83
message.Button2_Click(Object sender, EventArgs e) in d:\百特\baite\message.aspx.cs:107
System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) +75
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +97
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +172
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4926这个问题到底出在哪?让我烦恼了好几天,还请大侠们帮仔细看下我的代码有没哪出问题了,万分感激!!!
解决方案 »
- .net2008下,报表传参数的问题,始终传不进去,不知为何?
- mobile:TextView 相关问题请教。
- 求教!网络硬盘中怎样对文件进行管理···
- sql查询问题
- 求一个AJAX无刷新技术的方法
- 回发或回调参数无效???/?
- 中文msdn2005,大家来,电驴的我这没速度,谁下下来做个bt的种子
- 如何用代码修改用户的exchange邮箱的地址
- 还是Response.Write的问题,已有几十人回贴,但是没有解决!
- 菜鸟问题!送分!解决马上给分
- 散分了(100只能给一百多的不让给哈哈)大家一起聊聊 现在程序员新人吧!忘版主通融通融,让我们这些平穷的程序员述述苦吧!让大家倾述倾述。等结贴前您再牵到非技术版,我在6月1结贴,谢谢了。
- 关于Session保存Datatable数据问题
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testPage.aspx.cs" Inherits="testPage" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:DataList ID="DataList1" runat="server">
<ItemTemplate>
<table cellpadding="0" cellspacing="0" style="width: 400px;">
<tr>
<td>
<asp:Label ID="Label1" runat="server" Font-Size="9pt" Text='<%# Eval("title") %>' ForeColor="Black"></asp:Label></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
<br />
<table cellpadding="0" cellspacing="0">
<tr>
<td style="width: 100px">
<asp:Label ID="Label5" runat="server" Font-Size="9pt" Text="当前页为 [ ">
</asp:Label><asp:Label ID="Label7" runat="server" Text="1" Font-Size="9pt"></asp:Label>
<asp:Label ID="Label3" runat="server" Font-Size="9pt" Text=" ]"></asp:Label></td>
<td style="width: 40px">
<asp:LinkButton ID="LinkButton2" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton2_Click">首页</asp:LinkButton></td>
<td style="width: 30px">
<asp:LinkButton ID="LinkButton3" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton3_Click" Width="42px">上一页</asp:LinkButton></td>
<td style="width: 48px">
<asp:LinkButton ID="LinkButton4" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton4_Click" Width="48px">下一页</asp:LinkButton></td>
<td style="width: 49px">
<asp:LinkButton ID="LinkButton5" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton5_Click" Width="29px">尾页</asp:LinkButton></td>
<td align="center" style="width: 118px">
<asp:Label ID="Label10" runat="server" Text="总页为 [ " Font-Size="9pt" Width="52px"></asp:Label>
<asp:Label ID="Label2" runat="server" Font-Size="9pt"></asp:Label>
<asp:Label ID="Label4" runat="server" Font-Size="9pt" Text=" ]"></asp:Label></td>
</tr>
</table>
</form>
</body>
</html>testPage.aspx.cs[code=C#]
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;public partial class testPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dlBind();
}
}
public void dlBind()
{
int curpage = Convert.ToInt32(this.Label7.Text);
PagedDataSource ps = new PagedDataSource();
DataSet ds = bind();
ps.DataSource = ds.Tables[0].DefaultView;
ps.AllowPaging = true; //是否可以分页
ps.PageSize = 10; //显示的数量
ps.CurrentPageIndex = curpage - 1; //取得当前页的页码
this.LinkButton3.Enabled = true;
this.LinkButton4.Enabled = true;
this.LinkButton5.Enabled = true;
this.LinkButton2.Enabled = true;
if (curpage == 1)
{
this.LinkButton2.Enabled = false;//不显示第一页按钮
this.LinkButton3.Enabled = false;//不显示上一页按钮
}
if (curpage == ps.PageCount)
{
this.LinkButton4.Enabled = false;//不显示下一页
this.LinkButton5.Enabled = false;//不显示最后一页
}
this.Label2.Text = Convert.ToString(ps.PageCount);
this.DataList1.DataSource = ps;
this.DataList1.DataKeyField = "id";
this.DataList1.DataBind();
}
protected void LinkButton2_Click(object sender, EventArgs e) //第一页
{
this.Label7.Text = "1"; //Label7.Text为当前页
this.dlBind();
}
protected void LinkButton3_Click(object sender, EventArgs e) //上一页
{
this.Label7.Text = Convert.ToString(Convert.ToInt32(this.Label7.Text) - 1);
this.dlBind();
}
protected void LinkButton4_Click(object sender, EventArgs e) //下一页
{
this.Label7.Text = Convert.ToString(Convert.ToInt32(this.Label7.Text) + 1);
this.dlBind();
}
protected void LinkButton5_Click(object sender, EventArgs e) //最后一页
{
this.Label7.Text = this.Label2.Text; //Label2.Text为总页数
this.dlBind();
}
DataSet bind()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("id", typeof(Int32)));
dt.Columns.Add(new DataColumn("title", typeof(String)));
for (int i = 0; i < 100; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = "分页测试数据... " + i.ToString();
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
return ds;
}}[/code]
testPage.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testPage.aspx.cs" Inherits="testPage" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:DataList ID="DataList1" runat="server">
<ItemTemplate>
<table cellpadding="0" cellspacing="0" style="width: 400px;">
<tr>
<td>
<asp:Label ID="Label1" runat="server" Font-Size="9pt" Text='<%# Eval("title") %>' ForeColor="Black"></asp:Label></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
<br />
<table cellpadding="0" cellspacing="0">
<tr>
<td style="width: 100px">
<asp:Label ID="Label5" runat="server" Font-Size="9pt" Text="当前页为 [ ">
</asp:Label><asp:Label ID="Label7" runat="server" Text="1" Font-Size="9pt"></asp:Label>
<asp:Label ID="Label3" runat="server" Font-Size="9pt" Text=" ]"></asp:Label></td>
<td style="width: 40px">
<asp:LinkButton ID="LinkButton2" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton2_Click">首页</asp:LinkButton></td>
<td style="width: 30px">
<asp:LinkButton ID="LinkButton3" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton3_Click" Width="42px">上一页</asp:LinkButton></td>
<td style="width: 48px">
<asp:LinkButton ID="LinkButton4" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton4_Click" Width="48px">下一页</asp:LinkButton></td>
<td style="width: 49px">
<asp:LinkButton ID="LinkButton5" runat="server" Font-Size="9pt" Font-Underline="False"
ForeColor="Red" OnClick="LinkButton5_Click" Width="29px">尾页</asp:LinkButton></td>
<td align="center" style="width: 118px">
<asp:Label ID="Label10" runat="server" Text="总页为 [ " Font-Size="9pt" Width="52px"></asp:Label>
<asp:Label ID="Label2" runat="server" Font-Size="9pt"></asp:Label>
<asp:Label ID="Label4" runat="server" Font-Size="9pt" Text=" ]"></asp:Label></td>
</tr>
</table>
</form>
</body>
</html>
testPage.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;public partial class testPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dlBind();
}
}
public void dlBind()
{
int curpage = Convert.ToInt32(this.Label7.Text);
PagedDataSource ps = new PagedDataSource();
DataSet ds = bind();
ps.DataSource = ds.Tables[0].DefaultView;
ps.AllowPaging = true; //是否可以分页
ps.PageSize = 10; //显示的数量
ps.CurrentPageIndex = curpage - 1; //取得当前页的页码
this.LinkButton3.Enabled = true;
this.LinkButton4.Enabled = true;
this.LinkButton5.Enabled = true;
this.LinkButton2.Enabled = true;
if (curpage == 1)
{
this.LinkButton2.Enabled = false;//不显示第一页按钮
this.LinkButton3.Enabled = false;//不显示上一页按钮
}
if (curpage == ps.PageCount)
{
this.LinkButton4.Enabled = false;//不显示下一页
this.LinkButton5.Enabled = false;//不显示最后一页
}
this.Label2.Text = Convert.ToString(ps.PageCount);
this.DataList1.DataSource = ps;
this.DataList1.DataKeyField = "id";
this.DataList1.DataBind();
}
protected void LinkButton2_Click(object sender, EventArgs e) //第一页
{
this.Label7.Text = "1"; //Label7.Text为当前页
this.dlBind();
}
protected void LinkButton3_Click(object sender, EventArgs e) //上一页
{
this.Label7.Text = Convert.ToString(Convert.ToInt32(this.Label7.Text) - 1);
this.dlBind();
}
protected void LinkButton4_Click(object sender, EventArgs e) //下一页
{
this.Label7.Text = Convert.ToString(Convert.ToInt32(this.Label7.Text) + 1);
this.dlBind();
}
protected void LinkButton5_Click(object sender, EventArgs e) //最后一页
{
this.Label7.Text = this.Label2.Text; //Label2.Text为总页数
this.dlBind();
}
DataSet bind()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("id", typeof(Int32)));
dt.Columns.Add(new DataColumn("title", typeof(String)));
for (int i = 0; i < 100; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = "分页测试数据... " + i.ToString();
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
return ds;
}}
public static PagedDataSource pds = new PagedDataSource(); protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
pds.AllowPaging = true;
pds.CurrentPageIndex = 0;
pds.PageSize = 4;
} RefreshStatus();
}
private void RefreshStatus()
{
pds.DataSource = AdminManager.GetAllAdmins();
DataList1.DataSource = pds;
DataList1.DataBind();
btnFirst.Enabled = !pds.IsFirstPage;
btnPrevious.Enabled = !pds.IsFirstPage;
btnNext.Enabled = !pds.IsLastPage;
btnLast.Enabled = !pds.IsLastPage;
lblPageIndex.Text = Convert.ToString(pds.CurrentPageIndex + 1);
lblPageCount.Text = pds.PageCount.ToString();
}
参考
参考