JQGrid数据不会在第二次或后续点击事件上重新加载...(它在第一次getdata按钮点击时加载)

时间:2013-01-20 20:08:10

标签: javascript jquery jqgrid jqgrid-asp.net

我正在使用JQGrid显示来自db的一些数据列表,具体取决于从下拉列表中选择的LogID。 ITS在第一次点击时正确显示内容。 但是在所有后续点击中没有任何事情发生,页面不会更改或重新加载或做任何事情,但如果我尝试调试脚本,我可以看到按钮点击事件每次点击时都被触发,但仍然没有带回来数据库中已更改的LogID数据。我不确定,但我认为它与reloadGrid触发器相关...

  <script type="text/javascript">
    var firstClick = true;
    $(document).ready(function () {
        $('.editor-date > input').datepicker();
        $('.getdata').click(function () {
            if (!firstClick) {
                $("#GridTable").trigger("reloadGrid");
            }
                firstClick = false;
                $('#GridTable').jqGrid({
                    url: '<%= Url.Action("GetData", "Report") %>',
                    datatype: 'json',
                    mtype: 'POST',
                    colNames: ['Log ID'],
                    colModel: [{ name: 'LogID', index: 'MessageLogID', key: true, formatter: pointercursor }],
                    multiselect: true,
                    sortname: 'LogID',
                    sortorder: "asc",
                    viewrecords: true,
                    pager: $('#pager'),
                    rowNum: 20,
                    rowList: [5, 10, 20, 50],
                    postData: {
                        IdParam: $('#testLogID').val()
                    },
                    jsonReader: {
                        repeatitems: false,
                        id: 'LogID',
                        records: 'TotalRecords',
                        total: 'TotalPages',
                        page: 'CurrentPage',
                        root: 'Rows'
                    },
                    loadError: function (xhr, status, error) {
                        messageBox('Error', 'Error occurred loading data.');
                    },
                    height: 'auto',
                    width: 'auto'
                });

            });

我发现了类似的问题,但解决方案无效jQuery button click refresh of jqGrid only firing once

2 个答案:

答案 0 :(得分:3)

我认为你应该改变

postData: {
    IdParam: $('#testLogID').val()
}

postData: {
    IdParam: function () {
        return $('#testLogID').val();
    }
}

(有关详细信息,请参阅my old answer。)

您当前的代码会在第一次调用时保存网格创建时$('#testLogID').val() 的值。以后的调用使用相同的旧值。 postData内部的函数/方法的使用是在每次重新加载网格时调用该函数。它将间接完成:jqGrid使用$.ajax使用$.param调用函数postData.IdParam

此外,我建议您添加gridview: true选项并将pager: $('#pager')更改为pager: "#pager",并将行var firstClick = true;移至功能$(document).ready(function () {...});内。我还错过了} else { if (!firstClick) {的一部分。重要的是要了解应该使用$('#GridTable').jqGrid({...});创建一次一次,之后只使用$("#GridTable").trigger("reloadGrid");

答案 1 :(得分:0)

插入并刷新jqgrid,请参见我的代码。

$("#Tab1").click( function(){ 

 var gridArrayData = [];
   var ids =jQuery("#jqGrid").jqGrid('getGridParam','selarrrow'); 
   var totalRowsCount = ids.length;
   if(totalRowsCount>0)
  {
   $.ajax({ 
     type: "POST", 
     url: 'Operaciones_Grilla.php?Op=30'+'&Filtro='+ids+'&page=1&rows=10', 
     dataType: "json",
     success: function(data) {
		$("#jqGrid2")[0].grid.beginReq();
     	var data = data.rows;
		var ii =0;
        for(var i in data)
               {
						gridArrayData.push({
                                id: data[i].id,
                                sistema: data[i].des_sistema,
                                opcion: data[i].des_opciones_sistema,
								id_sistema:data[i].id_sistema,
								id_opcion:data[i].id
								
                            });                            
                }// cierra el for each
					  jQuery('#jqGrid2').jqGrid('clearGridData')
                     .jqGrid('setGridParam', {data: gridArrayData})
                     .trigger('reloadGrid');
					$("#jqGrid2")[0].grid.endReq();
						$("#jqGrid2").trigger('reloadGrid');
		       }
           }); 
						   $('#tabs a[href="#tabs-2"]').trigger('click');	
						   }else{
							  alert('debe escoger un registro') ;
					}// cierra el íf que cuenta el numero de registros
	});








//*************** PHP CODE ************************//

Operaciones_Grilla.php?Op=30 call this function:

 public function Sube_Data_Grid_Perfiles22($page,$rows,$filtro)
	  {
	   
		 $respuesta = new stdClass();
	     $this->page =$page;
		 $this->limit=$rows;
		 $sql="";
		 $sql='select count(a.*) from opciones_sistema a where a.id_opciones_sistema in  '."(".$filtro.")";
         $count = $this->dbh2->query($sql)->fetchColumn();
		 if( $count >0 ) {
	                $total_pages = ceil($count/$this->limit);
               } else {
	                $total_pages = 0;
               }
              if ($this->page > $total_pages)$this->page=$total_pages;
		     
             $start = $this->limit*$page - $this->limit; 
           $i=0;

           $Sql='select a.id_opciones_sistema, b.des_sistema,a.des_opciones_sistema, b.id_sistema from opciones_sistema a,sistemas b where a.id_sistema = b.id_sistema and a.id_opciones_sistema in '."(".$filtro.") order by b.id_sistema,a.id_opciones_sistema ";
  
		$stmt = $this->dbh2->prepare($Sql);
		$stmt->execute();
	
		
		
		foreach ($stmt as $row) {
		
		        $respuesta->rows[$i]['id']=$row["id_opciones_sistema"];
				$respuesta->rows[$i]['des_sistema']=$row["des_sistema"];
				$respuesta->rows[$i]['des_opciones_sistema']=$row["des_opciones_sistema"];
				$respuesta->rows[$i]['id_sistema']=$row["id_sistema"];
               
                $i++;
		
   
   }// cierra sube data grid

     $this->dbh2 = null;
 
	 return json_encode($respuesta);
	
	
	 
	  
}// cierra metodo suba data grid