Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Delphi for PHP > Проблемы с DBRepeater


Автор: Alex2011 25.11.12, 04:07
Привет всем!

Обнаружил такую вот проблему. На DBrepeater лежат компоненты-Image и несколько Label. Image использую для имитации нажатия кнопок для действия(редактировать,удалить и т.д.) через AJAX.
В событии onDetail компонента такой код
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        function DBRepeater1Detail($sender, $params)
        {
        $this->Label1->Caption=$this->Query1->caption;
        $this->Label2->Caption="id=".$this->Query1->id;
        $this->Image1->name="Image".$this->Query1->id;
        }

в IDE все работает хорошо,на локальном апаче работает только при первоначальной загрузке страницы(т.е. только в новой сессии,насколько я понимаю).После обновления через AJAX по кнопке на странице или при обновлении средствами браузера имя Image становится одинаковым для всех выведенных и равным последнему(нижнему) на DBRepeater и приводит к тому,что нажимается только верхняя кнопка при клике на любой другой.
C лэйблами такого нет!(И при присваивании им Link тоже все нормально) Мои танцы с бубном не увенчались успехом. В чем проблема не понятно,может даже и не в DBRepeater. Пробовал подсунуть php.ini локальному апачу от IDE и много чего еще-не помогает.Help!

В аттаче-пример

proba.zip (, : 1063)


Бился день.Только отправил на форум-нашел решение-присваивать имя в событии onBeforeShow компонента Image и только через $sender
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        function imgTrashBeforeShow($sender, $params)
        {
        $sender->name="imgT".$this->Query1->id;
     
        }


Дополнение.
Вылезла еще одна проблема. Картинок-"кнопок" несколько в зависимости от текущего статуса документа. Клик по соответствующей кнопке вызывает отпределенные действия и изменяет статус документа на свой. Хотел показывать\прятать такие картинки-"кнопки" в зависимости от статуса документа(например, статус "в корзине"-тогда кнопка корзины уже не должна показываться),однако при первом же клике по к-л кнопке такие кнопки прячутся сразу на всех записях.(в IDE тоже). Решения пока нету.

Автор: VESTERMEN 24.06.13, 17:58
Всем привет! Возникла проблемка с DBREPEATER ом. Точнее с Label- амии расположенные на нем, почему то не могу изменить размер шрифта цвет шрифта Label-ов. Использую HTML5Builder может кто сталкивался с этим недостатом? За ранее спасибо.

Автор: vicis 14.07.13, 12:38
на сколько я помню в компонентах не ве свойства задействованы
импользуй стили

Автор: Alex2011 16.07.13, 14:18
Попробуй как у меня выше (через $sender).

Автор: ssaich 02.03.15, 06:16
делаю так
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        function CheckBox1BeforeShow($sender, $params)
        {
        $sender->name="CheckBox".$this->MySQLTable1->A_ID;
        if ($this->MySQLTable1->A_PRICE_CHECK==1)
        {
        $sender->Caption="Оплачено";
        $sender->Checked=true;
        }
          else  $sender->Caption=$this->MySQLTable1->A_ID;
     
        }
    }


Но отмечены получаются все чекбоксы

Смотрю html код, а там все чекбоксы с одинаковым ID )) вопрос

как из RadPhp сменить, сгенерить id ? через компонент - есть ли свойство ?

Автор: Alex2011 02.03.15, 06:25
Попробуй добавить else $sender->Checked=false; чтобы получилось так.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    if ($this->MySQLTable1->A_PRICE_CHECK==1)
     
        {
     
        $sender->Caption="Оплачено";
     
        $sender->Checked=true;
     
        }
    else $sender->Checked=false;

Автор: ssaich 02.03.15, 06:30
Почему человек так устроен, когда проблема лежит не виду и порой решается штатно, в место этого лезем в дебри разбираем до основания предмет изучения, тратим часы на чтение книг и прочих вещей, а тут приходит "умный человек" и говорит

"А вы магнитофон с паузы снимите, он и заиграет" ) ))


Спасибо Alex2011 ))


Добавлено
Как все таки сменить ID ? )

Автор: Alex2011 02.03.15, 06:32
В предыдущей ветке ответил про компоненты. Да, тут еще в else {} включи код для Caption. Я не писал, думаю, ты понял все.
ID на странице-это свойство "Name" компонента. И в коде у тебя вроде стоит его изменение...Странно...Хотя-привыкай! Странности только начинаются! :D

Автор: ssaich 02.03.15, 06:38
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <input name="CheckBox2" value="2" style=" font-family: Tahoma; font-size: 11px;   cursor: default;" checked="checked" tabindex="0" id="CheckBox1" type="checkbox">


вот код, имя меняется а ид нет

