【问题标题】:JqGrid : Checkbox formatterJqG​​rid:复选框格式化程序
【发布时间】:2014-11-28 09:36:51
【问题描述】:

我正在尝试在我的列上应用复选框。我只想知道如何根据值选中或取消选中这些框。例如,如果列的值为“1”,则选中该框,但如果该列的值为“0”或“null”,则必须取消选中该框。

下面的代码是我整个 jqgrid 代码的一部分。

coleModel[{
    name: 'MENU1', 
    index: 'MENU1', 
    editable: true, 
    sortable: false, 
    search: false, 
    edittype:'checkbox',
    editoptions: { value:"1:0"},
    formatter: function (cellValue, options, rowObject) {
        if (cellValue == '1') {
            return 'Enabled';
        }else if(cellValue == '0') {
            return 'Disabled';
        }else{
            return cellValue;
        }
    }
}]

此列在列表中很好地显示为“已启用”或“已禁用”。 我不知道如何显示复选标记。请让我知道该怎么做。谢谢。

----------------------------------------------------------------------------------------

抱歉问错了问题。很难向我描述。嗯..你们可以参考网站“http://www.trirand.com/jqgridwiki/doku.php?id=wiki:form_editing”吗? 'editGridRow' 下方的图片。我正在寻找名为“已关闭”的列。 我不是这个领域的专家,所以我无法解释清楚。非常抱歉。

【问题讨论】:

  • 是否要将文本'Enabled''Disabled' 替换为复选框。为什么不直接使用标准的formatter: "checkbox"
  • @Oleg 因为我在列表中添加了 CRUD,所以文本“启用”和“禁用”被替换。否则,在创建或更新时,这些列将显示为复选框。这些文本仅显示在网格列表中。
  • 对不起,我不明白你的意思。您问了关于 formatter 的问题,它在填充网格期间用于放置单元格内容(<td> 的内容)。它与网格的编辑无关。对不起,但绝对不清楚你想要什么。您在“创建或更新”下的意思是什么?您在“列表”或“网格列表”下的意思是什么?是网格的行吗?
  • @Oleg 抱歉问错了问题。我已经制作了 jqGrid 列表以从数据库中获取值,然后使用 'navbuttons' 添加了函数 'CRUD(Create, Read, Update, Delete)' 以便我可以在单击时创建或更新新弹出页面中的记录按钮。我的观点是复选框应该只显示在弹出的页面中。不在列表中。对不起,它太复杂了..
  • 对不起,但我仍然不明白哪个关系对导航按钮有复选框。您发布了一些代码片段以及要更改的内容,但我仍然不知道您要进行哪些更改。你的意思是什么“弹出页面”?您的意思是编辑对话框还是重定向到另一个 HTML 页面?您是否需要添加/编辑表单编辑对话框中的复选框?您想保留显示“已启用”和“已禁用”文本的自定义格式化程序吗?您对表单编辑对话框中的复选框状态有疑问吗?

标签: jquery checkbox jqgrid formatter


【解决方案1】:

很难理解您,因为您以错误的方式使用现有术语。格式化程序将仅用于根据输入值将数据放置在网格单元格中。例如,您在代码中使用了 custom formatter,如果输入数据为“1”,则将字符串“Enabled”放在列中,如果输入数据为“1”,则将字符串“Disabled”放在列中“0”。

从 cmets 中的后期讨论到您的问题我可以理解(我希望现在我正确理解您),您在编辑表单中使用 edittype: 'checkbox' 时遇到问题。

了解编辑表单将基于列中的值构建,这一点很重要。如果您使用在列中放置“启用”或“禁用”的自定义格式化程序,那么您可以使用

edittype: "checkbox", editoptions: { value: "Enabled:Disabled" }

The demo 演示解决方案。

另一个直觉规则是总是将unformatter 与格式化程序一起定义。例如,您可以将以下内容与您现有的formatter 代码结合使用

unformat: function (cellvalue) {
    switch (cellvalue) {
        case "Enabled":
            return "1";
        case "Disabled":
            return "0";
        default:
            return "0";
    }
},
edittype: "checkbox", editoptions: { value: "1:0" }

The demo 使用代码。

另一种选择是删除自定义格式化程序。如果需要将输入数据替换为字符串,则可以使用predefinedformatter: "select"。如果列的定义将包含以下属性

formatter: "select", formatoptions: { value: "0:Disabled;1:Enabled" },
edittype: "checkbox", editoptions: { value: "1:0", defaultValue: "1" }

因为所有预定义的格式化程序也定义了取消格式化程序,所以edittype: "checkbox"value 选项将是"1:0"

The demo 使用属性,jqGrid 的外观与之前的演示相同。

我个人发现一件事不合逻辑。您在网格中显示“启用”或“禁用”,但在编辑表单中使用复选框。在我看来不是结果。您应该在网格中也使用formatter: "checkbox" 并将复选框放置在网格中,或者您应该使用edittype: "select" 而不是edittype: "checkbox"。在最后一种情况下,用户将只使用文本“启用”和“禁用”。

The corresponding demo 在编辑表单中显示带有“启用”和“禁用”值的选择(下拉菜单):

【讨论】:

  • @홍의숙:不客气!下次请尝试更清楚地表达您的问题。你会更快得到答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
相关资源
最近更新 更多