问题提示:索引超出范围。必须为非负值并小于集合大小
代码如下:      
  for (i = 0; i < GridViewSchool.Rows.Count; i++)
        {
            Flag = ((CheckBox)GridViewSchool.Rows[i].FindControl("chkSel")).Checked;
            if (Flag)
            {
                animal.ID = Convert.ToInt16(GridViewSchool.DataKeys[i].Value);
                //索引超出范围。必须为非负值并小于集合大小
                animal.DeleteAnimal();
            }
        }
注:GridViewSchool 是一个 GridView ,chkSel 是一个复选按钮,animal.ID 是 类名.关键字,
    animal.DeleteAnimal()是调用类中的删除方法。删除方法如下:
    #region   删除指定动物
    public void DeleteAnimal()
    {
        Database db = DatabaseFactory.CreateDatabase("DBConnectionString");
        string strSql = "delete from Animal where ID = '" + this.ID + "'";
        DbCommand cmd = db.GetSqlStringCommand(strSql);
        try
        {
            db.ExecuteNonQuery(cmd);
        }
        catch (Exception)
        {
            // 没事
        }
    }
    #endregion

解决方案 »

  1.   

    GridViewSchool.DataKeys[i]
    这里i用的不合适吧,i是行数
      

  2.   

    应该没错啊!不然用GridViewSchool.DataKeys[填数].Value测测是哪个数字的问题?我的笨办法
      

  3.   

     GridViewSchool.DataKeys你的主键的数量跟列的数量一样多??
      

  4.   

    GridViewSchool.DataKeys 与 行数一样多 ?
      

  5.   

    问题解决了。问题出在这里:
     <asp:GridView ID="gvNewsList" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="NewsId"
    PageSize="15" Width="95%" OnPageIndexChanging="gvNewsList_PageIndexChanging" CssClass="tbs1" CellSpacing="1" border="0" OnSelectedIndexChanged="gvNewsList_SelectedIndexChanged">
      这里没有 DataKeyNames 属性
    [size=50px]结贴了[/size]