2012-05-25 108 views
0

我想从gridview中删除行 - 但是当我这样做时,删除其他行中的其他控件的当前值。gridview删除行

删除了随机行后,我也收到以下错误。

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

protected void gvShoppingCart_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    //This is the method that responds to the Remove button's click event 
    #region remove item 

    if (e.CommandName == "Remove") 
    { 
     int rowid = Convert.ToInt32(e.CommandArgument); 
     //Response.Write(rowid); 
     // Response.End(); 
     //Gridview1.DeleteRow(rowid); 
     //Response.Write(Convert.ToInt32(e.CommandArgument)); 
     // Response.End(); 
     int rowIndex = rowid; 
     if (ViewState["CurrentTable"] != null) 
     { 
      DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"]; 

      DataRow drCurrentRow = null; 

      if (dtCurrentTable.Rows.Count > 0) 
      { 
       for (int i = 0; i < dtCurrentTable.Rows.Count; i++) 
       { 
        TextBox box1 = (TextBox)Gridview1.Rows[rowIndex - 1].Cells[1].FindControl("TextBox1"); 

        TextBox box2 = (TextBox)Gridview1.Rows[rowIndex - 1].Cells[2].FindControl("TextBox2"); 

        TextBox box3 = (TextBox)Gridview1.Rows[rowIndex - 1].Cells[3].FindControl("TextBox3"); 

        TextBox box4 = (TextBox)Gridview1.Rows[rowIndex - 1].Cells[4].FindControl("TextBox4"); 
        TextBox box5 = (TextBox)Gridview1.Rows[rowIndex - 1].Cells[5].FindControl("TextBox5"); 
        box1.Text = dtCurrentTable.Rows[i]["Column1"].ToString(); 

        box2.Text = dtCurrentTable.Rows[i]["Column2"].ToString(); 

        box3.Text = dtCurrentTable.Rows[i]["Column3"].ToString(); 

        box4.Text = dtCurrentTable.Rows[i]["Column4"].ToString(); 
        box5.Text = dtCurrentTable.Rows[i]["Column5"].ToString(); 
       } 

       dtCurrentTable.Rows.RemoveAt(rowid - 1); 

       /*dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text; 

       dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text; 

       dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text; 
       dtCurrentTable.Rows[i - 1]["Column4"] = box4.Text; 
       dtCurrentTable.Rows[i - 1]["Column5"] = box5.Text;*/ 
      } 

      ViewState["CurrentTable"] = dtCurrentTable; 

      Gridview1.DataSource = dtCurrentTable; 

      Gridview1.DataBind(); 
     } 
     else 
     { 
      Response.Write("ViewState is null"); 
     } 
    } 
} 

感谢您的帮助

+0

如果您将调试设置更改为始终抛出异常,这会给您带来什么新信息? (调试 - >异常 - >打勾公共语言运行时异常抛出列) –

回答

0

改变你的条件...

​​

注: 你确定e.CommandArgument是给特定行的索引?

+0

嗨感谢您的答复,e.commandargumnet是正确的,它检索rownumber,所以我必须加-1才能得到正确的数据行 它是当我删除多行,commandargument不更新 –