第一次BindGrid(gridView, true)如果不写的话DeleteCommand.Parameters[i].Value = gridView.DataKeys[e.RowIndex].Values[DeleteCommand.Parameters[i].SourceColumn]; 会出错 提示:索引超出範圍。必須為非負數且小於集合的大小。 參數名稱: index 加上这句的话删除时删除的总是第一个页面上的记录
要翻页的话,好像要用到一个pageindex之类的东东
问题可能出在你的Load函数中了,可能是把pageindex重置了。
先把所有的CODE贴出来,希望大家帮帮忙 public class SingleGridViewPage : SingleFormViewPage { public System.Web.UI.WebControls.GridView gridView = null; #region Constructor public SingleGridViewPage() {
public override void GetData() { base.GetData(); System.Web.UI.WebControls.GridView gridView = null; foreach (Control control in this.Form.Controls) { if (control is GridView) { gridView = (GridView)control; } } if (gridView != null) { //BindGrid(gridView, false); gridView.PageIndexChanging += new System.Web.UI.WebControls.GridViewPageEventHandler(this.gridView_PageIndexChanging); gridView.RowEditing += new System.Web.UI.WebControls.GridViewEditEventHandler(this.gridView_RowEditing); gridView.RowDeleting += new System.Web.UI.WebControls.GridViewDeleteEventHandler(gridView_RowDeleting); gridView.RowCancelingEdit += new System.Web.UI.WebControls.GridViewCancelEditEventHandler(gridView_RowCancelingEdit); gridView.RowUpdating += new System.Web.UI.WebControls.GridViewUpdateEventHandler(gridView_RowUpdating);
提示:索引超出範圍。必須為非負數且小於集合的大小。
參數名稱: index
加上这句的话删除时删除的总是第一个页面上的记录
public class SingleGridViewPage : SingleFormViewPage
{
public System.Web.UI.WebControls.GridView gridView = null;
#region Constructor
public SingleGridViewPage()
{
}
protected override void Page_Load(object sender, EventArgs e)
{
base.Page_Load(sender, e);
GetVisible();
if (IsPostBack)
return;
System.Web.UI.WebControls.GridView gridView = null; foreach (Control control in this.Form.Controls)
{
if (control is GridView)
{
gridView = (GridView)control;
}
} if (gridView != null)
{
BindGrid(gridView, false);
} }
public void GetVisible()
{
_navigationControl.ButtonDeleteVisible = false;
_navigationControl.ButtonFirstVisible = false;
_navigationControl.ButtonLastVisible = false;
_navigationControl.ButtonModifyVisible = false;
_navigationControl.ButtonNextVisible = false;
_navigationControl.ButtonPreviousVisible = false;
_navigationControl.ButtonFirstVisible = false;
_navigationControl.TextBoxRecordCountVisible = false;
_navigationControl.TextBoxStatusVisible = false;
_navigationControl.DropDownListCurrentRowVisible = false;
}
#endregion
public override void GetData()
{
base.GetData();
System.Web.UI.WebControls.GridView gridView = null; foreach (Control control in this.Form.Controls)
{
if (control is GridView)
{
gridView = (GridView)control;
}
} if (gridView != null)
{
//BindGrid(gridView, false);
gridView.PageIndexChanging += new System.Web.UI.WebControls.GridViewPageEventHandler(this.gridView_PageIndexChanging);
gridView.RowEditing += new System.Web.UI.WebControls.GridViewEditEventHandler(this.gridView_RowEditing);
gridView.RowDeleting += new System.Web.UI.WebControls.GridViewDeleteEventHandler(gridView_RowDeleting);
gridView.RowCancelingEdit += new System.Web.UI.WebControls.GridViewCancelEditEventHandler(gridView_RowCancelingEdit);
gridView.RowUpdating += new System.Web.UI.WebControls.GridViewUpdateEventHandler(gridView_RowUpdating);
} }
private void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
System.Web.UI.WebControls.GridView gridView = null;
gridView = (GridView)sender;
if (gridView == null)
return;
gridView.PageIndex = e.NewPageIndex ;
BindGrid(gridView, true);
}
private void BindGrid(object sender,bool bPaging)
{
System.Web.UI.WebControls.GridView gridView = null;
gridView = (GridView)sender;
gridView.DataSource = DataTable ;
if (!bPaging)
{
gridView.PageIndex = 0;
}
gridView.DataBind(); }
if (gridView != null)
{
BindGrid(gridView, false);
}
这句每次提交都会执行,所以你的GridView一直是在PageIndex=0上
if (gridView != null)
{
BindGrid(gridView, false);
} 加在if(!IsPostBack)
{
if (gridView != null)
{
BindGrid(gridView, false);
}
}
试试吧,感觉你写的太乱了,没必要写的这么复杂。
可以写的简单些
private DataTable GetData()
{
....//你的数据
}
protected override void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
gridview.datasource = GetData();
gridview.databind();
}
}
private void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridview.pageindex=e.newpageindex;
gridview.datasource = GetData();
gridview.databind();
}
private void gridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
gridview.datasource = GetData();
gridview.databind();
for (int i = 0; i < DeleteCommand.Parameters.Count; i++)
{
DeleteCommand.Parameters[i].Value = gridView.DataKeys[e.RowIndex].Values[DeleteCommand.Parameters[i].SourceColumn];
}
DeleteCommand.ExecuteNonQuery();
gridview.datasource = GetData();
gridview.databind();
}