我有一个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();
}
答案 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;
}
}