C# 无法在网格视图中的行删除事件中获取单元格值

C# 无法在网格视图中的行删除事件中获取单元格值,c#,asp.net,gridview,C#,Asp.net,Gridview,我正在尝试删除网格视图中的行。对于这一点,我在下面的行删除事件中编写代码 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string UserId; SqlTransaction tran; using (con = new SqlConnection()) {

我正在尝试删除网格视图中的行。对于这一点,我在下面的行删除事件中编写代码

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();
            }
        }
调试时,单元格值为空。我在这里犯了什么错? 此网格视图在每行前面都有“编辑”和“删除”按钮。
我尝试使用
单元格[0],单元格[2]
,但只给出空值。有谁能给我这个解决方案吗?

我在gridview中定义数据键并使用这个方法

   string UserID = GridView1.DataKeys[e.RowIndex].Value.ToString();
然后根据该ID删除该行

   cmd.CommandText = "Delete from aspnet_Users where UserID=" + UserID;
之后,调用databind方法将gridview与更新的记录绑定

对于DataKeyName,请使用此

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

请尝试以下代码:

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

终于得到了答案。如果我试图以表格单元格的形式获取这些值,那么就没有给出正确的值。所以我试着这样做

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

这对我来说很好。我指的是gridview中的label控件并获取值。

是否确实编写了删除代码,如“commandtext”中的“write select”命令所示?没问题。我只是从上一个块中复制了文本,使其生效。但这里的问题是细胞价值并没有到来。它以空值的形式出现。现在查看已编辑的问题。它非常简单,您可以在html中将其设置为:在我编写相同的答案之前,您已经获得了它,如果您使用ItemTemplate行,那么最好通过FindControl()方法获取值。对我来说,这是获取特定键的值的正确方法。