Я динамически привязываю типизированный список к элементу управления GridView. Элемент управления сеткой находится на странице asp.net, которая завернута в asp: UpdatePanel (Ajax). Первый столбец содержит элемент управления флажком. В этом столбце может быть указан только один флажок. Если пользователь установил флажок, все остальные флажки должны быть сняты.GridView с столбцом флажка. Клиентский скрипт для снятия отметки со всех, кроме текущего флажка
Я пытаюсь достичь этого, используя сценарий на стороне клиента без успеха. В обработчике события GridView RowDatabound попытались добавить атрибут в CheckBox, содержащийся внутри ячейки.
protected void ErrorGridView_RowDatabound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if(e.Row.Cells[0].HasControls())
{
foreach (var control in e.Row.Cells[0].Controls)
{
if (!(control is CheckBox)) continue;
var checkBox = (CheckBox)control;
checkBox.Attributes.Add("CheckedChanged", "errorCheckChanged");
return;
}
}
}
Клиентская скрипт зарегистрирован обработчик событий Page_Load - как показано ниже:
если (Page.ClientScript.IsClientScriptBlockRegistered ("ErrorsCheckBoxHandler")!) Page.ClientScript.RegisterClientScriptBlock (GetType(), «ErrorsCheckBoxHandler», «function errorCheckChanged() {window.alert (\" here \ ");}");
Проблема заключается в том, что функция не вызывается при нажатии каких-либо флажков. Надеюсь, кто-то может пролить свет на то, что мне здесь не хватает?
Кроме того, что было бы лучшим способом выполнить отмену любых других флажков, отмеченных в целевом столбце?
Моим планом было бы изменить функцию errorCheckChanged, чтобы принять один параметр (объект флажка). Я бы изменил приведенный выше код; добавление в капельную атрибут подписи:
checkBox.Attributes.Add ("CheckedChanged", "errorCheckChanged (это)");
Надеется, я тогда буду в состоянии:
(1) определить, является ли состояние флажка «проверено». (Если он «проверен», затем продолжите ниже шагов)
(2) установите флажок parent (= cell), а затем определите затронутую строку GridView.
(3) Прокрутите все строки, установив флажки в «Проверено = false», за исключением текущей строки.
Будет ли это считаться правильным подходом?
Благодаря
Грант
Отличный материал Selva. После этой концепции работал. За исключением того, что я не смог получить-getElementById ('<% = myGridView.ClientID%>', мне пришлось жестко закодировать значение. –
Это не позволяет многократно проверять флажок. Как включить многократную проверку? – rickyProgrammer
@rickyProgrammer Требование OP состоит в том, чтобы проверить выбранную 'CheckBox' и un проверить оставшиеся. Если вы хотите несколько проверок, используйте это. 'function errorCheckChanged() { var gridView = document.getElementById ('<% = GridView1.ClientID%>'); var Элементы = gridView.getElementsByTagName ('input'); для (var i = 0; i