Javascript 如何在jqgrid分组中仅按其摘要值对列进行排序

Javascript 如何在jqgrid分组中仅按其摘要值对列进行排序,javascript,jqgrid,Javascript,Jqgrid,我在这里有可用的代码: 数据类型是“本地”而不是json $("#jqGrid").jqGrid({ url: "/echo/json/", // use JSFiddle echo service postData: { json: JSON.stringify(serverResponse) // needed for JSFiddle echo service }, mtype: "POST", // needed for JSFiddle

我在这里有可用的代码:

数据类型是“本地”而不是json

$("#jqGrid").jqGrid({
    url: "/echo/json/", // use JSFiddle echo service
    postData: {
        json: JSON.stringify(serverResponse) // needed for JSFiddle echo service
    },
    mtype: "POST", // needed for JSFiddle echo service
    datatype: "json",
    colModel: [
        { label: 'CatId', name: 'CatId', key: true, width: 30 },
        { label: 'InventoryDate', name: 'InventoryDate', width: 70 },
        { label: 'ProductName', name: 'ProductName', width: 150 },
        { label: 'RemainingQuantity', name: 'RemainingQuantity', width: 150, summaryType: 'sum', sortable: true }

    ],
    iconSet: "fontAwesome",
    viewrecords: true,
    rowList: [20,30,50],
    width: 780,
    height: 250,
    rowNum: 20,
    sortname: "ProductName",
    grouping: true,
    groupingView: {
        groupField: ["CatId"],
        groupColumnShow: [true],
        groupText: [
            "CatId: <b>{0}</b>"
        ],
        groupOrder: ["asc"],
        groupSummary: [true],
        groupSummaryPos: ["header"],
        groupCollapse: true
    }
});
$(“#jqGrid”).jqGrid({
url:“/echo/json/”,//使用JSFIDLE echo服务
postData:{
json:json.stringify(serverResponse)//JSFIDLE echo服务需要
},
mtype:“POST”//JSFIDLE echo服务需要
数据类型:“json”,
colModel:[
{label:'CatId',name:'CatId',key:true,width:30},
{标签:'InventoryDate',名称:'InventoryDate',宽度:70},
{标签:'ProductName',名称:'ProductName',宽度:150},
{label:'RemainingQuantity',name:'RemainingQuantity',宽度:150,summaryType:'sum',sortable:true}
],
iconSet:“真棒”,
viewrecords:是的,
行列表:[20,30,50],
宽度:780,
身高:250,
rowNum:20,
sortname:“产品名称”,
分组:对,
分组视图:{
groupField:[“CatId”],
groupColumnShow:[正确],
组文本:[
“CatId:{0}”
],
groupOrder:[“asc”],
groupSummary:[true],
groupSummaryPos:[“标题”],
群体崩溃:真的吗
}
});

在这里,我想根据标题中的汇总值对剩余数量进行排序。请帮助。

您的演示有许多小问题:

  • 首先,您写的关于数据类型的用法是“local”,但在演示中使用的是
    datatype:“json”
    。此外,还可以使用no
    loadonce:true
    选项和no
    forceClientSorting:true
    选项。这意味着服务器负责对数据进行排序。此外,如果使用分组,则从服务器返回的数据必须(在服务器上)按
    groupingView.groupField
    CatId
    )和
    sortname
    RemainingQuantity
    )进行排序。用作源的数据排序不正确。例如,我们可以看到jqGrid显示两个
    CatId:2
    和两个
    CatId:3
  • 您可以通过添加
    loadonce:true
    forceClientSorting:true
    选项来解决此问题,但您使用的是旧版本的免费jqGrid(4.11.1),它不支持
    forceClientSorting:true
    。您必须升级到免费jqGrid的最新版本(4.14.0),才能在显示之前对从客户端服务器返回的数据进行排序和分组
  • 包含整数数据的源数据将作为字符串从服务器返回。此外,某些数据项包含空格(
    “16”
    ,而不是
    “16”
    16
    )。它改变了数据排序的顺序
  • 您应该使用
    sorttype
    (例如
    sorttype:“integer”
    )对数据类型对应的列中的数据进行排序
  • 要正确排序日期列,应使用
    sorttype:“date”
    formatter:“date”
    以及
    formattoptions
    (在您的情况下:
    formattoptions:{srcformat:“d/m/Y H:i:s”,newformat:“d/m/Y H:i:s”}
  • 如果希望选项
    rowNum
    rowList
    viewrecords
    工作,则网格必须至少有一个寻呼机。因此,您可能会跳过
    pager:true
    toppager:true
    (或两者)选项

固定演示是。我删除了
groupingView.groupollapse:true
height:250
只是为了便于检查结果。设置对于您的主要问题并不重要。

您好,为了演示,我不得不使用它。我使用的数据类型是:local。现在更新了小提琴。我希望列排序基于摘要,而不是组中的行。通过列排序,我的意思是当您单击列标题时,记录应根据分组摘要进行排序。请帮助。@MattMurdock:我重复一遍,我不明白你在“我希望列排序基于摘要而不是组中的行”下的意思。如何“列标题记录应根据分组摘要进行排序”?列标题和分组标题只是标题,与数据没有直接关系。您可以自定义列标题和分组标题以显示该位置的任何信息。jqGrid对组和行进行排序。这些组可以按照
groupField:[“CatId”]
和单击列中的数据作为第二个排序标准进行排序。@MattMurdock:是的,原因是。我在上一篇评论中写道,最简单的方法是计算摘要值,您需要独立于jqGrid访问该值,并使用该值(作为附加属性)扩展数据。然后,
rowObject
将具有您需要的属性。@MattMurdock:
这是网格的DOM<代码>var p=$(this).jqGrid(“getGridParam”)是网格选项的参考。因此,您可以检查
p.sortorder
p.sortname
或jqGrid的任何其他选项。@MattMurdock:对不起,我必须完成我的主要工作,不能以“聊天”方式回答评论。从其他问题转向年轻人总是需要一些时间。我不确定我是否正确理解你最后的评论。在
reloadGrid
和更改
sortname
时应小心。在什么时候或在哪个回调中更改
sortname
,这一点非常重要。
sortname
的值应为列名,因此不包含空格、逗号等。如果您有新问题,请单独发布,并准确描述您的问题所在。演示也很有帮助。