Я реализую функцию, которая, когда пользователь нажимает на любую точку в строке в GridView, будет выбрана строка вместо кнопки Select.
Чтобы реализовать это, я использую следующий код:
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
для страницы (в каждой обратной передаче).
Я что-то делаю неправильно? Есть ли более эффективная реализация?
Edit:
Если для параметра EnableEventValidation
установлено значение true
, появится следующая ошибка:
Недопустимый аргумент обратной передачи или обратного вызова. Проверка событий активируется с использованием в конфигурации или <% @Page EnableEventValidation = "true" % > на странице. В целях безопасности эта функция проверяет, что аргументы для событий обратной передачи или обратного вызова берутся из серверного элемента управления, который их первоначально визуализировал. Если данные действительны и ожидаются, используйте метод ClientScriptManager.RegisterForEventValidation, чтобы зарегистрировать данные обратной передачи или обратного вызова для проверки.