jqGridPHP - таблицы на ajax без головной боли

~WR~

Новичок
1. Нужно явно задать высоту. Если я правильно помню, колонка скролла пропадает только при "height => auto". "height => 600px" - поможет.
2. Увеличьте параметр scrollOffset. Он подсказывает гриду, какой должна быть ширина колонки для скролла.

Afaik, ширина скролла отличается в зависимости от ОС и настроек оформления. И нет никакого способа через javascript узнать его настоящую ширину.
Поэтому придумали такой параметр. По умолчанию он равен 18. Поставьте 21-22. Должно помочь.

- Как сделать всю строку ссылкой?
Проще всего поменять css таким образом, чтобы при наведении на строку менялся курсор (cursor: pointer;).
И повесить событие на клик по ряду. Можно использовать стандартный event. Или вот так сделать:

PHP:
$grid.delegate('TR.jqgrow', 'click', function()
{
    location = 'http://microsoft.com';
});
В Firefoxe и Opere границы некоторых(кажется пустых ) ячеек не отображаются
Мне кажется, где-то в грид вставляется html с незакрытыми тегами. И это всё ломает.
Также возможно, что в последних версиях jquery ui что-то сделали со стилями, но .. вряд ли это было бы настолько радикально.
 

jjsf

Новичок
1. Нужно явно задать высоту. Если я правильно помню, колонка скролла пропадает только при "height => auto". "height => 600px" - поможет.
2. Увеличьте параметр scrollOffset. Он подсказывает гриду, какой должна быть ширина колонки для скролла.
спасибо, помогло.


Насчет ссылки на строку:
Хотелось бы чтобы при наведении на строку она подсвечивалась и при нажатии переходила по ссылке с параметром:

PHP:
$grid.delegate('TR.jqgrow', 'mouseover', function()
{  $(this).addClass("ui-state-highlight").attr("aria-selected","true");  });

$grid.delegate('TR.jqgrow', 'mouseout', function()
{  $("tr").removeClass("ui-state-highlight").attr("aria-selected","false"); });
	
 $grid.delegate('TR.jqgrow', 'click', function()
{  location='/demo/index.php?id='+$grid.getGridParam('selrow'); });
Переходит но параметр при этом не считывается. Думал что это от aria-selected зависит, оказывается нет.
Можно конечно сделать так, но не удобно:
PHP:
 $grid.delegate('TR.jqgrow', 'dblclick', function()
{ location='/demo/index.php?id='+$grid.getGridParam('selrow');  });
 

~WR~

Новичок
Для подсветки при наведении есть стандартный параметр hoverrows => true.
Для получения id при клике можно сделать так:
PHP:
 $grid.delegate('TR.jqgrow', 'click', function()
{  location='/demo/index.php?id='+$(this).attr('id'); });
 

Spyke

Новичок
Прошу помощи:
PHP:
    protected function renderComplete($data)
    {
        $selarrrow = new jqGrid_Data_Raw('$grid.getGridParam("selarrrow")');
        $data['nav']['prmEdit']['editData']['id[]'] = $selarrrow;
        return parent::renderComplete($data);
    }
Работает только при первой загрузке, т.е. если выбрать строки и нажать редактировать, то в посте появляется массив id[], но после сабмита или отмены (даже после reloadGrid) при выборе других строк массив id[] остается прежним, что выбрался в первый раз. Почему $grid.getGridParam("selarrrow") не выбирает новые строки?
 

~WR~

Новичок
В общем, editData предназначен только для статических данных.
Для динамической подстановки есть callback - serializeEditData.

Должно использоваться как-то так:
PHP:
$this->nav['prmEdit']['serializeEditData'] = new jqGrid_Data_Raw('my_serialize');
PHP:
function my_serialize(data) {
    data['id'] = $grid.getGridParam("selarrrow");
    return data;
}
К сожалению, отдельного event'а, на который можно было бы прицепиться через bind(), здесь не предусмотрели.
 

AleXKaN

Новичок
подскажите, возможно ли, при определенном значении поля (допустим "Дата выгрузки"), запретить редактирование строки или скрыть её из просмотра.

:UPD

Сделал так:
PHP:
onSelectRow: function(rowid){
   var cell5 = $grid.jqGrid('getCell',rowid,'myCell5');
   if (cell5.length !== 1){
      $('#'+rowid).parents('table').resetSelection();
   }
}
Т.е. в зависимости от значения ячейки сбрасываю выделение строки
 

vergiliy_88

Новичок
Добрый день! Помогите пожалуйста, есть проблемка. Есть форма ввода данных в пхпгрид. те поля которые числовые а именно интеджер не обязательны для заполнения. но если их не заполнять то не происходит запись в БД. только тестовые поля получается оставлять пустыми. В самой БД всем полям значение нул разрешено. Можно ли сделать так чтоб и числовые поля можно было записать пустыми?
 

Вложения

tyu

Новичок
День добрый! Не могу понять как добавить возможность редактирования ячеек "на лету" в подтаблице. Что нужно добавить в subGridModel?
 

o-sport

Новичок
Ребята есть вопрос по InLine редактированию, выше в ветке дали код:
ondblClickRow: function(id)
{
if(id && id!==lastsel)
{
$(this).jqGrid('restoreRow',lastsel);
$(this).jqGrid('editRow',id,true);
lastsel=id;
}
}
не помогает. точнее двойной клик срабатывает (ставил алерт для проверки) а дальше ничего.
просто редактирование по двойному клику - без проблем
ondblClickRow: function(id)
{
$(this).editGridRow(id);
}
 

