使用存储过程从GridView中删除行

时间:2012-03-04 19:21:18

标签: c# asp.net stored-procedures gridview

我的代码有什么问题?我想点击删除超链接(按钮)时从gridview中删除一行。

它显示该值超出范围。我该怎么办?

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{
  cn = new SqlConnection(conStr);
  delCmd = new SqlCommand();
  cn = new SqlConnection(conStr);
  cn.Open();

  //delCmd.Connection = cn;

  delCmd = new SqlCommand("spDelEmployee",cn);
  delCmd.CommandType = CommandType.StoredProcedure;
  delCmd.CommandText = "spDelEmployee";
  delCmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values);

  cn.Open();
  delCmd.ExecuteNonQuery();
  DataBind();
  cn.Close();
}

存储过程:

ALTER PROCEDURE spDelEmployee
@EmployeeID int
AS
DELETE FROM Employed WHERE EmployeeID=@EmployeeID
RETURN  

2 个答案:

答案 0 :(得分:0)

您可以在GridView中指定特定单元格。在您的代码中,您只需替换:

GridView1.DataKeys[e.RowIndex].Values

使用:

GridView1.Rows[e.RowIndex].Cells[xxx].Text

其中xxx是包含EmployeeID的0索引列号。

答案 1 :(得分:0)

以下是我解决问题的方法。它有效。

  protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    {

        cn = new SqlConnection(conStr);
        cn.Open();

        delCmd = new SqlCommand("spDelEmployee",cn);
        delCmd.CommandType = CommandType.StoredProcedure;


        object id = GridView1.Rows[e.RowIndex].Cells[em.EmployeeID].Text.ToString();

        delCmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = Convert.ToInt32(id);

        delCmd.ExecuteNonQuery();

    }