err is:索引超出范围。必须为非负值并小于集合大小。参数名: indexerr is:索引超出范围。必须为非负值并小于集合大小。参数名: index

解决方案 »

  1.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Data.OleDb;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace Haiwo
    {
    /// <summary>
    /// test 的摘要说明。
    /// </summary>
    public class test : System.Web.UI.Page
    {
    public System.Web.UI.WebControls.DataGrid DataGrid1;
       
    public DataBase database1=new DataBase(); //引用DataBase类
           
    public void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(! IsPostBack)
    {    

    this.display();
    }
    }
    public void display()
    {
    try
    {   

    string query="select * from leave";

        
    DataGrid1.DataSource=database1.ReDataSet(query);
    DataGrid1.DataBind(); }
    catch(System.Data.OleDb.OleDbException err)
    {
    Response.Write("error is:"+err.Message);
    }
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.DataGrid1.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_CancelCommand);
    this.DataGrid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);
    this.DataGrid1.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_UpdateCommand);
    this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
    this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion public void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {   //删除数据
    try
    {
    int CPI=DataGrid1.CurrentPageIndex;
    int EII=e.Item.ItemIndex;
    int row=CPI*10+EII;
    string query="delete from leave where leaveid=@id";

    //添加参数
    database1.oleDbUpdateCommand1.Parameters.Add(new OleDbParameter("@id",OleDbType.Integer));

    //设置@id参数的值
    database1.oleDbUpdateCommand1.Parameters["@id"].Value=DataGrid1.DataKeys[EII];
    string key =DataGrid1.DataKeys[EII].ToString();

    DataGrid1.SelectedIndex=row;
    database1.OperDB(query);
    row-=1;
    }
    catch(Exception err)
    {
    Response.Write("err is:"+err.Message); }            this.display();
    }
    public void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {   //取消更新
         DataGrid1.EditItemIndex=-1;
     this.display();
    } public void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {    //更新数据
    try
    {   
    int CPI=DataGrid1.CurrentPageIndex;
    int EII=e.Item.ItemIndex;
    int row=CPI*10+EII;

    string query="update leave set leavename=@name,leavecontent=@content,leavetime=@time where leaveid=@id";
      

    //添加参数
    database1.oleDbUpdateCommand1.Parameters.Add(new OleDbParameter("@id",OleDbType.Integer));
    database1.oleDbUpdateCommand1.Parameters.Add(new OleDbParameter("@time",OleDbType.Date));
    database1.oleDbUpdateCommand1.Parameters.Add(new OleDbParameter("@name",OleDbType.VarChar,10));
    database1.oleDbUpdateCommand1.Parameters.Add(new OleDbParameter("@content",OleDbType.VarChar,1000));
    //设置@id参数的值
    database1.oleDbUpdateCommand1.Parameters["@id"].Value=DataGrid1.DataKeys[EII];
    string key =DataGrid1.DataKeys[EII].ToString();
         
    TextBox CurrentTextBox=new TextBox();
    //设置@time参数的值

    CurrentTextBox=(TextBox)e.Item.Cells[1].Controls[0];
    database1.oleDbUpdateCommand1.Parameters[1].Value=CurrentTextBox.Text.ToString();
    //设置@name参数的值
    CurrentTextBox=(TextBox)e.Item.Cells[2].Controls[0];
    database1.oleDbUpdateCommand1.Parameters[2].Value=CurrentTextBox.Text.ToString();
    //设置@content参数的值
    CurrentTextBox=(TextBox)e.Item.Cells[3].Controls[0];
    database1.oleDbUpdateCommand1.Parameters[3].Value=CurrentTextBox.Text.ToString(); 

                    DataGrid1.SelectedIndex=row;
    database1.OperDB(query);
    }
    catch(Exception err)
    {
        Response.Write("err is:"+err.Message); }
                
      DataGrid1.EditItemIndex=-1;

       this.display();
    } public void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {   //编辑数据
        DataGrid1.EditItemIndex=e.Item.ItemIndex;
    this.display();
    }
    public void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
    {

    }
    }
    }
      

  2.   

    看以下代码就行:
    无论是删除还是更改都出错,取消好用
    public void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {   //删除数据
    try
    {
    int CPI=DataGrid1.CurrentPageIndex;
    int EII=e.Item.ItemIndex;
    int row=CPI*10+EII;
    string query="delete from leave where leaveid=@id";

    //添加参数
    database1.oleDbUpdateCommand1.Parameters.Add(new OleDbParameter("@id",OleDbType.Integer));

    //设置@id参数的值
    database1.oleDbUpdateCommand1.Parameters["@id"].Value=DataGrid1.DataKeys[EII];
    string key =DataGrid1.DataKeys[EII].ToString();

    DataGrid1.SelectedIndex=row;
    database1.OperDB(query);
    row-=1;
    }
    catch(Exception err)
    {
    Response.Write("err is:"+err.Message); }            this.display();
    }
    public void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {   //取消更新
         DataGrid1.EditItemIndex=-1;
     this.display();
    } public void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {    //更新数据
    try
    {   
    int CPI=DataGrid1.CurrentPageIndex;
    int EII=e.Item.ItemIndex;
    int row=CPI*10+EII;

    string query="update leave set leavename=@name,leavecontent=@content,leavetime=@time where leaveid=@id";
      

    //添加参数
    database1.oleDbUpdateCommand1.Parameters.Add(new OleDbParameter("@id",OleDbType.Integer));
    database1.oleDbUpdateCommand1.Parameters.Add(new OleDbParameter("@time",OleDbType.Date));
    database1.oleDbUpdateCommand1.Parameters.Add(new OleDbParameter("@name",OleDbType.VarChar,10));
    database1.oleDbUpdateCommand1.Parameters.Add(new OleDbParameter("@content",OleDbType.VarChar,1000));
    //设置@id参数的值
    database1.oleDbUpdateCommand1.Parameters["@id"].Value=DataGrid1.DataKeys[EII];
    string key =DataGrid1.DataKeys[EII].ToString();
         
    TextBox CurrentTextBox=new TextBox();
    //设置@time参数的值

    CurrentTextBox=(TextBox)e.Item.Cells[1].Controls[0];
    database1.oleDbUpdateCommand1.Parameters[1].Value=CurrentTextBox.Text.ToString();
    //设置@name参数的值
    CurrentTextBox=(TextBox)e.Item.Cells[2].Controls[0];
    database1.oleDbUpdateCommand1.Parameters[2].Value=CurrentTextBox.Text.ToString();
    //设置@content参数的值
    CurrentTextBox=(TextBox)e.Item.Cells[3].Controls[0];
    database1.oleDbUpdateCommand1.Parameters[3].Value=CurrentTextBox.Text.ToString(); 

                    DataGrid1.SelectedIndex=row;
    database1.OperDB(query);
    }
    catch(Exception err)
    {
        Response.Write("err is:"+err.Message); }
                
      DataGrid1.EditItemIndex=-1;

       this.display();
    } public void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {   //编辑数据
        DataGrid1.EditItemIndex=e.Item.ItemIndex;
    this.display();
    }
      

  3.   


    int row=CPI*10+EII;
    你的DG中得表得行数有CPI*10+EII这么多行吗?是行数错了,超过了。
      

  4.   

    你可以用MessageBox 来看看row是多少
      

  5.   

    调试是这句话错!//设置@id参数的值
    database1.oleDbUpdateCommand1.Parameters["@id"].Value=DataGrid1.DataKeys[EII].ToString();