Я реализую функцию, когда пользователь нажимает на любую точку строки в GridView, вместо кнопки Выбрать будет выбран ряд.
Для реализациичто я использую следующий код:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Set the hand mouse cursor for the selected row.
e.Row.Attributes.Add("OnMouseOver", "this.style.cursor = 'hand';");
// The seelctButton exists for ensuring the selection functionality
// and bind it with the appropriate event hanlder.
LinkButton selectButton = new LinkButton()
{
CommandName = "Select",
Text = e.Row.Cells[0].Text
};
e.Row.Cells[0].Controls.Add(selectButton);
e.Row.Attributes["OnClick"] =
Page.ClientScript.GetPostBackClientHyperlink(selectButton, "");
}
}
С кодом выше, есть следующие проблемы:
- Это прекрасно работает, только если я
EnableEventValidation
длядля страницы установлено значение false
. SelectedIndexChanged
запускается только в том случае, если Grid.DataBind()
вызывается в Page_Load
для страницы (при каждой обратной передаче).
Я что-то не так делаю?Есть ли лучшая реализация?
Редактировать: Когда EnableEventValidation
установлен на true
, появится следующая ошибка:
Invalidобратный или обратный аргумент.Проверка события включена с использованием в конфигурации или <% @ Page EnableEventValidation = "true"%> на странице.В целях безопасности эта функция проверяет, что аргументы для событий обратной передачи или обратного вызова исходят от серверного элемента управления, который первоначально их представил.Если данные действительны и ожидаемы, используйте метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки.