На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА
Прежде чем задать вопрос, зайдите в раздел FAQ, возможно там уже есть ответ на него.
Если вы хотите вставить код в сообщение, то пожалуйста выделяйте его тегом [code=dfp] ... [/сode].
Для этого используйте кнопку [code=dfp] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Delphi for PHP.
Модераторы: ViktorXP, vicis
  
> OpenGrid ,вставка новой записи в Detail Grid
    Цитата (vicis @ 16.10.09, 22:04)
    Что нужно сделать что бы master-detail в OpenGrid заработал:
    1. ставим на форму два компонента Table (например Table1,Table2) и связываем их стандартно с данными (через DataSource и DataBase)
    2. Table1 испольуем как мастер, а Table2 как detail
    Допустим таблица базы данных для Table1 будет содержать поля:
    x_id,x_name
    а таблица Table2 поля:
    y_id,x_id,y_name
    вводим данные в таблицы базы, подыгрываем в обоих таблицах x_id (что бы записи выбирались)
    3. прописываем у Table2 свойство MasterSource = DataSourceTable1 (тот DataSource, который связан с Table1, т.е. с мастером)
    4. ставим на форму два грида OpenGrid1 и OpenGrid2 и связываем их соответствующими датасоурсами (DataSourceTable1,DataSourceTable2)
    5. у OpenGrid2 устанавливаем свойство MasterGrid = OpenGrid1


    все работает, но вставить новую строку в detail (OpenGrid2) не получается

    Не могу найти обработчик какого события надо дописать и как? (в обыкновенных Delphi у меня с этим проблем нет)
    спасибо
      Цитата
      но вставить новую строку в detail (OpenGrid2) не получается

      это работает
      но:
      - поле первичного ключа в detail должно быть автоинкриментным или не Primary Key (если оно Primary Key то вставляется 0 в случае если такой записи там небыло)
      - поле внешнего ключа нужно вставлять руками при редактировании иначе вставленная запись отфильтруется
      - что бы не вставлять руками внешний ключ делаем следующее (здесь tbtest21 компонент Table используемый как detail):

      ExpandedWrap disabled
                       function tbtest21BeforePost($sender, $params)
                       {
         
                       $fkey = explode('=',$sender->getFilter());
                       $fname = trim($fkey[0]);
                       $this->tbtest21->$fname = $fkey[1];
         
                       }

      т.е. забираем значение из фильтра и принудительно записываем в поле внешнего ключа
      Сообщение отредактировано: vicis -
        ручками вставляю значение внешнего ключа - все записывается
        а вот пользуясь
        Цитата vicis @
        function tbtest21BeforePost($sender, $params)
        {

        $fkey = explode('=',$sender->getFilter());
        $fname = trim($fkey[0]);
        $this->tbtest21->$fname = $fkey[1];

        }

        не получается
        по дебагером $fkey = explode('=',$sender->getFilter());
        значение $fkey - пустая строка

        у вас этот код работает?

        спасибо
        Сообщение отредактировано: Zajigaev -
          Цитата Zajigaev @
          не получается
          по дебагером $fkey = explode('=',$sender->getFilter());
          значение $fkey - пустая строка

          а условия соблюдены:
          Цитата vicis @
          - поле первичного ключа в detail должно быть автоинкриментным или не Primary Key (если оно Primary Key то вставляется 0 в случае если такой записи там небыло)
          - поле внешнего ключа нужно вставлять руками при редактировании иначе вставленная запись отфильтруется



          Цитата Zajigaev @
          у вас этот код работает?

          я обычно сначала проверяю работу кода прежде чем на сайт выкладывать
          но детали уже не помню - сообщению 2 месяца
            Цитата vicis @
            но детали уже не помню - сообщению 2 месяца

            долго этим не занимался
            поле первичного ключа в detail автоинкриментное и Primary Key

            $this->tbequipment1->id_sef = 2; вот если напрямую вот так присвою (id_sef - поле внешнего ключа) то все вставляется
            похоже что не работает $fkey = explode('=',$sender->getFilter());
            $sender->getFilter()- пустая строка
            вы не подскажете в чем ошибка?

            спасибо
            Сообщение отредактировано: Zajigaev -
              После долгого перерыва, опять понадобился OpenGrid :)

              На этот раз в гриде выводятся в некоторой колонке дата , эту дату надо сравнить с сегодняшней и изменить цвет ячейки в которой она содержится. Тоесть нужно в цикле пройти через все строки , и если дата "раньше" сегодняшней, менять цвет ячейки с известным id в данной строке.

              Вопрос вот в чём -

              как пройти через все строки?
              То есть как их выбирать одну за другой, нечто вроде
              ExpandedWrap disabled
                var rec=jQuery("#Opengrid1").getGridParam('records');
                for(i=0;i<rec;i++) {
                    idd=jQuery("#OpenGrid1").getRowData(i);
                    datte=idd.Pole_s_datoi;
                    //
                    Потом сравниваем с сегодняшней датой
                    //
                    //и вот тут меняем цвет ячейки
                }



              Вопрос - как поменять цвет нужной ячейки, тоесть ВЫБРАТЬ эту ячейку и поменять ей цвет ( в скрипт файлах искал, не нашёл такого метода).
              Сообщение отредактировано: Zajigaev -
                посмотри здесь
                http://www.trirand.com/blog/jqgrid/jqgrid.html#
                например в Manipulating->Grid Data
                есть пример
                Update amounts in row 11

                что то типа такого (вставляет картинку в нужную ячейку грида
                ExpandedWrap disabled
                      var su=jQuery("#list5").jqGrid('setRowData',11,{amount:"333.00",tax:"33.00",total:"366.00",note:"<img src='images/user1.gif'/>"});
                      if(su) alert("Succes. Write custom code to update row in server"); else alert("Can not update");


                посмотри что там ещё есть

                кстати,
                вот ещё пример цикла заполнения данных
                ExpandedWrap disabled
                  var mydata = [
                          {id:"1",invdate:"2007-10-01",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
                          {id:"2",invdate:"2007-10-02",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
                          {id:"3",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
                          {id:"4",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
                          {id:"5",invdate:"2007-10-05",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
                          {id:"6",invdate:"2007-09-06",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
                          {id:"7",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
                          {id:"8",invdate:"2007-10-03",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
                          {id:"9",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"}
                          ];
                  for(var i=0;i<=mydata.length;i++)
                      jQuery("#list4").jqGrid('addRowData',i+1,mydata[i]);


                а вот выбрать строку
                ExpandedWrap disabled
                      jQuery("#list9").jqGrid('setSelection',"13");
                Сообщение отредактировано: vicis -
                  торможу
                  решил использовать метод (те произвожу анализ данных при показе грида)
                  ExpandedWrap disabled
                     function OpenGrid1JSAfterInsertRow($sender, $params)
                     {
                           ?>
                    var id = jQuery("#OpenGrid1").jqGrid('getGridParam','selrow');
                        
                    var ret = jQuery("#OpenGrid1").jqGrid('getRowData',id);
                    alert("id="+ret.id+" invdate="+ret.id_next+"...");
                        
                    //тут надо вставить анализ данных и в зависимости от них окрашивать строку другим цветом
                     
                     document.getElementById('OpenGrid1').style.color =  "blue";
                    }

                  и вот не получается получить данные, пишет id= undefined
                  похоже что только что вставленная строка не select и не focused. а как к ней обращаться?как найти значение поля в ней?
                  спасибо
                  Сообщение отредактировано: ViktorXP -
                    Цитата Zajigaev @
                    и вот не получается получить данные, пишет id= undefined
                    похоже что только что вставленная строка не select и не focused. а как к ней обращаться?как найти значение поля в ней?
                    спасибо

                    а выбрать её принудительно не получается ? пример выбора есть в предыдущем посте
                    и alert убрать - может мешать
                      что значит принудительно?
                      перебрать все строки грида еще раз? после того как они все вставились в грид?
                      я пытаюсь изменить цвет строки во время вставки строк в грид при первом показе грида (мне кажется что это оптимальный вариант, вот только не знаю как его реализовать)
                      как можно узнать номер последней вставленной строки в грид в этом методе function OpenGrid1JSAfterInsertRow($sender, $params)?
                      тогда наверное ее можно будет выбрать принудительно
                      спасибо
                        Нашёл пример My Webpage,
                        ExpandedWrap disabled
                          $(function(){
                           
                              $('#table').jqGrid({
                                        datatype: 'local',
                                        colNames:['ID','Код страны','Код региона', 'Город','Долгота','Широта','nbip'],
                                        colModel :[
                                                      {name:'id', index:'id', width:20, align: 'center'},
                                                      {name:'country_code', index:'country_code', width:80, align: 'right'},
                                                      {name:'region_code', index:'region_code', width:80, align: 'left'},
                                                      {name:'city', index:'city', width:90},
                                                     {name:'latitude', index:'latitude', width:60},
                                                      {name:'longitude', index:'longitude', width:60},
                                                      {name:'nbip', index:'nbip', width:30}
                                                   ],
                                        caption: 'Простое форматирование',
                                        width: 600,
                                        afterInsertRow: function(row_id, row_data){
                                                          if (row_data.country_code == 'AD') {
                                                              $('#table').jqGrid('setCell',row_id,'city','',{'color':'#FF00FF'});
                                                          }else if(row_data.country_code == 'AE'){
                                                              $('#table').jqGrid('setCell',row_id,'city','',{'color':'red'});
                                                          }else{
                                                              $('#table').jqGrid('setCell',row_id,'city','',{'background-color': '#999999'});
                                                        if(row_data.country_code == 'CZ'){
                                                                  $('#table').jqGrid('setCell',row_id,'city','',{'color':'#FF00FF', 'font-weight':'bold'},{'title': 'Чехия Ура!'});
                           
                                                              }
                                                          }
                                                      }
                           
                              });


                        Не могу применить это в
                        ExpandedWrap disabled
                          function OpenGrid1JSAfterInsertRow($sender, $params)

                        как достать row_id и row_data

                        Пример подходит польностью , помогите , спасибо.
                          Цитата Zajigaev @
                          Не могу применить это в

                          function OpenGrid1JSAfterInsertRow($sender, $params)

                          а если код просто на кнопку повесить - работает ?
                            ExpandedWrap disabled
                              function Button2JSDblClick($sender, $params)
                                     {
                               
                                     ?>
                                     //Add your javascript code here
                              for(var i = 0;i <= 7; i++){
                               alert(i);
                               jQuery("#OpenGrid1").jqGrid('setCell',i,'id','',{'color':'red'});
                               }
                                     <?php
                               
                                     }

                            не работает :oops:
                            но есть живой пример My Webpage
                            и там все работает с jqGrid (а OpenGrid от него)
                            в My Webpage есть описание события afterInsertRow
                            там есть фраза Note: this event does not fire if gridview option is set to true , но мне это ничего не говорит

                            нашел другое , рабочее
                            ExpandedWrap disabled
                              function Button2JSDblClick($sender, $params)
                                     {
                               
                                     ?>
                                     //Add your javascript code here
                                 for (var i=1; i<8; i++){
                               jQuery('#OpenGrid1').setCell(i,'id','',{'background-color': 'red'},'');
                               }
                                    <?php


                            почему так?
                            ведь в первом примере вроде тоже самое
                            объясните пожалуйста
                            спасибо
                            Сообщение отредактировано: Zajigaev -
                              Цитата Zajigaev @
                              почему так?

                              не знаю
                              не разбирался с этим
                              берём как данность - писать нужно так как работает :ph34r:

                              немного покопался

                              откопалось следующее:
                              исходные данные у меня были
                              таблица с полями TEST_ID (integer), TEST_NAME (varchar(20))
                              заполнена всякими тестовыми значениями
                              1. попытка использовать событие OpenGrid1JSAfterInsertRow показала на примере обычного alert('xxx')
                              что срабатывает оно после вставки записи в таблицу и перечитывания страницы в момент добавления записей в грид
                              при этом ни одна запись не выбрана
                              т.е. как отловить новую вставленную запись я не понял
                              2. раскрасить же выбранную запись в гриде оказалось легко

                              ExpandedWrap disabled
                                               function Button1JSClick($sender, $params)
                                               {
                                               ?>
                                 
                                               //Add your javascript code here
                                               var id = jQuery('#OpenGrid1').getGridParam('selrow');
                                               var ret = jQuery('#OpenGrid1').getRowData(id);
                                               //alert("TEST_ID="+ret.TEST_ID+" TEST_NAME="+ret.TEST_NAME+"...");
                                 
                                               //тут надо вставить анализ данных и в зависимости от них окрашивать строку другим цветом
                                               jQuery("#OpenGrid1").setCell(id,'TEST_NAME','',{'color':'#FF00FF'});     // шрифт в выбранной ячейке красим в нужный цвет
                                               jQuery("#OpenGrid1").setCell(id,'TEST_ID','',{'background-color': '#999999'});     // фон в выбранной ячейке красим в нужный цвет
                                               jQuery("#OpenGrid1").setCell(id,'TEST_ID','',{'color':'#FF00FF', 'font-weight':'bold'},{'title': 'это не меняет ничего!'});     // меняем атрибуты шрифта в выбранной ячейке
                                 
                                               <?php
                                               }


                              3. пробежать по всем отображаемым строкам в гриде и раскрасить их по нужным критериям можно так
                              ExpandedWrap disabled
                                               function Button3JSClick($sender, $params)
                                               {
                                               ?>
                                               //Add your javascript code here
                                                var ids = jQuery("#OpenGrid1").getDataIDs(); // получаем массив ID
                                                for(var i=0;i < ids.length;i++)   //бежим по всем отображаемым строкам грида
                                                       {
                                                        var id_value = ids[i];    // получаем значение перво колонки очередной строки
                                                        var ret = jQuery("#OpenGrid1").getRowData(id_value);    // получаем объект со значениями полей
                                                      //  alert('Строка№ '+i+', значение перовой колонки='+ id_value+' поле TEST_ID='+ret.TEST_ID+' поле TEST_NAME='+ret.TEST_NAME);
                                                        if (ret.TEST_NAME=='eee') // проверяем на значение = eee
                                                          {
                                                          jQuery("#OpenGrid1").setCell(id_value,'TEST_NAME','',{'background-color': '#999999'});     // фон в выбранной ячейке красим в нужный цвет
                                                          }
                                                        if (ret.TEST_ID in [1,5]) // проверяем на значения 1 и 5
                                                          {
                                                          jQuery("#OpenGrid1").setCell(id_value,'TEST_NAME','',{'background-color': '#999999'});     // фон в выбранной ячейке красим в нужный цвет
                                                          }
                                                       }
                                 
                                               <?php
                                 
                                               }


                              если этот код вставить в событие OpenGrid1JSGridComplete
                              то похоже, что твоя задача решена
                                Цитата vicis @
                                берём как данность - писать нужно так как работает :ph34r:

                                круто! :crazy:
                                хорошо что я нашел другой пример в инете , а если бы нет? так бы и маялся
                                спасибо за - если этот код вставить в событие OpenGrid1JSGridComplete (че тут у вас за цитирование- не получается у меня )
                                а то я все пытался прикрутить к AfterInsertRow (по логике оно катит к этому методу)
                                спасибо :thanks:
                                заседание продолжается :wall:
                                  Цитата Zajigaev @
                                  круто!

                                  а то
                                  это я про то что мурзилку про jQuery нужно прочитать прежде чем программировать
                                  и исходники просмотреть
                                  но нам же некогда
                                  мы строим космические корабли!...
                                  по этому толко как данность
                                    да... и такие корабли что-то плохо летают
                                    посмотрел все примеры jqGrid- крутая вещь!

                                    а у меня мелочь но мешает - как сделать чтобы данные в ячейки переносились те высота ячейки менялась в зависимости от длинны данных (чтобы всю строку было видно) при фиксированной ширине
                                    с <Table таких проблем не было
                                    спасибо
                                    My Webpage
                                    нашел вот это но не знаю как применить
                                    Сообщение отредактировано: Zajigaev -
                                      Цитата Zajigaev @
                                      как сделать чтобы данные в ячейки переносились те высота ячейки менялась в зависимости от длинны данных

                                      я вижу два сопособа
                                      1. вставить в данные перенос где нужно, например
                                      Лучше нету <br> того свету

                                      2. сделать свой шаблон
                                      - берём папку одного из шаблонов OpenGrid и копируем с другим именем, например:
                                      ...Program Files\CodeGear\Delphi for PHP\2.0\vcl\opengrid\jqGrid\themes\basic
                                      в
                                      ...Program Files\CodeGear\Delphi for PHP\2.0\vcl\opengrid\jqGrid\themes\basicx
                                      - исправляем в проекте у OpenGrid имя шаблона в свойстве OpenGrid1->Theme = basicx
                                      - открываем файл ...Program Files\CodeGear\Delphi for PHP\2.0\vcl\opengrid\jqGrid\themes\basicx\grid.css
                                      находим там

                                      ExpandedWrap disabled
                                            table.scroll tbody td  {
                                            padding: 2px;
                                            text-align: left;
                                            border-bottom: 1px solid #D4D0C8;
                                            border-left: 1px solid #D4D0C8;
                                            text-overflow: ellipsis;
                                            overflow: hidden;
                                            white-space: nowrap;
                                            height : auto;
                                                 }


                                      и правим на

                                      ExpandedWrap disabled
                                            table.scroll tbody td  {
                                            padding: 2px;
                                            text-align: left;
                                            border-bottom: 1px solid #D4D0C8;
                                            border-left: 1px solid #D4D0C8;
                                            text-overflow: ellipsis;
                                            overflow: hidden;
                                        //  white-space: nowrap;
                                                 white-space: normal !important;
                                            height : auto;
                                                 }

                                      проверяем - перенос в ячейке работает
                                        все :wall:
                                        ячейка расширяется , спасибо
                                        но заголовок столбца????
                                        я уже по-тупому заменил все на white-space: normal !important; - не изменяется
                                        а в этом примере есть и column headers
                                        For wrap in cell:
                                        ExpandedWrap disabled
                                          .ui-jqgrid tr.jqgrow td {
                                          white-space: normal !important;
                                          height:auto;
                                          vertical-align:text-top;
                                          padding-top:2px;
                                          }


                                        And for column headers

                                        ExpandedWrap disabled
                                          .ui-jqgrid .ui-jqgrid-htable th div {
                                          height:auto;
                                          overflow:hidden;
                                          padding-right:4px;
                                          padding-top:2px;
                                          position:relative;
                                          vertical-align:text-top;
                                          white-space:normal !important;
                                          }

                                        спасибо
                                        Сообщение отредактировано: ViktorXP -
                                          найди нужный th путём изменения цвета фонта
                                          и тогда уже его мучай пока не начнёт переносить... :wub:
                                            а для заголовков столбцов
                                            ExpandedWrap disabled
                                              table.scroll thead th  {
                                                  padding: 2px;
                                                  border-bottom: 1px solid #CBC7B8;
                                                  border-left: 1px solid #D4D0C8;
                                                  text-align: center;
                                                  font-weight: normal;
                                                  overflow: hidden;
                                                  white-space: nowrap;
                                                  background-image: url(images/grid-blue-hd.gif);
                                              //      height : 17px; заменить на
                                                  height : auto;
                                              }
                                                  
                                                  table.scroll th div {
                                                  overflow: hidden;
                                              /*  white-space: nowrap;*/
                                                  word-wrap: break-word;
                                              //      height : 17px; заменить на
                                                  height : auto;
                                              }

                                            и изменить рис background-image: url(images/grid-blue-hd.gif);
                                            Сообщение отредактировано: ViktorXP -
                                            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                            0 пользователей:


                                            Рейтинг@Mail.ru
                                            [ Script execution time: 0,0982 ]   [ 14 queries used ]   [ Generated: 22.05.24, 04:16 GMT ]