2011-12-26 6 views
0

グリッドビューをいくつかの列とボタンを含むテンプレートフィールド列で表示していますが、ボタンのクリックでプロシージャをコールしたいのですが、列の値を(グリッドビューの列名は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プロパティのクリック下のコードはこれを示し、クリックされたボタンの行を取得し、その行から他のコントロールを取得してその値を取得する方法を示しています。

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; 
    } 
} 
の後ろ

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

コード

関連する問題