Кнопка, созданная в RowDatabound, не запускает событие щелчка - PullRequest
1 голос
/ 01 июля 2011

Я добавляю LinkButton в событие сетки RowDataBound, и здесь я также запускаю событие click для события

        protected void cgvProjectPropertyList_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        LinkButton lnkDelete = new LinkButton();
        lnkDelete.Text = "Delete";
        e.Row.Cells[COL_INDEX_DELETE].Controls.Add(lnkDelete);
        lnkDelete.CommandName = "Delete";

        lnkDelete.Click += new EventHandler(lnkDelete_Click);
    }
}

void lnkDelete_Click(object sender, EventArgs e)
{

}

lnkDelete_Click.

Спасибо.

Ответы [ 4 ]

1 голос
/ 01 июля 2011

Проблема вызвана тем, что вы добавляете элемент управления LinkButton динамически, что является довольно болезненным подходом в ASP.NET WebForms.

Чтобы события в ASP.NET работали, элемент управления должен быть там после события Load, потому что именно тогда запускаются события элемента управления.В противном случае не существует Linkbutton, с которым можно связать событие щелчка.

Я предлагаю вам вместо этого попытаться добавить LinkButton в разметку.Это избавит вас от боли.Тогда вы можете использовать RowCommand вместо GridView.

Если это не вариант, вам нужно добавить кнопку Link в событии Load и зарегистрировать обработчик для его события click.

У меня есть сообщение , которое использует ListView, которое использует этот подход.Вы должны быть в состоянии извлечь уроки из этого.

0 голосов
/ 01 июля 2011

Вместо этого вы можете использовать RowCommand, например ..

 protected void cgvProjectPropertyList_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Delete")
    {
      e.CommandArgument // will Return current Row primary key value, rather row Index
    }
}

и вам нужно обязательно зарегистрировать событие в GridView OnRowCommand="cgvProjectPropertyList_RowCommand"

0 голосов
/ 01 июля 2011

Проблема в том, что вы добавляете LinkButtons в событие RowDataBound gridview.но когда страница пересылается по нажатию кнопки ссылки, они не воссоздаются, поэтому странице нечего связать с событиями кликов.Вам нужно будет создать их снова в событии PreRender, если это будет обратная передача.Поэтому вам, вероятно, также понадобится сохранить некоторую информацию, которую вы использовали, чтобы определить, как создавать кнопки LinkButton в ViewState, чтобы вы могли воссоздать их в PreRender.Как только вы это сделаете, элементы управления будут доступны странице для привязки событий, и ваш обработчик будет вызван.

0 голосов
/ 01 июля 2011

попробуйте поставить public перед void lnkDelete_Click(object sender, EventArgs e)

, что иногда создает некоторые проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...