无法在网格视图中的rowdeleting事件中获取单元格值

时间:2013-04-24 06:25:43

标签: c# asp.net gridview

我正在尝试删除网格视图中的行。对于那个我在rowdeleting事件中编写代码,如下所示。

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            string UserId;
            SqlTransaction tran;

            using (con = new SqlConnection())
            {

                con.ConnectionString = ConfigurationManager.ConnectionStrings["EMASFBAConnectionString"].ConnectionString;
                cmd = new SqlCommand();
                cmd.Connection = con;
                con.Open();
                tran = con.BeginTransaction();
                TableCell cell = GridView1.Rows[e.RowIndex].Cells[1];
                string username = cell.Text;
                cmd.Transaction = tran;

                cmd.CommandText = "Delete from aspnet_Users where UserName='" + username + "'";
                UserId = cmd.ExecuteScalar().ToString();

                if (UserId.Length!=0)
                {
                    //delete user from membership table.
                    errorLabel.Text = "User is ready to delete";

                }
                tran.Commit();
                con.Close();
            }
        }

当我调试单元格值变为空时。我在这里犯了什么错误? 此网格视图在每行前面都有编辑和删除按钮。 我尝试使用Cells[0],Cells[2],但仅提供空值。任何人都可以给我解决方案吗?

3 个答案:

答案 0 :(得分:3)

在gridview中定义datakeys并使用此方法

   string UserID = GridView1.DataKeys[e.RowIndex].Value.ToString();

然后根据此ID删除该行。

   cmd.CommandText = "Delete from aspnet_Users where UserID=" + UserID;

之后调用你的数据绑定方法将gridview与更新的记录绑定

对于datakeynames,请使用此

      <asp:gridview datakeynames="UserID"
      runat="server">

答案 1 :(得分:3)

终于得到了答案。如果我试图将值作为表格单元格,它没有给出正确的值。所以我试过这样,

GridViewRow row = GridView1.Rows[e.RowIndex];
Label usernamelable = (Label)row.FindControl("lblUserNameValue");
string username = usernamelable.Text;  

这对我来说很好。我在gridview中引用标签控件并获取值。

答案 2 :(得分:1)

尝试以下代码:

var empId = Convert.ToInt32(this.gvDetails.DataKeys[e.RowIndex].Values["EmpId"].ToString());