Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Как отметить checkbx по клику на строку таблицы?  (Прочитано 31488 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Okkkks
Помогающий

by
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 23-03-2011 08:15 » 

какой код формируется?
<label for="id_chekbox">Метка чекбокса</label><input type="chekbox" checked=checked" />
При выводе будет установлена "галка"
Кликая по метке или по полю чекбокса, галка то потухнет, то погаснет то снимется, то установится
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 23-03-2011 08:35 » 

tr onclick="javascript:ClickRow(this, ID_нужного_чекбокса);"
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Помогающий

by
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Помогающий

by
Offline 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
Помогающий

by
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 23-03-2011 11:06 » 

потому что
НЕ
check = el.getElementById("cbSelect");

а

check = document.getElementById("cbSelect");
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #11 : 23-03-2011 11:20 » 

Sla,  Спасибо =)) чекбокс наконец-то нашёлся =)))
 
« Последнее редактирование: 23-03-2011 11:49 от Okkkks » Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #12 : 23-03-2011 11:44 » 

Okkkks, оно вполне может быть null, поэтому не стоит применять операцию инвертирования..
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Okkkks
Помогающий

by
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 23-03-2011 12:05 » 

не булевское... (что-то мне подсказывает)
По умолчанию on или off
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 23-03-2011 14:07 » 

Checked != checked
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #17 : 23-03-2011 14:09 » 

не поняла... меняем на противоположное.... я пробовала писать document.getElementById("cbSelect"+ID).Checked=true;  всё равно не рисует =(
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 23-03-2011 14:11 » 

метод checked, но не Checked
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #19 : 23-03-2011 14:15 » 

Sla, Спасибо огромное!!! За терпение и, конечно, за помощь!  =)) наконец-то заработало... Ура!!!! =))

« Последнее редактирование: 23-03-2011 14:28 от Okkkks » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 23-03-2011 14:41 » 

та какое тут терпение...
это все шишки Улыбаюсь

ничего... еще все впереди, когда дойдешь до изменения атрибутов стиля элементов
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 24-03-2011 11:09 » 

Это ты уже на сервере обрабатываешь?

Ты можешь вывести массив POST или GET после сабмита формы
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline 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
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #24 : 24-03-2011 11:18 » 

Okkkks, вроде ж выяснили что "checked" - с маленькой буквы?
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Okkkks
Помогающий

by
Offline Offline

« Ответ #25 : 24-03-2011 11:19 » 

checked с маленькой в скрипте. на сервере с маленькой не знает

Добавлено через 4 минуты и 37 секунд:
Sla,
Это ты уже на сервере обрабатываешь?

Ты можешь вывести массив POST или GET после сабмита формы

в смысле нужно вручную передавать новое состояние чекбоксов? я надеялась что скрипт и сервер имеют равноправный доступ к свойствам контрола... эээхх...
« Последнее редактирование: 24-03-2011 11:23 от Okkkks » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 24-03-2011 12:13 » 

как в ручную?
запрос с формы поступает  в массив GET или POST
соответсвенно ты должна обработать ВХОДНЫЕ данные
Сервер уже не знает о состоянии контролов
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #27 : 24-03-2011 12:39 » 

Sla,  нужно использовать Request... я правильно понимаю? А где там искать мои чекбоксы? в Params?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #28 : 24-03-2011 12:49 » 

ну... наверное в REQUEST
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Okkkks
Помогающий

by
Offline Offline

« Ответ #29 : 24-03-2011 12:50 » 

=)) спасибо. буду искать =)
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines