Okkkks
Помогающий
Offline
|
|
« : 23-03-2011 08:09 » |
|
Ребята, подскажите, пожалуйста, как отметить/снять отметку серверного checkbxа по клику на строку таблицы? Есть серверная табличка griedview. В табличке столбец с checkbx-ами (TemplateField). <asp:GridView ID="gvCategory" runat="server" CssClass="Control" onrowcreated="gvCategory_RowCreated"> <Columns> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:CheckBox ID="cbSelect" runat="server" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
Вот код (как мне казалось должен был работать, но нет =(( ): function ClickRow(CurrentRow, RowIndex) { var check = CurrentRow.getElementByID("cbSelect"); check.Checked = !check.Checked; }
Пробовала так же писать document.getElementByID(<%=cbSelect.ClientID %>), но ничего не получается =((
|
|
« Последнее редактирование: 23-03-2011 08:15 от Okkkks »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 23-03-2011 08:15 » |
|
какой код формируется? <label for="id_chekbox">Метка чекбокса</label><input type="chekbox" checked=checked" /> При выводе будет установлена "галка" Кликая по метке или по полю чекбокса, галка то потухнет, то погаснет то снимется, то установится
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #2 : 23-03-2011 08:21 » |
|
На странице получается вот так: <table class="Control" id="ctl00_ContentPlaceHolder1_gvCategory" > <tr onclick="javascript:ClickRow(this, 0);" > <td> <input id="ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect" type="checkbox" name="ctl00$ContentPlaceHolder1$gvCategory$ctl02$cbSelect" /> </td> </tr> <tr onclick="javascript:ClickRow(this, 1);"> <td> <input id="ctl00_ContentPlaceHolder1_gvCategory_ctl03_cbSelect" type="checkbox" name="ctl00$ContentPlaceHolder1$gvCategory$ctl03$cbSelect" /> </td> </tr> </table>
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 23-03-2011 08:35 » |
|
tr onclick="javascript:ClickRow(this, ID_нужного_чекбокса);"
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #4 : 23-03-2011 08:36 » |
|
Спасибо. Сейчас попробую =) Добавлено через 11 минут и 45 секунд:Не помогло =(( Теперь на странице вот так: <table class="Control" id="ctl00_ContentPlaceHolder1_gvCategory" > <tr onclick="javascript:ClickRow(this,cbSelect);" > <td> <input id="ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect" type="checkbox" name="ctl00$ContentPlaceHolder1$gvCategory$ctl02$cbSelect" /> </td> </tr> <tr onclick="javascript:ClickRow(this, cbSelect);"> <td> <input id="ctl00_ContentPlaceHolder1_gvCategory_ctl03_cbSelect" type="checkbox" name="ctl00$ContentPlaceHolder1$gvCategory$ctl03$cbSelect" /> </td> </tr> </table>
но только checkbox всё равно не находится =((
|
|
« Последнее редактирование: 23-03-2011 08:47 от Okkkks »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 23-03-2011 08:55 » |
|
Okkkks, читай внимательно...
tr onclick="javascript:ClickRow(this, ID_нужного_чекбокса);" а что у тебя?
<tr onclick="javascript:ClickRow(this,cbSelect);" > <td> <input id="ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect"
и что ты чекаешь? (ха, прикольно чекаты по-украински - ждать)
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #6 : 23-03-2011 08:58 » |
|
но дело в том что я же изначально не знаю что у меня айдишник будет ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect это же asp уже сам генерит. У меня изначально сказано что айдишник = cbSelect. Ладно если бы у меня было фиксированое число чекбоксов, тогда ещё можно было бы прописать вручную и то если их не много, но у меня их количество зависит от количества строк в таблице. Добавлено через 2 минуты и 23 секунды:Вот привязка функции к строке таблицы (при создании строки таблицы на сервере): e.Row.Attributes["onclick"] = string.Format("javascript:ClickRow(this, {0});", e.Row.Cells[0].FindControl("cbSelect").ID);
|
|
« Последнее редактирование: 23-03-2011 09:01 от Okkkks »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #7 : 23-03-2011 09:14 » |
|
но дело в том что я же изначально не знаю что у меня айдишник будет ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect это же asp уже сам генерит. У меня изначально сказано что айдишник = cbSelect. Ладно если бы у меня было фиксированое число чекбоксов, тогда ещё можно было бы прописать вручную и то если их не много, но у меня их количество зависит от количества строк в таблице. Добавлено через 2 минуты и 23 секунды:Вот привязка функции к строке таблицы (при создании строки таблицы на сервере): e.Row.Attributes["onclick"] = string.Format("javascript:ClickRow(this, {0});", e.Row.Cells[0].FindControl("cbSelect").ID);
Сам генерит... НЕ ВЕРЮ. Значит надо отключить генерацию айди или генерировать айди, а потом генерировать строку с чекбоксом
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #8 : 23-03-2011 09:24 » |
|
Свойства идентификатора
Серверные веб-элементы управления ASP.NET имеют следующие свойства, действующие как идентификаторы:
*
ID –— это идентификатор, который задается в разметке или путем установки свойства ID элемента управления; *
UniqueID –— это идентификатор, который создается ASP.NET для использования кодом, работающим на сервере; *
ClientID –— это идентификатор, который формируется ASP.NET для использования клиентским кодом (он отображается как значение атрибута id в HTML).
а за идею отключения автогенерации большое спасибо.
назначила свойству ClientIDMode значение static ( теперь ClientID равен ID = cbSelect), но достать чекбокс все равно не получается =((
|
|
« Последнее редактирование: 23-03-2011 09:39 от Okkkks »
|
Записан
|
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #9 : 23-03-2011 11:01 » |
|
ребят, я тут пробую вручную перебирать строчки... function ClickRow(CurrentRow, RowIndex) { var table = document.getElementById("gvCategory");
var listRow = table.getElementsByTagName("tr"); var listColumn = listRow[RowIndex].getElementsByTagName("td"); var el = listColumn[0];
var check = el.getElementById("cbSelect");
check.Checked = !check.Checked; }
таблицу находит, колекцию строк и столбцов возвращает, а дальше не идёт...=(( может вы видите где я не так что делаю?..
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #10 : 23-03-2011 11:06 » |
|
потому что НЕ check = el.getElementById("cbSelect");
а
check = document.getElementById("cbSelect");
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #11 : 23-03-2011 11:20 » |
|
Sla, Спасибо =)) чекбокс наконец-то нашёлся =)))
|
|
« Последнее редактирование: 23-03-2011 11:49 от Okkkks »
|
Записан
|
|
|
|
baldr
|
|
« Ответ #12 : 23-03-2011 11:44 » |
|
Okkkks, оно вполне может быть null, поэтому не стоит применять операцию инвертирования..
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #13 : 23-03-2011 11:50 » |
|
а разве это не булевское значение(либо true либо false)? чувствую себя совсем идиотом а ещё у меня проблема с передачей айдишника в функцию... передаю так: CheckBox cb = (CheckBox)e.Row.Cells[0].FindControl("cbSelect"); cb.ID += e.Row.RowIndex.ToString(); e.Row.Attributes["onclick"] = string.Format("javascript:ClickRow({0});", cb.ID);
принимаю так: function ClickRow(ID) { alert(ID); ..................... }
даж алерт не сробатывает =(( а если передаю туда номер строки всё работает.... прям чудеса... Добавлено через 2 минуты и 33 секунды:тут говорят, что всё таки булевское... Описание свойства checked Возвращает текущее значение флажка или переключателя. Вызывается formName.checkboxName.checked formName.radioButtonName[index].checked forms[index].elements[index].checked Возвращается значение true или false в зависимости от того, установлен или нет флажок.
|
|
« Последнее редактирование: 23-03-2011 11:59 от Okkkks »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #14 : 23-03-2011 12:05 » |
|
не булевское... (что-то мне подсказывает) По умолчанию on или off
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #15 : 23-03-2011 12:39 » |
|
ребят, у меня теперь новая проблема =(( чекбокс нашла, код отрабатывает, alert(check.Checked); возвращает true, а флажок на форме не рисуется =((( скажите скрипт вообще умеет рисовать или мне нужно это моё значение передавать на сервер и там выставлять? вот итоговый код: function ClickRow(CurrentRow, ID) {
var check = document.getElementById("cbSelect"+ID); check.Checked = !check.Checked; alert(check.Checked); }
on/off - говорят, что это значения свойства value для чекбокса, а checked = true/false.
|
|
« Последнее редактирование: 23-03-2011 13:42 от Okkkks »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #16 : 23-03-2011 14:07 » |
|
Checked != checked
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #17 : 23-03-2011 14:09 » |
|
не поняла... меняем на противоположное.... я пробовала писать document.getElementById("cbSelect"+ID).Checked=true; всё равно не рисует =(
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #18 : 23-03-2011 14:11 » |
|
метод checked, но не Checked
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #19 : 23-03-2011 14:15 » |
|
Sla, Спасибо огромное!!! За терпение и, конечно, за помощь! =)) наконец-то заработало... Ура!!!! =))
|
|
« Последнее редактирование: 23-03-2011 14:28 от Okkkks »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #20 : 23-03-2011 14:41 » |
|
та какое тут терпение... это все шишки ничего... еще все впереди, когда дойдешь до изменения атрибутов стиля элементов
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #21 : 24-03-2011 11:01 » |
|
Ну я надеюсь, что и в дальнейшем могу рассчитывать на вашу помощь=)) Ещё раз огромное спасибо =) Ребят, я не знаю, может нужно было новую тему начать... перетащите, если сочтёте нужным... =)) У меня нарисовалась новая проблема =( Скрипт отрабатывает от и до, но теперь сервер, который проверял и выбирал отмеченные чекбоксы в упор не видит изменений=(( просматривает и у всех Checked=false(как при создании установлено по умолчанию, будто пользователь ничего и не выбирал)... =(( при создании строки таблицы меняю айдишник чекбокса cbSelect на cbSelectX, где Х - номер строки таблицы: CheckBox cb = (CheckBox)e.Row.Cells[0].FindControl("cbSelect"); cb.ID += e.Row.RowIndex.ToString();
потом когда пользователь навыбирал и нажал кнопку нужно собрать выбраное: for (int i = 0; i < gvCategory.Rows.Count; i++)//цикл по таблице {
CheckBox check = (CheckBox)grid.Rows[i].Cells[0].FindControl("cbSelect");//находим чекбоксы if (check.Checked)//отбираем отмеченые {} }
но check.Checked всегда = false. если делать CheckBox check = (CheckBox)grid.Rows[i].Cells[0].FindControl("cbSelect"+i);//находим чекбоксы
то вообще возвращает нуль. Никак не могу понять почесу скрипт не может договориться с сервером =(( Помогите, пожалуйста....
|
|
« Последнее редактирование: 24-03-2011 11:21 от Okkkks »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #22 : 24-03-2011 11:09 » |
|
Это ты уже на сервере обрабатываешь?
Ты можешь вывести массив POST или GET после сабмита формы
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #23 : 24-03-2011 11:14 » |
|
Я сейчас ещё проверю.... я тут просто решила убрать скрипт и посмотреть что будет и похоже я где-то ещё нахимичила.... Ситуация такова: Если убрать CheckBox cb = (CheckBox)e.Row.Cells[0].FindControl("cbSelect"); cb.ID += e.Row.RowIndex.ToString();
тогда нормально работает. Может нельзя так менять айдишники?
|
|
« Последнее редактирование: 24-03-2011 11:18 от Okkkks »
|
Записан
|
|
|
|
baldr
|
|
« Ответ #24 : 24-03-2011 11:18 » |
|
Okkkks, вроде ж выяснили что "checked" - с маленькой буквы?
|
|
|
Записан
|
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #25 : 24-03-2011 11:19 » |
|
checked с маленькой в скрипте. на сервере с маленькой не знает Добавлено через 4 минуты и 37 секунд:Sla, Это ты уже на сервере обрабатываешь?
Ты можешь вывести массив POST или GET после сабмита формы
в смысле нужно вручную передавать новое состояние чекбоксов? я надеялась что скрипт и сервер имеют равноправный доступ к свойствам контрола... эээхх...
|
|
« Последнее редактирование: 24-03-2011 11:23 от Okkkks »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #26 : 24-03-2011 12:13 » |
|
как в ручную? запрос с формы поступает в массив GET или POST соответсвенно ты должна обработать ВХОДНЫЕ данные Сервер уже не знает о состоянии контролов
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #27 : 24-03-2011 12:39 » |
|
Sla, нужно использовать Request... я правильно понимаю? А где там искать мои чекбоксы? в Params?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #28 : 24-03-2011 12:49 » |
|
ну... наверное в REQUEST
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Okkkks
Помогающий
Offline
|
|
« Ответ #29 : 24-03-2011 12:50 » |
|
=)) спасибо. буду искать =)
|
|
|
Записан
|
|
|
|
|