我正在尝试删除网格视图中的行。对于那个我在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]
,但仅提供空值。任何人都可以给我解决方案吗?
答案 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());