如何将网格视图中隐藏的主键值传递给存储过程?

时间:2017-04-07 16:27:48

标签: c# asp.net .net webforms

我在gridview中技术上有5列

  1. 编辑和停用按钮
  2. 名称
  3. 电话
  4. 电子邮件
  5. [隐藏]用户ID"这是我桌上的主键"
  6. 我想将所选行的此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();
        }
    }
    

2 个答案:

答案 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);