这个是结果:
“/WebApplication1”应用程序中的服务器错误。
--------------------------------------------------------------------------------索引超出范围。必须为非负值并小于集合大小。参数名: index 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index源错误: 
行 180: if(e.CommandName=="Edit")   
行 181: {
行 182: string ID = this.DataGrid1.DataKeys[Size+e.Item.ItemIndex].ToString(); 
行 183: Session["CIID"] = ID;
行 184: this.Response.Redirect("/WebApplication1/M_clientinfo.aspx");
 源文件: c:\inetpub\wwwroot\webapplication1\clientinfo.aspx.cs    行: 182 堆栈跟踪: 
[ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index]
   System.Collections.ArrayList.get_Item(Int32 index) +91
   System.Web.UI.WebControls.DataKeyCollection.get_Item(Int32 index)
   WebApplication1.std_select.DataGrid1_ItemCommand(Object source, DataGridCommandEventArgs e) in c:\inetpub\wwwroot\webapplication1\clientinfo.aspx.cs:182
   System.Web.UI.WebControls.DataGrid.OnItemCommand(DataGridCommandEventArgs e)
   System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e)
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
   System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e)
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
   System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e)
   System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   System.Web.UI.Page.ProcessRequestMain()这里是后台代码:
<asp:datagrid id=DataGrid1 runat="server" AutoGenerateColumns="False" BorderWidth="0px" OnPageIndexChanged="SearchGrid_PageIChanged" DataMember="LLClientInfo" DataSource="<%# dataSet31 %>" AllowPaging="True" BackColor="Transparent" DataKeyField="CIClientID" BorderColor="White" BorderStyle="None" Height="394px" Width="520px" EnableViewState="False">
<FooterStyle ForeColor="#000066" BorderStyle="Outset" BackColor="#CCCCFF"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="#CCFF99" BackColor="#009999"></SelectedItemStyle>
<EditItemStyle BorderStyle="Outset"></EditItemStyle>
<AlternatingItemStyle BorderStyle="Outset" BackColor="#CCCCCC"></AlternatingItemStyle>
<ItemStyle HorizontalAlign="Center" ForeColor="#660000" BorderStyle="Outset" BackColor="White"></ItemStyle>
<HeaderStyle Font-Size="Larger" Font-Bold="True" Wrap="False" HorizontalAlign="Center" ForeColor="#000099"
BorderStyle="Outset" BackColor="White"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="CIClientID" SortExpression="CIClientID" HeaderText="客户号">
<HeaderStyle Width="1%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="CIClientState" SortExpression="CIClientState" HeaderText="客户状态">
<HeaderStyle Width="3%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="CIOnlineState" SortExpression="CIOnlineState" HeaderText="客户在线状态">
<HeaderStyle Width="3%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="CIStartDate" SortExpression="CIStartDate" HeaderText="服务开始日期">
<HeaderStyle Width="10%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="CIEndDate" SortExpression="CIEndDate" HeaderText="服务结束日期">
<HeaderStyle Width="10%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="CIUpdateTime" SortExpression="CIUpdateTime" HeaderText="信息更新时间">
<HeaderStyle Width="10%"></HeaderStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="CIAutoUpdateOptions" SortExpression="CIAutoUpdateOptions" HeaderText="自动更新选项">
<HeaderStyle Width="3%"></HeaderStyle>
</asp:BoundColumn>
<asp:ButtonColumn Text="删除" CommandName="Delete"></asp:ButtonColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
</Columns>
<PagerStyle HorizontalAlign="Right" ForeColor="#003399" BackColor="#99CCCC" Mode="NumericPages"></PagerStyle>
</asp:datagrid> 这里是前台代码:
public static int index;
private void Page_Load(object sender, System.EventArgs e)
{
sqlDataAdapter1.Fill(dataSet31);
DataGrid1.DataBind();

}
public void SearchGrid_PageIChanged(Object s, DataGridPageChangedEventArgs e)
{

DataGrid1.CurrentPageIndex = e.NewPageIndex;
BindGrid();
} public  void BindGrid()
{
DataGrid1.DataSource = dataSet31;
DataGrid1.DataBind(); }
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
 

//判断选择的操作。如果是翻页查看,则执SearchGrid_PageIChanged
if( e.Item.ItemType==ListItemType.Pager)
return; int Size   = DataGrid1.PageSize   ;   
if(e.CommandName=="Edit")   
{
string ID = this.DataGrid1.DataKeys[Size*index+e.Item.ItemIndex].ToString(); 
Session["CIID"] = ID;
this.Response.Redirect("/WebApplication1/M_clientinfo.aspx");
return;

}

//判断是否为删除操作
if(e.CommandName=="Delete")   
{   

string ID=DataGrid1.DataKeys[e.Item.ItemIndex].ToString() ;
//执行删除操作
// label.InnerText = h.clientinfodeletemethod(ID); }
} }
}
执行到string ID = this.DataGrid1.DataKeys[Size*index+e.Item.ItemIndex].ToString(); 时就会报错,不知道为什么???郁闷,帮帮忙???

解决方案 »

  1.   

    在这句话之前判断一下
    if (e.ListType=ListType.Item||e.ListType=ListType.Altering)
    {string ID = this.DataGrid1.DataKeys[Size+e.Item.ItemIndex].ToString(); }Size+e.Item.ItemIndex 超出了DataGrid1.DataKeys的行数记录
      

  2.   

    在分业的情况下,如果最后一页只有一行数据,删除该行时就会发生错误。
    解决方法是删除记录后重新绑定数据之前先判断一下,如果当前页是最后一页,并且该页只有一条记录,那么就手工修改 CurrentPageIndex 属性。
    以下是代码
    ====================================================================================
    if(DataGrid1.PageCount>1 && DataGrid1.CurrentPageIndex=(DataGrid1.PageCount-1) && DataGrid1.Items.Count=1)
    {
    DataGrid1.CurrentPageIndex=DataGrid1.CurrentPageIndex-1;
    }
    BindGrid();//重新数据绑定
    ===================================================================================
      

  3.   

    要现在DataGrid1_ItemDataBound事件中设置编辑按钮列的参数
      

  4.   

    我看了我的Datagrid 里的数据,对第一页操作没有问题,对第二页操作就有问题。
    Size+e.Item.ItemIndex 没有超出了DataGrid1.DataKeys的行数记录
      

  5.   

    而且你的前台也没有设置编辑按钮列的CommandName=“Edit”,
    最好是CommandName=“Edit1”,因为Edit可能和系统命令冲突,
    然后在后天if(CommandName==“Edit1”)
    ...