我的数据有3页,最后一页只有1条记录,删除最后一条记录,GridView1.PageIndex将超过总页数,竟然不出错!!
//分页代码:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
BindData(txtSearchName.Text,e.NewPageIndex);
ViewState["pageindex"] = e.NewPageIndex;
}
//删除数据后重新绑定数据:
BindData(txtSearchName.Text, Convert.ToInt32(ViewState["pageindex"]));这时ViewState["pageindex"]为3,而数据已只有2页了,为何不出错?
//分页代码:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
BindData(txtSearchName.Text,e.NewPageIndex);
ViewState["pageindex"] = e.NewPageIndex;
}
//删除数据后重新绑定数据:
BindData(txtSearchName.Text, Convert.ToInt32(ViewState["pageindex"]));这时ViewState["pageindex"]为3,而数据已只有2页了,为何不出错?
The PageIndex property is set to a value less than 0. //from msdn
void BindData(string name,int pageindex)
{
String sql="";
try
{
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("app_Data/aspnetdb.mdb");
OleDbConnection conn = new OleDbConnection(connectionString);
if (name.Trim() == "")
sql = "select StudentID,name,math,chinese,english from StudentScore order by StudentID";
else
sql = "select StudentID,name,math,chinese,english from StudentScore where name like '%" + name.Trim() + "%'" + "order by StudentID";
//OleDbDataReader数据源不支持分页
OleDbCommand cmd = new OleDbCommand(sql, conn);
conn.Open();
OleDbDataReader data = cmd.ExecuteReader(CommandBehavior.CloseConnection);
DataTable dt = new DataTable();
dt.Load(data);
GridView1.DataSource = dt;
GridView1.PageIndex = pageindex;
GridView1.DataBind();
data.Close();
}
catch(Exception e)
{
lblMessage.Text = e.ToString();
}
}
BindData(txtSearchName.Text, Convert.ToInt32(ViewState["pageindex"]));
奇怪的是为何不出错!想搞明白。删除按钮的代码如下(写在GridView1_RowCommand事件中):
if (e.CommandName == "del")//演示ButtonField使用
{
int rowindex = Convert.ToInt32(e.CommandArgument); //获取行索引
string sid = GridView1.DataKeys[rowindex].Value.ToString();
String sql = "delete from StudentScore where StudentID=@StudentID";
OleDbParameter[] cmdParms = new OleDbParameter[1];
cmdParms[0] = new OleDbParameter("StudentID", sid);
DbHelperOleDb.ExecuteSql(sql, cmdParms);
BindData(txtSearchName.Text, Convert.ToInt32(ViewState["pageindex"]));
}