为啥 JQGrid 无法显示数据?

Posted

技术标签:

【中文标题】为啥 JQGrid 无法显示数据?【英文标题】:Why JQGrid failed to show data?为什么 JQGrid 无法显示数据? 【发布时间】:2017-01-04 08:51:02 【问题描述】:

在下面的代码中,动作方法GetData()将数据加载到jqgrid。但是有趣的是它显示它有数据但行没有显示数据,寻呼机组件显示它有多个页面,我可以单击行,当我单击一行时它甚至显示蓝色边框颜色但仍然没有显示数据.

我做了所有我能找到的问题,有没有办法解决这个问题?

动作方法:

DBContext db = new DBContext();

public ActionResult Index()

    return View();


public JsonResult GetData()

    try
    
        var customers = db.Customers.Select(x => new  x.CustomerID, x.FirstName, x.MiddleName,x.CompanyName, x.SalesPerson, x.EmailAddress ).ToList();
        return Json(customers, JsonRequestBehavior.AllowGet);
    
    catch (Exception)
    

        throw;
    

观点:

<script src="~/Scripts/jquery-3.1.0.js"></script>
<script src="~/Scripts/jquery-ui-1.12.0.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqgrid/4.6.0/js/i18n/grid.locale-en.js"></script>
<script src="~/Scripts/jquery.jqGrid.min.js"></script>

<h2>Index</h2>

<table id="customerGrid"></table>
<div id="pager1"></div>

@section scripts
    <script>
        $(function () 

            jQuery("#customerGrid").jqGrid(
                url: 'Home/GetData',
                datatype: "json",
                mtype: "GET",
                postData:'',
                colNames: ['Customer ID', 'First Name', 'Last Name'],
                colModel: [
                     name: 'customerid', index: 'CustomerID', key:true,sorttype:'int', width: 100 ,
                     name: 'firstname', index: 'FirstName', width: 100 ,                    
                     name: 'lastname', index: 'LastName', width: 100                     
                ],
                viewrecords: true,
                gridview: true,
                autoencode: true,
                loadonce: true, //if all data loaded at once
                rowNum: 10,
                rowList: [10, 20, 30],
                pager: '#pager1',
                sortname: 'customerid',
                viewrecords: true,
                sortorder: "desc",
                caption: "Customer List",
                width:600
            );
            jQuery("#customerGrid").jqGrid('navGrid', '#pager1',  edit: false, add: false, del: false );
        )
    </script>


    

【问题讨论】:

【参考方案1】:

我建议你不要在colModel 中使用index 属性。要解决此问题,您应该为colModel 中的name 属性使用正确的值。例如:

colModel: [
     name: 'CustomerID', key: true, sorttype: 'int' ,
     name: 'FirstName' ,                    
     name: 'LastName'                     
],
cmTemplate:  width: 100 

我使用cmTemplate: width: 100 来减少width: 100colModel 的每一列中的重复。

我建议您另外使用height: "auto"jsonReader: id: "CustomerID" 。指定jsonReader.id 后,您可以考虑删除CustomerID 列。 jqGrid 仍然会分配行的id 属性(网格的&lt;tr&gt; 元素的id),称为rowids。

sortname: 'customerid' 选项也是错误的,没有效果。如果您使用旧的 jqGrid 4.6,那么 服务器 必须返回正确排序的数据。我建议您升级到free jqGrid 4.13.4。您可以从 CDN 加载它:参见 the wiki article(包括 grid.locale-en.js 在免费 jqGrid 中不需要)或从 npm 或 NuGet 安装。之后,您可以使用forceClientSorting: true,它与loadonce: true 结合使用。它允许在显示第一页之前对从服务器返回的数据进行排序或过滤。

【讨论】:

常用的jqgrid版本是什么? 是否有适合 JQGrid 和视频的文档 @vitofila:没有“常用”的 jqGrid 版本。它最初是由 Tony Tomov 在 trirand 开发的,在 MIT/GPLv2 许可下免费提供。他发布了the statement,将jqGrid 重命名为Guriddo jqGrid JS 并使其商业化(参见价格here)。之后我启动了基于 jqGrid 4.7 的 fork “free jqGrid”,修复了许多错误并实现了许多新功能。我使用 4.x.y 作为版本号,因为我试图保持 与旧版本 jqGrid 的兼容性 @vitofila:存在“旧”文档here。免费的 jqGrid 与旧的 jqGrid 兼容,因此大多数信息仍然是正确的。 the wiki 中有很多信息,在每个已发布的免费 jqGrid 版本的 README 中都有很多信息,并且存在 the preliminary documentation。据我所知,没有视频。免费 jqGrid 的当前版本是 4.13.4。我建议你使用它。 trirand jqgrid(这是我在那个例子中使用的)是一个成熟的专业插件吗?

以上是关于为啥 JQGrid 无法显示数据?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用新的json数据重新加载JQGrid

无法绑定 jqGrid 列

为啥jqGrid不会加载?

如何解决 JQgrid 中的分页器显示

为啥除非手动更改页面大小,否则 Kendo Grid 无法正确显示数据?

jqgrid json不加载数据