【问题标题】:jqgrid - extending addRowDatajqgrid - 扩展 addRowData
【发布时间】:2012-03-03 12:44:37
【问题描述】:

感谢 Oleg,我有了在网格中任意位置添加一行的解决方案。但我想要这个功能

  • inlineNav 中有"Add" 链接时
  • 但是当我点击 jqgrid caption - MY JQGRID

有可能吗?

HTML

<table id="myjqgrid"></table>
<div id="pager"></div>  

JQGRID

$(document).ready(function () {
    var oldAddRowData = $.fn.jqGrid.addRowData;
    var mydata = [
        { id: "1",  invdate: "2007-10-01", name: "test",   note: "note",   amount: "200.00", tax: "10.00", closed: true,  ship_via: "TN", total: "210.00" },
        { id: "2",  invdate: "2007-10-02", name: "test2",  note: "note2",  amount: "300.00", tax: "20.00", closed: false, ship_via: "FE", total: "320.00" },
        { id: "3",  invdate: "2007-09-01", name: "test3",  note: "note3",  amount: "400.00", tax: "30.00", closed: false, ship_via: "FE", total: "430.00" },
        { id: "4",  invdate: "2007-10-04", name: "test4",  note: "note4",  amount: "200.00", tax: "10.00", closed: true,  ship_via: "TN", total: "210.00" },
        { id: "5",  invdate: "2007-10-31", name: "test5",  note: "note5",  amount: "300.00", tax: "20.00", closed: false, ship_via: "FE", total: "320.00" },
        { id: "6",  invdate: "2007-09-06", name: "test6",  note: "note6",  amount: "400.00", tax: "30.00", closed: false, ship_via: "FE", total: "430.00" },
        { id: "7",  invdate: "2007-10-04", name: "test7",  note: "note7",  amount: "200.00", tax: "10.00", closed: true,  ship_via: "TN", total: "210.00" },
        { id: "8",  invdate: "2007-10-03", name: "test8",  note: "note8",  amount: "300.00", tax: "20.00", closed: false, ship_via: "FE", total: "320.00" },
        { id: "9",  invdate: "2007-09-01", name: "test9",  note: "note9",  amount: "400.00", tax: "30.00", closed: false, ship_via: "TN", total: "430.00" },
        { id: "10", invdate: "2007-09-08", name: "test10", note: "note10", amount: "500.00", tax: "30.00", closed: true,  ship_via: "TN", total: "530.00" },
        { id: "11", invdate: "2007-09-08", name: "test11", note: "note11", amount: "500.00", tax: "30.00", closed: false, ship_via: "FE", total: "530.00" },
        { id: "12", invdate: "2007-09-10", name: "test12", note: "note12", amount: "500.00", tax: "30.00", closed: false, ship_via: "FE", total: "530.00" }
    ]
    $.jgrid.extend({
        addRowData: function (rowid, rdata, pos, src) {
            if (pos === 'afterSelected' || pos === 'beforeSelected') {
                if (typeof src === 'undefined' && this[0].p.selrow !== null) {
                    src = this[0].p.selrow;
                    pos = (pos === "afterSelected") ? 'after' : 'before';
                } else {
                    pos = (pos === "afterSelected") ? 'last' : 'first';
                }
            }
            return oldAddRowData.call(this, rowid, rdata, pos, src);
        }
    });

    $("#myjqgrid").jqGrid({
        datatype: 'local',
        data: mydata,
        colNames: ['Date', 'Client', 'Amount', 'Tax', 'Total', 'Closed', 'Shipped via', 'Notes'],
        colModel: [
            {name: 'invdate', index: 'invdate', width: 80, align: 'center', editable: true},
            {name: 'name', index: 'name', editable: true, width: 65},
            {name: 'amount', index: 'amount', width: 75},
            {name: 'tax', index: 'tax', width: 52},
            {name: 'total', index: 'total', width: 60},
            {name: 'closed', index: 'closed', width: 70, align: 'center', editable: true},
            {name: 'ship_via', index: 'ship_via', width: 105, align: 'center', editable: true},
            {name: 'note', index: 'note', width: 60, sortable: false, editable: true}
        ],
        rowNum: 10,
        rowList: [5, 10, 20],
        pager: '#pager',
        gridview: true,
        rownumbers: true,
        width: 1020,
        sortable: true,
        sortname: 'invdate',
        viewrecords: true,
        sortorder: 'desc',
        height: '100%',
        caption: 'MY JQGRID',
        editurl: 'clientArray'
   });
   $("#myjqgrid").jqGrid('navGrid', '#pager');            
   $("#myjqgrid").jqGrid('inlineNav', '#pager', {
        edittext: "Edit",
        addtext: "Add",
        savetext: "Save",
        canceltext: "Cancel",
        addParams: { position: "afterSelected" }
   });
});

【问题讨论】:

  • 抱歉,我不明白你想实现什么。您能否重新提出您的问题并更清楚地描述您想要的内容。你想使用inlineNav吗?如果您 NOT 想要我们在 inlineNav 添加的“添加”按钮上的“afterSelected”,为什么要使用该参数?如果用户单击 jqGrid 的标题 (???),我如何理解您希望在所选行之后创建新行的当前问题。你想在捕获中添加一些额外的按钮吗?捕获(标题栏)是标准的 GUI 元素。您真的要将其用作“添加”按钮吗?
  • 不,我不想使用inlineNav。是的,如果用户单击标题,我想创建一个新行......并且pos 的值可以是任何有效值,不一定是afterSelected

标签: jquery jqgrid


【解决方案1】:

您如何理解您希望将事件处理程序绑定到单击网格标题的问题。例如here 描述了网格元素的结构。所以你可以通过下面的选择器只选择网格的捕获

#gview_myjqgrid>div.ui-jqgrid-titlebar

并绑定您需要的任何事件处理程序。例如

$('#gview_' + $.jgrid.jqID($grid[0].id) + '>div.ui-jqgrid-titlebar').click(function () {
    alert("The caption (the titlebar) is clicked");
});

尽管如此,我建议您实现在点击捕获标题时添加新行。问题是操作系统和不同软件中使用的许多现代 GUI 的强大之处在于标准用户界面。所以用户不需要研究用户需要使用的每一个新程序。例如,它为培训节省了大量资金,并允许在从互联网上购买和下载后立即使用程序。所以如果客户有这样的需求,可以和客户再讨论一次,建议直接在捕获中插入添加按钮。它将允许新用户猜测您实现的功能,而无需任何培训。

【讨论】:

  • 我的问题是如何从click 事件处理程序中调用$.jgrid.extend({...})
  • @SK11:有 global 定义函数$.fn.jqGrid.addRowData 的默认实现。如果您想将实现更改为另一个,您应该执行此操作一次。要覆盖$.fn.jqGrid.addRowData,您应该使用$.jgrid.extend({addRowData: ...});,您应该在任何事件处理程序中执行此操作not。请重新阅读您在问题中写的内容。您在问题中写的内容意味着您希望能够在单击 jqGrid 的标题时在网格中添加一行。如果这不是您真正需要的,您应该更改问题的文本。
猜你喜欢
  • 1970-01-01
  • 2012-09-16
  • 2012-02-20
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 2011-03-21
  • 2011-11-16
  • 1970-01-01
相关资源
最近更新 更多