На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА
Прежде чем задать вопрос, зайдите в раздел FAQ, возможно там уже есть ответ на него.
Если вы хотите вставить код в сообщение, то пожалуйста выделяйте его тегом [code=dfp] ... [/сode].
Для этого используйте кнопку [code=dfp] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Delphi for PHP.
Модераторы: ViktorXP, vicis
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> 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:
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


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