【问题标题】:JQGrid empty grid and no navigation or edit iconsJQGrid 空网格,没有导航或编辑图标
【发布时间】:2016-10-04 19:08:15
【问题描述】:

由于某种原因,我的网格是空白的,没有行(甚至没有空行),没有导航图标,也没有编辑图标。我正在使用一些附加功能,例如自动完成字段(在网格内)和字体大小调整脚本,因此我的脚本有点长。该页面正在从我的函数页面接收格式正确的响应,它似乎与我的 jsonReader 设置匹配,但它没有用它填充网格。这是我在页面上的 JSON 格式响应:

{"page":"1",
"total":1,
"records":"4",
"rows":[{"DetailID":"1","Quantity":"2","TaskName":"Differencial With Housing","UnitPrice":"335.00","ExtendedPrice":"670.00"}, {"DetailID":"2","Quantity":"1","TaskName":"Left axel seal","UnitPrice":"15.00","ExtendedPrice":"15.00"},{"DetailID":"3","Quantity":"1","TaskName":"Upper and Lower Bearings","UnitPrice":"55.00","ExtendedPrice":"55.00"}, {"DetailID":"5","Quantity":"1","TaskName":"Fluids","UnitPrice":"45.00","ExtendedPrice":"45.00"}]}

这是我的网格脚本:

<script>    
    function autocomplete_element(value, options) {
      var $ac = $('<input type="text"/>');
      $ac.val(value);
      $ac.autocomplete({source: "autocomplete.php?method=fnAutocomplete"});
      return $ac;
    } 
    function autocomplete_value(elem, op, value) {
      if (op == "set") {
        $(elem).val(value);
      }
      return $(elem).val();
    }
        $(document).ready(function()
            {
                $('#filter').jqm();
                var selectedRow = 0;                
                $("#list").jqGrid(
                {
                    url:'managegrid.php',
                    datatype: 'json',
                    colNames:['DetailID', 'ProjectID','Qty.','Description','Unit Price','Total Cost'],
                    colModel :[
                        {name:'DetailID', index:'DetailID', hidden:true, editable:false},
                        {name:'ProjectID', index:'ProjectID', width:25, hidden:true, editable:true},
                        {name:'Quantity', index:'Quantity', editable:true, width:50, align:'right', edittype:'text', editoptions: {defaultValue:'1'}},
                        {name:'TaskName', index:'TaskName', editable:true, width:450, align:'left', edittype: 'custom', editoptions: {'custom_element' : autocomplete_element, 'custom_value' : autocomplete_value}},                           
                        {name:'UnitPrice', index:'UnitPrice', editable:true, width:100, align:'right'},
                        {name:'ExtendedPrice', index:'ExtendedPrice', editable:false, width:100, align:'right'}
                    ],
                    onSelectRow: function(id){
                      if(DetailID && DetailID!==mkinline){
                        jQuery('#list').saveRow(mkinline);
                        jQuery('#list').editRow(DetailID,true);
                        mkinline=DetailID;
                      }
                    },
                    pager: $('#pager'),
                    rowNum:20,
                    rowList:[],
                    pgbuttons: false,
                    pgtext: null,
                    sortorder: "asc",
                    sortname: "DetailID",
                    viewrecords: true,
                    imgpath: '/js/jquery/css/start/images',
                    caption: 'Project Details',
                    height:'auto',
                    width:823,
                    mtype:'GET',
                    recordtext:'',
                    pgtext:'',
                    editurl:"editgrid.php",
                    toolbar:[true,"bottom"],
                    loadComplete:function(){
                            var recorddata = $("#list").getUserData();
                            $("#t_list").html(recorddata.MSG);
                        },
                    jsonReader: {
                        page: "PAGE",
                        total: "TOTAL",
                        records:"RECORDS",
                        root: "ROWS",
                        userdata:"USERDATA"
                        }
                    }
                );
                $("#t_list").css("color","blue");
                jQuery("#list").jqGrid("inlineNav",'#pager',{edit:true,editicon: "ui-icon-pencil",add:true,addicon: "ui-icon-plus",search:false}, {}, {},
                {url:"delgridrow.php",closeAfterDelete:true,reloadAftersubmit:false,afterSubmit:commonSubmit,caption:"Delete",msg:"Delete selected",width:"400"})
                .navButtonAdd('#pager',{caption:"",title:"Reload Form",buttonimg:'/js/jquery/css/start/images/refresh.gif',onClickButton:function(id)
                    {
                        resetForm();            
                        $("#list").setGridParam(
                            {
                                url:"managegrid.php",
                                page:1
                            }
                        ).trigger("reloadGrid");
                    }
                });         
            }       
        );
    function gridSearch()
    {
        var pid = $("#DetailID").val();
        var qty = $("#Quantity").val();
        var tn = $("#TaskName").val();
        var up = $("#UnitPrice").val();
        $("#list").setGridParam(
            {
                url:"managegrid.php?ProjectID="+pid+"&Quantity="+qty+"&TaskName="+tn+"&UnitPrice="+up,
                page:1
            }
            ).trigger("reloadGrid");
        $("#filter").jqmHide();
        return false
    }
    function commonSubmit(data,params)
    {
        var a = eval( "(" + data.responseText + ")" );
        $("#t_list").html(a.USERDATA.MSG);
        resetForm();
        return true;
    }   function resetForm()
    {
      window.location.reload(false);
    }