Автор: ssaich 02.03.15, 08:47
Добавил в код строку как эксперимент поле Image


повесил на другой обработчки события

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     function DBRepeater1Detail($sender, $params)
        {
                $this->CheckBox->name="CheckBox".$this->MySQLTable1->A_ID;
                       $this->Image1->Name="Image".$this->MySQLTable1->A_ID;
        if ($this->MySQLTable1->A_PRICE_CHECK==1)
        {
         $this->CheckBox->Caption="Оплачено";
         $this->CheckBox->Checked=true;
        }
          else
          {
           $this->CheckBox->Caption=$this->MySQLTable1->A_ID;
           $this->CheckBox->Checked=false;
          }      
        }


смотрю html код

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <img id="Image1" src="" border="0" height="89" width="105">
    <img id="Image2" src="" border="0" height="89" width="105">
    <img id="Image3" src="" border="0" height="89" width="105">




с имейдж работает
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <table id="CheckBox1_table" style=" font-family: Tahoma; font-size: 11px;   cursor: default;height:20px;width:120px;" cellpadding="0" cellspacing="0">
    <tbody><tr><td width="20"><input name="CheckBox1" value="Оплачено" style=" font-family: Tahoma; font-size: 11px;   cursor: default;" checked="checked" tabindex="0" id="CheckBox1" type="checkbox"></td><td><label for="CheckBox1">Оплачено</label></td></tr>
    </tbody></table>


а чекбокс отказывается .. хелп ? )

Автор: Alex2011 02.03.15, 09:12
Значит исходники нужно смотреть и править.

Автор: ssaich 02.03.15, 09:22
Цитата Alex2011 @
Значит исходники нужно смотреть и править.

Эх, сам я вряд ли разберусь (

Автор: Alex2011 02.03.15, 09:36
Думаю, что это не так просто окажется(правка исходников) -могут вылезти косяки с позиционированием элементов, так как правил CSS может не оказаться в сформированной странице для всех чекбоксов.(Уверен, что так и будет, если не использовать стили для них)

Автор: ssaich 02.03.15, 09:44
Причем чек бокс стоит внутри таблицы, а ID <table id="TCheckBox2_table" таблице передается

Автор: Alex2011 02.03.15, 09:47
Для чего надо присваивать уникальное имя? Чтобы потом передать на сервер? Может оказаться, что все можно по-другому решить.

Автор: ssaich 02.03.15, 09:52
Цитата Alex2011 @
Для чего надо присваивать уникальное имя? Чтобы потом передать на сервер? Может оказаться, что все можно по-другому решить.

Хочу реализовать по клику чекс бокса Update в базу, без передачи ID по ссылке

Автор: Alex2011 02.03.15, 10:10
Можно разместить Label и присваивать Caption тот уникальный код, какой тебе нужен. Если цвет шрифта установить =цвету фона-она не будет видна, станет прозрачной (или установить ширину размеры =0). А далее перехватывать JS-нажатие чекбокса ( CheckBox1JSClick) и вычислять Caption и передавать ajax-ом на сервер. У чекбокса есть свойство Tag, но оно, к сожалению, никак не передается на страницу.

Автор: ssaich 02.03.15, 10:27
все чекбоксы с одинаковым ID

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
     var t = (event.target || event.srcElement).id;
                alert(t);
                return(false);


три чекбокса - каптион разное а id одинаков

Автор: Alex2011 02.03.15, 11:26
Тут надо смотреть DOM и вычислять. Попробуй сам :D Мне лень. Да и уменя HTML5 Builder. Там я использую jQuery, а в RadPHP надо чистый JS.

Автор: Alex2011 02.03.15, 13:00
Посмотрел на своем компоненте.Проблема сложнее, чем казалась на первый взгляд и похоже вычислить нельзя, только по координатам клика, а это тоже не просто.

Автор: ssaich 02.03.15, 14:25
Если уж очень сильно захотеть то

1) Взять две картинки (отмеченный чек бокс и не отмеченный чек бокс)
2) Вставить Имейдж
3) Ну а дальше я думаю все поняли ?? )))

Автор: Alex2011 02.03.15, 14:29
Пробуй! :) Я на своем компоненте поэкспериментирую, может быть придумаю что-нибудь другое.(Что-то типа уникального кода строки или точнее в моем случае элемента(ячейки), так как он у меня многоколоночный.).

Автор: Alex2011 02.03.15, 15:34
Возвращаясь к вычислению Caption элемента Label. Смысл такой, что нужно получить родительский элемент-контейнер всех компонентов текущей записи td (если режим горизонтального отображения) или tr (в режиме вертикального отображения) в котором был клик (вроде так, но смотрел по своему компоненту), потом искать в нем Label и брать Caption, если использовать предложенный мною способ.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)