2012-01-04 3 views
0

Я инициализация сетки, как так:jqgrid viewGridRow() не обновляют все поля на изменении строки

$("#mainGrid").jqGrid({ 
    url : g_MainGridUrl, 
    datatype : 'json', 
    height : 460, 
    autowidth : true, 
    colNames : g_ColNames, 
    colModel : g_ColModel, 
    pager : '#pager', 
    rowNum : 100, 
    rowList : [100, 200, 300], 
    sortname : g_DefaultSort, 
    sortorder : 'desc', 
    sortable: true, 
    viewrecords : true, 
    caption : 'Results', 
    hidegrid : false, 
    rownumbers : true,   
    jsonReader : { 
     root : "ROWS", 
     page : "PAGE", 
     total : "TOTAL", 
     records : "RECORDS", 
     cell : "", 
     id : g_DefaultSort 
    }, 
    loadComplete: function(){ 
     var num_records = $('#mainGrid').getGridParam('records'); 
     $('#gview_mainGrid div.ui-jqgrid-titlebar span').html('Results: '+num_records); 
    }, 
    loadBeforeSend : function(thisXhr) { 
     xhr = thisXhr; 
    }, 
    ondblClickRow: function(rowid) { 
     jQuery(this).jqGrid('viewGridRow', rowid, { width: "500"}); 
    } 
}); 

$("#mainGrid").jqGrid('navGrid', '#pager', { 
    del : false, 
    add : false, 
    edit : false, 
    refresh:false, 
    search: false, 
    view: true 
}); 

$("#mainGrid").jqGrid('navButtonAdd','#pager',{ 
    caption: "Columns", 
    title: "Reorder Columns", 
    onClickButton : function(){ 
     $("#mainGrid").jqGrid("columnChooser", { 
      done: function() { 
       resize_the_grid(); 
      }, 
      height: 320 
     }); 
    } 
}); 

и призывающие сетки, как это так, после построения фильтра объекта:

$('#mainGrid').setGridParam({ 
     url : g_MainGridUrl + Ext.util.JSON.encode(filter) 
    }); 
$('#mainGrid').trigger("reloadGrid"); 

Поскольку объект указывает, когда я дважды щелкаю по строке для просмотра своей записи, а затем изменяю строки из модального диалога, не все столбцы обновляются, а некоторые - и не другие. Я думал, что это может быть потому, что у меня не было < th> s, определенных для таблицы, поэтому я попытался добавить их. Я загрузил самую последнюю версию (4.2.0). Ошибок нет. Это верно в IE8, Chrome, Safari. Есть идеи?

ОБНОВЛЕНИЕ: Я думаю, что нашел причину, но до сих пор не имеет решения. Кажется, что любой столбец, имеющий заголовок с пробелом в названии, не может правильно прочитать сетку. Я подтвердил добавлением подчеркиваний, чтобы заменить пробелы в заголовках, и обнаружил, что для каждого исправленного столбца его значения начали обновляться. Я регистрирую отчет об ошибке в Триранде.

UPDATE 2: Кажется, там уже было сообщение об ошибке подало: trirand forum - однако, автор не считает это ошибкой, а скорее ожидает, разработчики не использовать заголовки столбцов с пробелами, а jqgrid строит идентификаторы, основанные на имена в модели столбцов. Я попросил изменить это поведение, но ожидаю, что мне придется копаться в его коде, чтобы он работал.

ответ

0

Поскольку разработчик решил, что имена столбцов могут не иметь пробелов (не уверены, что это упоминается где-либо в документации), я исправил его, взломав исходный код jqgrid. Внутри функции viewGridRow() добавьте эту строку:

nm = nm.replace(' ', '_'); 

в двух местах; первый между этими двумя линиями в функции createData():

nm = this.name; 
setme = false; 

секунды, между этими двумя линиями в функции fillData():

nm = obj.p.colModel[i].name; 
// hidden fields are included in the form 

Теперь все идентификаторы, созданные с помощью подчеркивания вместо пробелов и все хорошо.