доступ к данным GridView по нажатию кнопки - PullRequest
0 голосов
/ 26 декабря 2011

У меня есть вид сетки с некоторыми столбцами и столбец поля шаблона, который содержит кнопку, и я хочу вызвать процедуру при нажатии кнопки, однако я хочу передать значение столбца в процедуру, но получаю ошибку, вот слушатель действия кнопки: (имя столбца в сетке: 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 Ответ

2 голосов
/ 26 декабря 2011

Во-первых, чтобы обработать кнопку, которая была нажата в 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...