</script>

我整个周末都在努力解决这个问题,这让我发疯了,所以任何帮助都将不胜感激。

【问题讨论】:

  • 您使用哪个版本的 jqGrid 以及来自哪个 jqGrid 分支(free jqGrid、商业Guriddo jqGrid JS 或版本 not free jqGrid,那么你必须调用navGrid before inlineNav
  • 不确定版本号,但构建直接来自大约 2 年前的 jquery 下载页面。我实际上正在将基于 ColdFusion 的发票应用程序转换为 PHP。这个网格在 CF 版本中工作,所以所有指向 jquery 和 jqgrid 文件夹的链接都被保留了。网格正在渲染,只是没有填充数据。 (导航/编辑图标也没有显示)
  • 您是否像我之前写的那样在调用inlineNav 之前直接添加了代码行jQuery("#list").jqGrid("navGrid", '#pager', {add: false, edit: false, del: false, search: false, refresh: false});
  • 我的代码中已经有了这一行:
  • 是的,这是现在的代码:jQuery("#list").jqGrid("navGrid", '#pager', {add: false, edit: false, del: false, search:假,刷新:假}); jQuery("#list").jqGrid("inlineNav",'#pager',{edit:true,editicon:"ui-icon-pencil",add:true,addicon:"ui-icon-plus",搜索:假}、{}、{}、...

标签: javascript jqgrid jqgrid-php


【解决方案1】:

你应该添加这行代码

jQuery("#list").jqGrid("navGrid", '#pager',
    {add: false, edit: false, del: false, search: false, refresh: false});

直接在调用inlineNav之前。

已更新:您的代码还有许多其他问题。例如,您应该从代码中删除 jsonReader 选项,因为它包含错误的属性值(例如 root: "ROWS" 而不是 root: "rows",这是默认值,可以删除)。您可以考虑使用jsonReader: { id: 'DetailID' } 来使用DetailID 的值作为rowid,并在编辑时使用DetailID 而不是id。我建议您在使用之前定义所有变量(例如,参见 mkinlineDetailID)。

【讨论】:

  • 谢谢奥列格。我下载了最新版本的 Guriddo 版本,现在我得到了编辑图标和一条没有记录的消息。 (虽然 managegrid.php 页面仍然响应 json 数据)
  • @RaymondMeade:不客气!您至少应该另外删除 jsonReader 或将其替换为 jsonReader: { id: 'DetailID' }:请参阅我的答案的 UPDATED 部分。之后可以删除隐藏列DetailID。顺便说一句,Guriddo 不是免费的(请参阅价格here)。另一边我开发的free jqGrid可以完全免费使用。
  • 你知道吗,我删除了 jsonreader,我的网格现在可以工作了。非常感谢,Oleg(现在开始修复甚至没有得到任何响应数据的自动完成功能......哈哈)
  • @RaymondMeade:不客气!我之前写过,您当前的代码有很多问题。顺便说一句,您不需要使用edittype: 'custom' 来使用autocomplete。在dataInit 内部调用autocomplete 就足够了。
  • Oleg,如果我切换到你的 jqgrid 版本,我需要对我的代码进行任何更改吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
相关资源
最近更新 更多