Условно включить или отключить кнопку удаления записи на основе содержимого ячейки (а не только идентификатора) - PullRequest
1 голос
/ 04 февраля 2012

Я новичок в jquery и jqgrid, но мне комфортно с javascript.Однако мне удалось установить jqgrid после некоторых усилий.

Я пытался найти решение, позволяющее отключить функцию удаления из панели навигации на основе значения столбца «блокировка».Я прочитал следующую ссылку jqgrid: как установить параметры панели инструментов на основе значения столбца в выбранной строке

Но мне не удалось получить содержимое ячейки «lock» для JavaScript.Я также попытался отформатировать строку блокировки без эффекта.

jqgrid загружается через php.Сценарий здесь http://www.trirand.net/demophp.aspx

PHP-скрипт выглядит следующим образом:

require_once("JQGrid/jq-config.php");
require_once("JQGrid/php/jqGridASCII.php");
require_once("JQGrid/php/jqGridPdo.php");
$conn = new PDO(DB_DSN,DB_USER,DB_PASSWORD);
$grid = new jqGridRender($conn);
$grid->SelectCommand = 'SELECT * FROM  `device_assignement` ';
$grid->dataType = 'json';
$grid->setColModel();
$grid->setUrl('Grid_ecu_display.php');
$grid->setColProperty("company", 


array("label"=>"Dealer Name", 
"width"=>350
), 
array( "searchrules"=> 
array("searchhidden"=>false, "required"=>false, "search"=>false)));




$grid->setGridOptions(array( 
"sortable"=>true, 
"rownumbers"=>true, 
"rowNum"=>40, 
"rowList"=>array(10,50,100), 
"sortname"=>"ecu",  
"width"=>940,  
"height"=>400,  
"shrinkToFit"=>true,  
"hidden" => true,
"hoverrows"=>true ));


$grid->toolbarfilter = true;
$grid->setFilterOptions(array("stringResult"=>true));
$grid->setColProperty("ecu", array(
"label"=>"ECU Number" ,  
"sortable"=>true
));

$grid->setColProperty("lock", array(
"label"=>"<i>Lock</i>" ,  
"width"=>60,
"sortable"=>false,
"editable"=>true
));

и т. Д. И т. Д. *

$ecu = jqGridUtils::GetParam('ecu'); 
// This command is executed immediatley after edit occur. 
$grid->setAfterCrudAction('edit', "UPDATE  `ecu_master` SET  `lock` =  '1'             WHERE  `ecu` =?",array($ecu));  


$grid->navigator = true;

$grid->setNavOptions('navigator', array("pdf"=>true, "add"=>false,"edit"=>true,"del"=>false,"view"=>false, "excel"=>true)); 



$grid->setColProperty('company',array("searchoptions"=>array("sopt"=>array("cn"))));
$oper = jqGridUtils::GetParam("oper"); 
if($oper == "pdf") { 
$grid->setPdfOptions(array( 
// set the page orientation to landscape 
"page_orientation"=>"L", 
// enable header information 
"header"=>true, 
// set bigger top margin 
"margin_top"=>27, 
// set logo image 
//"header_logo"=>"logo.gif", 
// set logo image width 
//"header_logo_width"=>30, 
//header title 
"header_title"=>"Autograde CMS ECU Allocation List", 
// and a header string to print 
"header_string"=>"$SoftwareVersion" 
)); 
} 
// Run the script
$grid->renderGrid('#grid','#pager',true, null, null, true,true);

Это включено в другой сценарий php, где,Все, что я хочу, это включить или отключить кнопку удаления строки на основе значения «lock». Если это кажется слишком простым и нелепым, пожалуйста, дайте мне знать, я пойму.

1 Ответ

0 голосов
/ 04 февраля 2012

Если пользователь щелкнет ячейку сетки, будет выбрана вся строка и будет вызвана функция обратного вызова onSelectRow . Поэтому вы должны реализовать функцию обратного вызова onSelectRow , в которой в качестве первого параметра указан идентификатор строки (id из <tr>). Внутри обработчика onSelectRow вы можете вызвать метод getCell . В зависимости от значения столбца «блокировка» (который может быть скрыт при необходимости), вы можете включить или отключить кнопки «Редактировать» и «Удалить» на панели навигации.

Таким образом, код может быть примерно следующим:

$('#list').jqGrid({
    ... all other jqGrid options which you need
    pager: '#pager',
    onSelectRow: function (rowid) {
        var gridId = $.jgrid.jqID(this.id);
        // test 'lock' column for some value like 'yes'
        if ($(this).jqGrid('getCell', rowid, 'lock') === 'yes') {
            // disable the "Edit" and "Delete" buttons of the navigator
            $("#edit_" + gridId).addClass('ui-state-disabled');
            $("#del_" + gridId).addClass('ui-state-disabled');
        } else {
            // enable the "Edit" and "Delete" buttons of the navigator
            $("#edit_" + gridId).removeClass('ui-state-disabled');
            $("#del_" + gridId).removeClass('ui-state-disabled');
        }
    }
}).jqGrid('navGrid', '#pager');

Поскольку вы новичок в jqGrid, я хочу прокомментировать использование функции $.jgrid.jqID(). В большинстве случаев if возвращает значение входного параметра: 'list' в случае примера. Это необходимо для более общего случая, если идентификатор сетки (идентификатор элемента <table>) содержит метасимволы . $.jgrid.jqID() функция включает дополнительные escape-символы (две обратные косые черты: \\) перед любым метасимволом.

...