Spyke

Новичок
Уважаемый ~WR~, нужна Ваша квалифицированная помощь.
Делаю сохранение данных columnChooser'а в cookies (тема уже поднималась здесь).
С клиентской частью вопросов нет, в cookies всё попадает как надо. А вот при размещении кода
PHP:
        if (isset($_COOKIE['jqGrid_columns'])) {
            $new_cols = array();
            $colModel = $this->Strip($_COOKIE['jqGrid_columns']);
            $colModel = json_decode($colModel, true);
            foreach($colModel as $name => $col) {
            	if ($name != 'cb' && !$this->cols[$name]['unset']) {
	                if (isset($col['w'])) {
	                    $this->cols[$name]['hidden'] = false;
	                    $this->cols[$name]['width'] = $col['w'];
	                } else {
	                    $this->cols[$name]['hidden'] = true;
	                }
	                $new_cols[$name] = $this->cols[$name];
				}
            }
            $this->cols = $new_cols;
в конце init, перестает отрабатывать мой parseRow, т.е. нужные столбцы скрываются, но в оставшихся из тех, которые изменяются в моем parseRow, попадают null'ы и текущие даты (если столбец дата).
Как заставить мой parseRow отработать? Или я куда-то не туда вышеописанный код помещаю?
 

Spyke

Новичок
Сорри, это я тупанул)) Код:
PHP:
        if (isset($_COOKIE['jqGrid_columns'])) {
            $colModel = $this->Strip($_COOKIE['jqGrid_columns']);
            $colModel = json_decode($colModel, true);
            foreach($colModel as $name => $col) {
            	if ($name != 'cb' && !$this->cols[$name]['unset']) {
	                if (isset($col['w'])) {
	                    $this->cols[$name]['hidden'] = false;
	                    $this->cols[$name]['width'] = $col['w'];
	                } else {
	                    $this->cols[$name]['hidden'] = true;
	                }
		}
            }
        }
В предыдущем коде не попадали unset столбцы, которые участвуют в обработке parseRow
 

asker23

Новичок
есть таблица с полем дата, подскажите как добавить фильтр с диапазоном по этому полю? чтобы например можно было выбрать все значения за определенный период
 

morozzz

Новичок
Добрый день

Не работают вывод ошибок через загрузку файлов. Можно с этим что-то сделать?
Если ставить:
PHP:
var opts =
		{
		    'caption'	: 'File Uploading',
		    'editurl'   : null, //this is required for dataProxy effect
		    'dataProxy' : $.jgrid.ext.ajaxFormProxy //our charming dataProxy ^__^
		}
загрузка проходит, ошибки НЕ показывает!! Т.е. все throw new jqGrid_Exception не отображаются, хотя в json приходят
Если этот код не ставить, то ошибки показывает, но загрузка файлов НЕ проходит!!

Как быть?
 

morozzz

Новичок
Ну так что, так ни у кого и нет решения с проблемой отображения throw new jqGrid_Exception при загрузке файлов??
 

Jedi

Новичок
Всем доброго времени суток. Я создал сайт с gridом, есть две проблемы:
1. Пользователь открыл страницу с гридом, открыл форму расширенного поиска, ввел различные условия. Как сохранить введенные им условия поиска????
2. Как подгрузить сохраненные ранее условия поиска?

Зачем это нужно: есть страница сайта с гридом (таблица большая), чтобы пользователь не вводил постоянно условия, а мог открыв один раз всю таблицу ввести в условии id > 10000 (условия могут быть большими) и сохранить шаблон поиска, а потом при заходе на сайт просто выбрал из сохраненных шаблонов и сразу работал с тем что ему нужно, а не опять забивал условия id > 10000 и т.д..
Это как в примере "Продвинутый поиск" :
var template1 = {
'groupOp':'AND',
'rules':[
{'field':'id', 'op':'ge', 'data':500},
{'field':'customer_name', 'op':'bw', 'data':'Joh'},
{'field':'delivery_type', 'op':'eq', 'data':'1'}
]
};
НО чтобы template1 загружался сразу при загрузке грида И чтобы пользователь мог сам сохранять свои templateХ...
 

Jedi

Новичок
По поводу сохранения и загрузки разобрался... только одна проблема осталась: как после изменения параметров поиска, обновить таблицу (т.е. вызвать туже функцию, что и кнопка "найти" в окне расширенного поиска)?
 

DimensionSlider

Новичок
Подскажите пожалуйста, перенес разработку на Linux сервер
Сейчас не заполняется ни одна таблица
Без явных ошибок php, js, в консоль тоже ничего не падает.
Третий день пытаюсь найти причину
При этом searchoptions нормально заполняются из запросов
'searchoptions' => array(
'value' => new jqGrid_Data_Value($contact_names_from, 'Все'),
),
 

fandm

Новичок
DimensionSlider
Что-то где-то с переносами строк может быть связано. Сейчас уже подробностей не припомню, но что-то в таком духе было и у меня.
 

DimensionSlider

Новичок
Получил ответ от автора. Забыл проверить ответ от сервера на вкладке NetWork отладчика. У меня туда затесался лишний текст, который я выводил через echo до момента вывода таблицы.
 
Сверху