按钮点击访问GridView的数据

时间:2011-12-26 00:19:07

标签: c# asp.net mysql visual-studio-2010

我有一个gridview包含一些列和一个包含按钮的模板字段列,我想在按钮单击时调用一个过程,但是我想将一个列的值传递给过程但是我收到一个错误,这是按钮的动作监听器:( gridview中的列名是team_ID) 错误:数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。 错误行:int team_ID = Convert.ToInt32(Eval(“team_ID”));

protected void Button1_Click(object sender, EventArgs e)
    {
        string connStr = ConfigurationManager.ConnectionStrings["MyDbConn"].ToString();
        SqlConnection conn = new SqlConnection(connStr);

        SqlCommand cmd = new SqlCommand("join_team", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        int team_ID = Convert.ToInt32(Eval("team_ID"));
        string email = Session["email"].ToString();
        cmd.Parameters.Add(new SqlParameter("@team_ID", team_ID));
        cmd.Parameters.Add(new SqlParameter("@myemail", email));
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();

    }

1 个答案:

答案 0 :(得分:2)

首先,要处理在TemplateField中点击的按钮,您需要订阅RowCommand方法:

<asp:GridView runat="server" ID="gv" OnRowCommand="yourMethod">

您的网格中可以有多个按钮,这可能会导致点击CommandName属性。下面的代码显示了这一点,以及如何获取单击的按钮行,并从该行检索其他控件以便获取它们的值。

<asp:TemplateField>
      <ItemTemplate>
            <asp:Button CommandName="yourButtonName" runat="server" />

背后的代码

protected void yourMethod(object sender, GridViewCommandEventArgs e) {
    if (e.CommandName == "yourButtonName") {

        GridViewRow row = (GridViewRow)(((Button)e.CommandSource).NamingContainer);

        TextBox someTextBox = row.FindControl("tb") as TextBox;
        string textValue = someTextBox.Text;
    }
}