2014-12-24 5 views
0

Я в соответствии с инструкцией по jqGrid inline edit: odd behavior with an autocomplete columnjqgrid автозаполнения не можете столбец ID

Но у меня не так с ним ...

Я уже вставить в:

{name:'SUPPLIERID', index:'SUPPLIERID', width:10, editable:true,align:'right',formatter: 'number', hidden: true}, 
{name:'SUPPLIER', index:'SUPPLIER', width:10, editable:true,edittype: 'text', 
      editoptions:{dataInit: function(elem) { 
       $(elem).autocomplete({ 
        source: function(request, response) {$.getJSON("../../main/lookup/supplierExt.php", { q: request.term }, response)}, 
        select: function(event, ui){ 
         //alert (ui.item.SUPPLIERID); 
         var rowId = $("#g_terima").jqGrid('getGridParam', 'selrow'); 
         var rowData = $("#g_terima").jqGrid('getRowData', rowId); 
         rowData.SUPPLIERID = ui.item.SUPPLIERID; 
         $("#g_terima").jqGrid('setRowData', rowId, rowData); 

         } 
       }); 
      }}}, 

и наш поиск Json:

<?php 
session_start(); 
include($_SESSION[apppath].'modules/firebird.php'); 
$term = trim(strip_tags($_REQUEST['q'])); 

$sql = "select s.supplierid, c.contact supplier from supplier s 
left join contact c on c.contactid = s.contactid 
where s.companyid = $_SESSION[companyid] and c.contact like '%".$term."%' 
order by c.contact "; 
$stmt = $conn->query($sql); 
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    $row['id']=(int)$row[SUPPLIERID]; 
    $row['SUPPLIERID']=(int)$row[SUPPLIERID]; 
    $row['value']=htmlentities(stripslashes($row[SUPPLIER])); 

    $row['label']=htmlentities(stripslashes($row[SUPPLIER])); 
    $row_set[] = $row; 
} 

echo json_encode($row_set); 
return true; 
//exit(); 
?> 

Autocomplete выглядит многообещающим, но я не могу пройти мимо D/SUPPLIERID в КОЛОНКУ ПОСТАВЩИКА. Пожалуйста, есть что-то, что я делаю неправильно? Я не мог найти его ...

После оклейки Олег внушения:

var g_terima = '#g_terima'; var pg_terima = '#pg_terima'; var file_terima = 'bip_terima_.php'; 
jQuery(document).ready(function(){ 
jQuery(g_terima).jqGrid({ 
    url:file_terima, 
    editurl: file_terima, 
    datatype: 'json', 
    mtype: 'GET', 
    colNames:['Tgl','SUPPLIERID', 'Supplier', 'Internal','Peternak','Tipe', 'Produk', 'Jml/Berat', 'Harga','Total','PPN', 'Total+PPN' 
    , 'Inv No','Tax No','NoId'], 
    colModel :[ 
    {name:'TGL', index:'TGL', width:9, editable:true,sorttype:'date', 
       editoptions:{ 
        dataInit:function(el){$(el).datepicker({dateFormat:'yy-mm-dd',changeMonth: true,changeYear: true})}}, 
        searchoptions:{dataInit:function(el){$(el).datepicker({dateFormat:'yy-mm-dd',changeMonth: true,changeYear: true})}} 
      }, 
     {name:'SUPPLIERID', index:'SUPPLIERID', width:10, editable:true,align:'right',formatter: 'number', hidden: true}, 
     {name:'SUPPLIER', index:'SUPPLIER', width:10, editable:true,edittype: 'text', 
      editoptions:{dataInit: function(elem) { 
       var $self = $(this); 
       $(elem).autocomplete({ 
        source: function(request, response) {$.getJSON("../../main/lookup/supplierExt.php", { q: request.term }, response)}, 
        select: function(event, ui){ 
         //alert (ui.item.SUPPLIERID); 
         var rowId = $self.jqGrid('getGridParam', 'selrow'); 
         $("#" + rowId + "_SUPPLIERID").val(ui.item.SUPPLIERID); 

         } 
       }); 
      }}}, 

SupplierID COLUMN еще нулевое значение ...

enter image description here

ответ

0

Вы не отвечал достаточно подробностей, о чем вы делать. Какой режим редактирования вы используете? Если вы используете встроенное редактирование, то вы не можете использовать setRowData метод во время редактирования строки, но вы все еще можете использовать jQuery.val для изменения значения редактируемой ячейки, которая находится в режиме редактирования.

Если вы используете встроенное редактирование, то идентификатор ячейки, которая редактируется, будет построена из rowid, _ и имя столбца (SUPPLIERID в вашем случае). Таким образом, вы можете заменить getRowData и setRowData из кода на что-то вроде следующего:

dataInit: function(elem) { 
    var $self = $(this); 
    $(elem).autocomplete({ 
     source: function(request, response) { 
      $.getJSON(
       "../../main/lookup/supplierExt.php", 
       { q: request.term }, 
       response 
      ); 
     }, 
     select: function (event, ui) { 
      var rowId = $self.jqGrid('getGridParam', 'selrow'); 
      $("#" + rowId + "_SUPPLIERID").val(ui.item.SUPPLIERID); 
     } 
    }); 
} 

ОБНОВЛЕНО: Это очень важно знать, какой режим редактирования используется, так как идентификатор поля ввода будут устанавливаться на основе различных правил. В приведенном ниже коде определяется, будет ли использоваться редактирование формы, встроенное редактирование или фильтр панели инструментов, который будет выбирать соответствующий идентификатор.

select: function (event, ui) { 
    var id; 
    if ($(elem).hasClass("FormElement")) { 
     // form editing 
     id = "SUPPLIERID"; 
    } else if ($(elem).closest(".ui-search-toolbar").length > 0) { 
     // filter foolbar 
     id = "gs_SUPPLIERID"; 
    } else if ($(elem).closest("tr.jqgrow").length > 0) { 
     id = $(elem).closest("tr.jqgrow").attr("id") + "_SUPPLIERID"; 
    } 
    $("#" + id).val(ui.item.SUPPLIERID); 
} 
+0

Привет Олег, Спасибо за ваш ответ ... Я хочу, чтобы это может быть редактировать через форму и инлайн редактирования ... это мое приложение скриншот ... [IMG] Http: // i62.tinypic.com/2q2r5te.png[/IMG] Я скопировал ваше предложение, но столбец vendid по-прежнему равен нулю. Если я пытаюсь предупредить (ui.item.SUPPLIERID), номер уже есть. –

+0

@ariadrianto: вы должны использовать * другой * 'id' в случае редактирования формы: просто' $ ("# SUPPLIERID"). Val (ui.item.SUPPLIERID); 'В качестве альтернативы вы можете обнаружить режим редактирования, как я описал в ** ОБНОВЛЕНО ** часть моего ответа. – Oleg

+0

IT работает ... Большое спасибо, Олег ... вы спасете нас ... –

Смежные вопросы