2011-12-26 152 views
0

我有一個gridview的一些列和一個模板字段列包含一個按鈕,我想調用一個按鈕點擊過程,但是我想傳遞一列的值該過程但我得到一個錯誤,這裏是按鈕的動作監聽器:(gridview中的列名是team_ID) 錯誤:只能使用Eval(),XPath()和Bind()等數據綁定方法在數據綁定控件的上下文中。 錯誤行:int team_ID = Convert.ToInt32(Eval(「team_ID」));訪問按鈕點擊GridView的數據

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(); 

    } 

回答

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; 
    } 
} 
背後
相關問題