JQGrid数据没有't在第二次或随后的单击事件中重新加载..(它在第一次点击getdata按钮时加载)

JQGrid data doesn't reload on second or subsequent click events...(it loads on first getdata button click)

本文关键字:加载 新加载 按钮 getdata 第一次 单击 数据 第二次 JQGrid 事件      更新时间:2023-09-26

我正在使用JQGrid根据从下拉列表中选择的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按钮点击刷新jqGrid只触发一次

我认为你应该更改

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

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

(有关更多信息,请参阅我的旧答案(。

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

此外,我建议您添加gridview: true选项,将pager: $('#pager')更改为pager: "#pager",并在函数$(document).ready(function () {...});中移动行var firstClick = true;。我还想念if (!firstClick) {} else {部分。重要的是要理解,应该使用$('#GridTable').jqGrid({...});创建一次网格,然后只使用$("#GridTable").trigger("reloadGrid");

插入并刷新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