2010-01-19 3 views
1

У меня проблема с отображением сетки в качестве субсети с помощью дополнительной кнопки. Я попытался скопировать код изjqgrid Display Grid as Subgrid отдельной кнопкой

subGridRowExpanded: 

Event. Но сетка делает что-то неприятное, прежде чем будет запущен subGridRowExpanded. Если я использую кнопку + на левой стороне, сетка отображается правильно. Если я сейчас нажму кнопку «Созданный», субгруд также перезагрузится. Я использовал предупреждение, чтобы остановить функцию в начале, и я увидел, что таблица вставлена ​​перед subGridRowExpanded.

Итак, я догадываюсь, что у меня нет функции перед Событием. Возможно, я использую неправильное событие для своей задачи.

Вот мой код, который из базового примера. Функция, которая генерирует кнопки:

gridComplete: function(){ 
    var ids = jQuery("#task").jqGrid('getDataIDs'); 
    var running_task_ids=get_running_task_id_ajax(); 
    for(var i=0;i < ids.length;i++){ 
     var cl = ids[i]; 
     start = "<input style='height:22px;width:50px;' type='button' value='Start' onclick=\"start_stop_task('"+cl+"','start');\" />"; 
     stop = "<input style='height:22px;width:50px;' type='button' value='Stop' onclick=\"start_stop_task('"+cl+"','stop');\" />"; 
     se = "<input style='height:22px;width:50px;' type='button' value='Save' onclick=\"jQuery('#task').saveRow('"+cl+"');\" />"; 
     //ce = "<input style='height:22px;width:20px;' type='button' value='C' onclick=\"jQuery('#task').restoreRow('"+cl+"');\" />"; 
     co = "<input style='height:22px;width:70px;' type='button' value='Comment' onclick=\"foobar('task_"+cl+"',"+cl+");\" />"; 
     } 
} 

функция, которая называется (просто копируется из сетки в качестве примера подсеток):

function foobar(subgrid_id, row_id) { 
// klappt noch nicht! 

alert(subgrid_id+":"+row_id); 
// we pass two parameters 
// subgrid_id is a id of the div tag created whitin a table data 
// the id of this elemenet is a combination of the "sg_" + id of the row 
// the row_id is the id of the row 
// If we wan to pass additinal parameters to the url we can use 
// a method getRowData(row_id) - which returns associative array in type name-value 
// here we can easy construct the flowing 
var subgrid_table_id, pager_id; 
    subgrid_table_id = subgrid_id+"_t"; 
    pager_id = "p_"+subgrid_table_id; 
    $("#"+subgrid_id).html("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>"); 
    jQuery("#"+subgrid_table_id).jqGrid({ 
     url:"ajax/listtasktime/id/"+row_id, 
     onSelectRow: 
      function(id){ 
      if(id && id!==lastsel2){ 
        jQuery('#'+subgrid_table_id).jqGrid('restoreRow',lastsel2); 
        //jQuery('#task').jqGrid('editRow',id,true,pickdates_e); 
        jQuery('#'+subgrid_table_id).jqGrid('editRow',id,true); 
        lastsel2=id; } 
     }, 

     datatype: "xml", 
     colNames: ['ID','START','END', 'Time'], 
     colModel: [ 
       {name:"ID",index:"num",width:80,key:true}, 
       {name:"START",index:"item",width:180,editable: true}, 
       {name:"END",index:"qty",width:180,align:"right",editable: true}, 
       {name:"TIME",index:"qty",width:180,align:"right"} 
       ], 
       rowNum:20, 
       pager: pager_id, 
       sortname: 'num', 
       sortorder: "asc", 
       height: '100%' 
        }); 
    jQuery("#"+subgrid_table_id).jqGrid('navGrid',"#"+pager_id,{edit:false,add:false,del:false}) 
    alert("done");  
    } 

ответ

4

Я нашел это сам. Вам не нужно вызывать отдельную функцию. Так как jqGrid 3.3 или что-то вроде этого, есть функция называется:

toggleSubGridRow() 

или

expandSubGridRow() 

вы можете вызвать функцию следующим образом:

<input type='button' value='Comment' onclick=\"jQuery('#list').toggleSubGridRow('"+rowid+"');\" /> 

Если щелкнул зарегистрированная функция от

subGridRowExpanded: 
     function(subgrid_id, row_id) {...} 

Вызывается событие.