我在gridview中技术上有5列
我想将所选行的此userid值传递给我的更新存储过程,该存储过程将设置active = 0,其中userid = @ userid。
不确定是否有办法传递selecteddatakey或仅传递选定的行隐藏列4,这将是索引中的5或者如果您有任何其他更好的方法。
protected void gvRowDeleting2(object sender, GridViewDeleteEventArgs e)
{
String strConnString = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
SqlConnection con = new SqlConnection(strConnString);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "usp_update_user_active";
cmd.Parameters.Add("@userid", SqlDbType.VarChar).Value = userID; ******NEED HELP HERE****
cmd.Connection = con;
try
{
con.Open();
cmd.ExecuteNonQuery();
buildcontractoradmingv();
}
catch (Exception ex)
{
throw ex;
}
finally
{
/*Display message saying company is deactivated*/
string message = "User has been removed";
string script = "window.onload = function(){ alert('";
script += message;
script += "')};";
ClientScript.RegisterStartupScript(this.GetType(), "SuccessMessage", script, true);
con.Close();
con.Dispose();
}
}
答案 0 :(得分:1)
你可以试试这个:
string UserID = YourGrid.Rows[e.RowIndex].Cells[IndexOfHiddenCol].Text;
答案 1 :(得分:0)
最简单的方法是将userID
添加为DataKeyNames
到GridView。在这种情况下,userID
是绑定到GridView的源的数据库列或属性。
<asp:GridView ID="GridView1" runat="server" DataKeyNames="userID"
然后从delete方法中获取DataKeys的值。
int userID = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0]);
或者,您可以将Label
添加到TemplateField
,并将可见性设置为false
。
<asp:Label ID="Label1" runat="server" Text='<%# Eval("userID") %>' Visible="false"></asp:Label>
然后使用FindControl
查找标签并读取它的文本来获取代码中的值。
Label label = GridView1.Rows[e.RowIndex].FindControl("Label1") as Label;
int userID = Convert.ToInt32(label.Text);