Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.162.204] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Цитата (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 у меня с этим проблем нет) спасибо |
Сообщ.
#2
,
|
|
|
Цитата но вставить новую строку в detail (OpenGrid2) не получается это работает но: - поле первичного ключа в detail должно быть автоинкриментным или не Primary Key (если оно Primary Key то вставляется 0 в случае если такой записи там небыло) - поле внешнего ключа нужно вставлять руками при редактировании иначе вставленная запись отфильтруется - что бы не вставлять руками внешний ключ делаем следующее (здесь tbtest21 компонент Table используемый как detail): function tbtest21BeforePost($sender, $params) { $fkey = explode('=',$sender->getFilter()); $fname = trim($fkey[0]); $this->tbtest21->$fname = $fkey[1]; } т.е. забираем значение из фильтра и принудительно записываем в поле внешнего ключа |
Сообщ.
#3
,
|
|
|
ручками вставляю значение внешнего ключа - все записывается
а вот пользуясь Цитата vicis @ function tbtest21BeforePost($sender, $params) { $fkey = explode('=',$sender->getFilter()); $fname = trim($fkey[0]); $this->tbtest21->$fname = $fkey[1]; } не получается по дебагером $fkey = explode('=',$sender->getFilter()); значение $fkey - пустая строка у вас этот код работает? спасибо |
Сообщ.
#4
,
|
|
|
Цитата Zajigaev @ не получается по дебагером $fkey = explode('=',$sender->getFilter()); значение $fkey - пустая строка а условия соблюдены: Цитата vicis @ - поле первичного ключа в detail должно быть автоинкриментным или не Primary Key (если оно Primary Key то вставляется 0 в случае если такой записи там небыло) - поле внешнего ключа нужно вставлять руками при редактировании иначе вставленная запись отфильтруется Цитата Zajigaev @ у вас этот код работает? я обычно сначала проверяю работу кода прежде чем на сайт выкладывать но детали уже не помню - сообщению 2 месяца |
Сообщ.
#5
,
|
|
|
Цитата vicis @ но детали уже не помню - сообщению 2 месяца долго этим не занимался поле первичного ключа в detail автоинкриментное и Primary Key $this->tbequipment1->id_sef = 2; вот если напрямую вот так присвою (id_sef - поле внешнего ключа) то все вставляется похоже что не работает $fkey = explode('=',$sender->getFilter()); $sender->getFilter()- пустая строка вы не подскажете в чем ошибка? спасибо |
Сообщ.
#6
,
|
|
|
После долгого перерыва, опять понадобился OpenGrid
На этот раз в гриде выводятся в некоторой колонке дата , эту дату надо сравнить с сегодняшней и изменить цвет ячейки в которой она содержится. Тоесть нужно в цикле пройти через все строки , и если дата "раньше" сегодняшней, менять цвет ячейки с известным id в данной строке. Вопрос вот в чём - как пройти через все строки? То есть как их выбирать одну за другой, нечто вроде var rec=jQuery("#Opengrid1").getGridParam('records'); for(i=0;i<rec;i++) { idd=jQuery("#OpenGrid1").getRowData(i); datte=idd.Pole_s_datoi; // Потом сравниваем с сегодняшней датой // //и вот тут меняем цвет ячейки } Вопрос - как поменять цвет нужной ячейки, тоесть ВЫБРАТЬ эту ячейку и поменять ей цвет ( в скрипт файлах искал, не нашёл такого метода). |
Сообщ.
#7
,
|
|
|
посмотри здесь
http://www.trirand.com/blog/jqgrid/jqgrid.html# например в Manipulating->Grid Data есть пример Update amounts in row 11 что то типа такого (вставляет картинку в нужную ячейку грида 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"); посмотри что там ещё есть кстати, вот ещё пример цикла заполнения данных 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]); а вот выбрать строку jQuery("#list9").jqGrid('setSelection',"13"); |
Сообщ.
#8
,
|
|
|
торможу
решил использовать метод (те произвожу анализ данных при показе грида) 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. а как к ней обращаться?как найти значение поля в ней? спасибо |
Сообщ.
#9
,
|
|
|
Цитата Zajigaev @ и вот не получается получить данные, пишет id= undefined похоже что только что вставленная строка не select и не focused. а как к ней обращаться?как найти значение поля в ней? спасибо а выбрать её принудительно не получается ? пример выбора есть в предыдущем посте и alert убрать - может мешать |
Сообщ.
#10
,
|
|
|
что значит принудительно?
перебрать все строки грида еще раз? после того как они все вставились в грид? я пытаюсь изменить цвет строки во время вставки строк в грид при первом показе грида (мне кажется что это оптимальный вариант, вот только не знаю как его реализовать) как можно узнать номер последней вставленной строки в грид в этом методе function OpenGrid1JSAfterInsertRow($sender, $params)? тогда наверное ее можно будет выбрать принудительно спасибо |
Сообщ.
#11
,
|
|
|
Нашёл пример My Webpage,
$(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': 'Чехия Ура!'}); } } } }); Не могу применить это в function OpenGrid1JSAfterInsertRow($sender, $params) как достать row_id и row_data Пример подходит польностью , помогите , спасибо. |
Сообщ.
#12
,
|
|
|
Цитата Zajigaev @ Не могу применить это в function OpenGrid1JSAfterInsertRow($sender, $params) а если код просто на кнопку повесить - работает ? |
Сообщ.
#13
,
|
|
|
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 } не работает но есть живой пример My Webpage и там все работает с jqGrid (а OpenGrid от него) в My Webpage есть описание события afterInsertRow там есть фраза Note: this event does not fire if gridview option is set to true , но мне это ничего не говорит нашел другое , рабочее 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 почему так? ведь в первом примере вроде тоже самое объясните пожалуйста спасибо |
Сообщ.
#14
,
|
|
|
Цитата Zajigaev @ почему так? не знаю не разбирался с этим берём как данность - писать нужно так как работает немного покопался откопалось следующее: исходные данные у меня были таблица с полями TEST_ID (integer), TEST_NAME (varchar(20)) заполнена всякими тестовыми значениями 1. попытка использовать событие OpenGrid1JSAfterInsertRow показала на примере обычного alert('xxx') что срабатывает оно после вставки записи в таблицу и перечитывания страницы в момент добавления записей в грид при этом ни одна запись не выбрана т.е. как отловить новую вставленную запись я не понял 2. раскрасить же выбранную запись в гриде оказалось легко 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. пробежать по всем отображаемым строкам в гриде и раскрасить их по нужным критериям можно так 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 то похоже, что твоя задача решена |
Сообщ.
#15
,
|
|
|
Цитата vicis @ берём как данность - писать нужно так как работает круто! хорошо что я нашел другой пример в инете , а если бы нет? так бы и маялся спасибо за - если этот код вставить в событие OpenGrid1JSGridComplete (че тут у вас за цитирование- не получается у меня ) а то я все пытался прикрутить к AfterInsertRow (по логике оно катит к этому методу) спасибо заседание продолжается |