Возможно, причина в запятых после значений. Это в PHP можно после последнего значения в массивах ставить запятую, а JS после запятой ищет еще значение и не находит.Почему-то у меня такой способ не работает.PHP:<script> var opts = { 'subgrid': true, } <?= $users_grid ?> </script> <script> var opts = { 'width': 500, } <?= $clients_grid ?> </script>
Если вы меняли в Pager параметры формы, например, ширинуPHP:ondblClickRow: function(id) { $(this).editGridRow(id); }
$this->nav = array(
'edit' => true,
'prmEdit' => array(
'width' => 400,
),
);
ondblClickRow: function(id)
{
$(this).editGridRow(id, {"width":"400"});
}
По идее, parseRow никак не влияет на поиск, только на вывод. Грубо говоря, если сделать вот так:Если я это делаю в методе parseRow то у меня в результате не правильно работает поиск.
protected function init()
{
$this->cols = array(
...
'my_col' => array(
'encode' => false,
...
);
}
protected function parseRow($r)
{
$r['my_col'] = '<img src="/images/lalala.png">' . $r['my_col'];
return $r;
}
Можно повесить событие на показ формы. Один из его аргументов - тип операции (add или edit). Если тип edit, то скрываем ненужные поля. Примерно так:Мне нужно сделать что бы его нельзя было изменять при редактировании, что бы можно было при создании создавать его а изменять в процессе нельзя было. как сделать?
$grid.bind('jqGridAddEditBeforeShowForm', function(e, $form, type)
{
if(type == 'edit') {
$form.find('#my_col').closest('TR').hide();
}
});
$grid.bind('jqGridAfterSubmitCell', function(e, res)
{
if (res.error) {
return [false, res.error_msg];
}
retun [true, ''];
});
Не работает, в res нет error :-( Хотя в методе optEdit делаю throw new jqGrid_Exception('test');Насчет ошибок при cellEdit. Тоже интересный момент. Помню, когда-то давно я забил на эту тему, т.к. этот тип редактирования работал странно. Но теперь есть события.
Попробуйте вот так:
PHP:$grid.bind('jqGridAfterSubmitCell', function(e, res) { if (res.error) { return [false, res.error_msg]; } retun [true, '']; });
Вот один из тестовых гридов.~WR~ написал(а):DeepNN, это интересный вопрос. Прицепите пример ответа от сервера, и как определен primary_key.
{ "page": "1", "total": "1", "records": "3",
"rows":
[{ "id": "122", "cell": [ "122", "2012-07-11", "Выдана", "МАЛЬЦЕВ", "ВАСИЛИЙ", "НИКОЛАЕВИЧ", "2201", "", "ДО1", "2012-07-16", "2012-07-16" ] },
{ "id": "812", "cell": [ "812", "2012-08-04", "Выдана", "МАЛЬЦЕВ", "АЛЕКСАНДР", "АЛЕКСЕЕВИЧ", "42527", "", "ДО1", "2012-08-30", "2012-08-30" ] },
{ "id": "3042", "cell": [ "3042", "2012-11-30", "Выдана", "МАЛЬЦЕВ", "АЛЕКСАНДР", "АЛЕКСАНДРОВИЧ", "42577", "", "ДО1", "2012-12-03", "2012-12-03" ] }
],
"userdata": { "agg": { "_count": "3" } },
"debug":
{ "query_agg": "\n\t\t\t\t\t\tSELECT \tcount(*) AS _count\n\t\t\t\t\t\tFROM production_list \n\t\t\t\t\t\t\t\t\tLEFT JOIN prod_statuses ON production_list.STATUS_ID=prod_statuses.STATUS_ID \n\t\t\t\t\t\t\t\t\tLEFT JOIN bank_offices AS BO1 ON production_list.LOCATION_OFFICE_ID=BO1.OFFICE_ID \n \t\t\t\t\t\tWHERE LAST_NAM LIKE '%мальцев%'\n\t\t\n\t\t",
"query_rows": "\n\t\t\t\t\t\tSELECT \tRECORD_ID, PROD_DATE, STATUS_NAME, LAST_NAM, FIRST_NAM, FATHER_S_NAM, DEPART_CODE, NOTE, BO1.OFFICE_NAME AS LOCATION, LAST_MOD_DATE, OUT_DATE\n\t\t\t\t\t\tFROM production_list \n\t\t\t\t\t\t\t\t\tLEFT JOIN prod_statuses ON production_list.STATUS_ID=prod_statuses.STATUS_ID \n\t\t\t\t\t\t\t\t\tLEFT JOIN bank_offices AS BO1 ON production_list.LOCATION_OFFICE_ID=BO1.OFFICE_ID \n \t\t\t\t\t\tWHERE LAST_NAM LIKE '%мальцев%'\n\t\t\n\t\tORDER BY RECORD_ID asc\nLIMIT 100 OFFSET 0\n" }
}
$this->primary_key = 'RECORD_ID';
echo jqGrid_Utils::jsonEncode($obj);
echo json_encode($obj);
Специально чтобы не думать об этом, стараюсь делать полный рефреш страницы грида после редактирования. Удобно, голова не болит.Подскажите пожалуйста, как мне на клиентской части сделать так что бы при редактировании колонки (в событии jqGridAfterSubmitCell) у нас обновлялась полностью строчка где это изменение произошло (соседние колонки заново скачивались с сервера)?
$grid.trigger("reloadGrid", [{current:true}]);
В init() прописать:Подскажите пожалуйста, при выпрыгавании окна редактирования, как сделать его по центру экрана и в размерах побольше?
$this->nav = array(
'edit' => true,
'editttext' => 'edit',
'prmEdit' => array(
'width' => 700,
'left' => 400,
'top' => 300,
),
);
$.extend($.jgrid.edit, {
width: 700,
left: 400,
top: 300
});
$('#gs_city').bind('click', function() {$($('<div id="gs_sel1"><select id="gs_sel2" style="width: 100px; height: 60px;">
</select></div>').appendTo('body')).dialog()});
$grid.extRequest({
oper: 'get_city_list',
letter: 'a'
}, {
success: function(ret)
{
$('#gs_sel2 OPTIONS').remove();
for(var i in ret.list)
{
$('#gs_sel2').append(ret.list[i].city_name);
}
}
});
<?php
class jqOutSearch2 extends jqGrid
{
protected function init()
{
$this->nav = array(
'edit' => true,
'del' => true,
'view' => true,
'add' => true,
'prmEdit' => array('width' => 400,
'bottominfo' => 'Custom info came from PHP!',
'viewPagerButtons' => false),
);
$user_country = $this->getCountry();
$user_city = $this->getCity();
$this->table = 'user';
$this->cols = array(
'id' => array('label' => 'ID',
'db' => 'id',
'width' => 5,
'align' => 'center',
'formatter' => 'integer',
'editable' => true,
'editrules' => array('required' => true),
'search_op' => 'in',
),
'username' => array('label' => 'Имя',
'db' => 'username',
'width' => 10,
'align' => 'center',
'editable' => true,
'editrules' => array('required' => true),
'search_op' => 'like',
),
'id_country' => array('label' => 'Страна',
'db' => 'id_country',
'width' => 20,
'replace' => $user_country,
'stype' => 'select',
'searchoptions' => array(
'value' => new jqGrid_Data_Value($user_country, 'All'),
),
'editable' => true,
'editrules' => array('required' => true),
'edittype' => 'select',
'editoptions' => array(
'value' => new jqGrid_Data_Value($user_country, 'All'),
),
'search_op' => 'equal',
),
'id_city' => array('label' => 'Город',
'db' => 'id_city',
'width' => 20,
'replace' => $user_city,
'stype' => 'select',
'searchoptions' => array(
'value' => new jqGrid_Data_Value($user_city, 'All'),
),
'editable' => true,
'editrules' => array('required' => true),
'edittype' => 'select',
'editoptions' => array(
'value' => new jqGrid_Data_Value($user_city, 'All'),
),
'search_op' => 'equal',
),
);
$this->render_filter_toolbar = true;
}
#Custom search operation
protected function getCountry()
{
$result = $this->DB->query("SELECT * FROM country");
$rows = array();
while($r = $this->DB->fetch($result))
{
$rows[$r['id']] = $r['country'];
}
return $rows;
}
protected function getCity()
{
$result = $this->DB->query("SELECT * FROM city");
$rows = array();
while($r = $this->DB->fetch($result))
{
$rows[$r['id']] = $r['city'];
}
return $rows;
}
}
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
`id_city` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`id_country` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Дамп данных таблицы `user`
--
INSERT INTO `user` (`id`, `username`, `id_city`, `id_country`) VALUES
(1, 'ivan', '1', '1'),
(2, 'petr', '3', '2'),
(3, 'vasy', '5', '3'),
-- Структура таблицы `country`
--
CREATE TABLE IF NOT EXISTS `country` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`country` char(64) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `country` (`country`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Дамп данных таблицы `country`
--
INSERT INTO `country` (`id`, `country`) VALUES
(1, 'Беларусь'),
(2, 'Россия'),
(3, 'Украина')
CREATE TABLE IF NOT EXISTS `city` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_country` int(10) NOT NULL DEFAULT '0',
`city` char(64) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `city` (`city`,`id_country`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Дамп данных таблицы `city`
--
INSERT INTO `city` (`id`, `id_country`, `city`) VALUES
(1, 1, 'Минск'),
(2, 1, 'Витебск'),
(3, 2, 'Москва'),
(4, 2, 'Казань'),
(5, 3, 'Днепропетровск'),
(6, 3, 'Киев')
protected function getDataUser($userdata)
{
if($this->input('id_country'))
{
$userdata['city_list'] = $this->getCity($this->input('id_country'));
}
return $userdata;
}
$grid.bind('jqGridGridComplete', function() {
var userdata = $grid.getGridParam('userdata');
var orig_val = $('#gs_id_city').val();
if (!userdata.city_list) return;
$('#gs_id_city').empty();
for (id in userdata.city_list) {
$('#gs_id_city').append('<option value="' + id + '">' + userdata.city_list[id] + '</option>');
}
$('#gs_id_city').val(orig_val);
});