2

我正在尝试删除网格视图中的行。为此,我正在如下所示的 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]但只给出空值。任何人都可以给我解决方案吗?

4

3 回答 3

3

您好在 gridview 中定义数据键并使用此方法

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

然后根据此 ID 删除该行。

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

之后调用您的数据绑定方法将网格视图与更新的记录绑定

对于数据键名,请使用这个

      <asp:gridview datakeynames="UserID"
      runat="server">
于 2013-04-24T06:45:07.983 回答
3

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

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

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

于 2013-04-24T07:16:49.387 回答
1

试试下面的代码:

var empId = Convert.ToInt32(this.gvDetails.DataKeys[e.RowIndex].Values["EmpId"].ToString());
于 2013-04-24T06:47:35.177 回答