服务器端函数在jqGrid中只调用一次

时间:2012-02-19 10:57:43

标签: jqgrid jqgrid-asp.net jqgrid-formatter

我在页面上放了一个jqgrid。在Jqgrid中,当用户单击列时放置了我想要的列,当我单击所需的列时填充其他Jqgrid.Now。只有第一次填充第二个JQGrid,但下次服务器端代码将无法运行。 代码编写如下

var firstButtonColumnIndex = 0;
            grid = $('#list'); buttonNames = {};
            grid.jqGrid({
                url: 'jQGridHandler.ashx?Request=1',
                loadonce: true,
                direction: "rtl",
                pgtext: "صفحه {0} از {1}",
                datatype: 'json',
                height: 250,
                colNames: ['شماره درخواست', 'شماره اموال', 'شرح دستور کار', 'تاریخ دستور کار', 'زمان دستور کار', 'ملاحظات', '', ''],
                colModel: [

                        { name: 'WorkOrderNo', width: 100, sortable: true },
                        { name: 'AssetNo', width: 100, sortable: true },
                        { name: 'WorkDescription', width: 400, sortable: true },
                        { name: 'WorkOrderDate', width: 80, sortable: true },
                        { name: 'WorkOrderTime', width: 80, sortable: true },
                        { name: 'Remark', width: 100, sortable: true },
                        { name: 'del', width: 20, sortable: false, search: false,
                            formatter: function () {
                                return "<span class='ui-icon ui-icon-trash'></span>";
                            }
                        },
                        { name: 'details', width: 20, sortable: false, search: false,
                            formatter: function () {
                                return "<span class='ui-icon ui-icon-document'></span>";
                            }
                        }

                    ],
                gridview: true,
                rowNum: 10,
                rowList: [10, 20, 30],
                pager: '#pager',
                //  sortname: 'WorkOrderNo',
                viewrecords: true,
                sortorder: 'asc',
                caption: 'درخواست ها...........',
                rownumbers: true,
                beforeSelectRow: function (rowid, e) {
                    var iCol = $.jgrid.getCellIndex(e.target);
                    if (iCol == 7) {
                        //alert("rowid=" + rowid + "\nButton name: " + buttonNames[iCol]);
                        // $('img').each(function () {
                        $("#workRequestPopUp").draggable();
                        //  });

                    } else if (iCol == 8) {
                        workOrderId = rowid;

                        $("#tblRequestWorks tr").remove();
                        $("#tblRequestWorks").jqGrid({
                           // url: 'jQGridHandler.ashx?RequestWorksFill=1&workOrderId=' + workOrderId,
                            url: "PublicHandler.ashx?Request=1&workOrderId: rowid",
                            direction: "rtl",
                            pgtext: "",
                            datatype: 'json',
                            height: 250,
                            colNames: ['نام کار', 'نام واحد', 'سرپرست واحد', 'تعداد', 'پایان کار', ''],
                            colModel: [

                        { name: 'WorkName', width: 300, sortable: true },
                        { name: 'SectionName', width: 100, sortable: true },
                        { name: 'SectionSupervisor', width: 100, sortable: true },
                        { name: 'RequestCount', width: 80, sortable: true },
                        { name: 'FinishWork', width: 100, sortable: true },
                        { name: 'details', width: 20, sortable: false, search: false,
                            formatter: function () {
                                return "<span class='ui-icon ui-icon-document'></span>";
                            }
                        }

                    ],

                            rowNum: 10,
                            rowList: [10, 20, 30],

                            sortorder: 'asc',
                            caption: 'Test',
                            rownumbers: true,
                            beforeSelectRow: function (rowid, e) {
                                var iCol = $.jgrid.getCellIndex(e.target);
                                if (iCol == 6) {
                                    alert(rowid);
                                    Fill12(rowid);
                                } else if (iCol == 8) {
                                    alert(rowid);
                                    Fill12(rowid);

                                    return true;

                                    // return (iCol >= firstButtonColumnIndex) ? false : true;

                                }
                            },
                            dataType: "json"

                        });
                        //  fillRequestWorkPopup(workOrderId);

                        popup(e);
                    }
                    // prevent row selection if one click on the button
                    // return (iCol >= firstButtonColumnIndex) ? false : true;
                    return true;
                }


            });

JQGrid中的tr是委托函数吗? 我尊敬的教授可以提供帮助。谢谢所有

1 个答案:

答案 0 :(得分:1)

网址"PublicHandler.ashx?Request=1&workOrderId: rowid"似乎我错了。你的意思是"PublicHandler.ashx?Request=1&workOrderId=" + rowid吗?最好的方法是将url: "PublicHandler.ashx"postData: {Request: 1, workOrderId: rowid}一起使用。

下一个问题是使用$("#tblRequestWorks tr").remove();。您没有包含在页面上使用的任何HTML代码。如果您想销毁旧网格并在同一个地方创建一个新网格,则应使用GridUnload代替$("#tblRequestWorks tr").remove();$("#tblRequestWorks").jqGrid('GridUnload');(请参阅here和示例)。< / p>

您也可以从代码中删除dataType: "json"。 jqGrid不知道该选项,您已经使用了正确的datatype: "json"选项。

我认为您可以更改代码,以便不需要使用GridUnload。只更改第二个网格($("#tblRequestWorks"))的某些参数并使用$("#tblRequestWorks").trigger('reloadGrid', [{page: 1}]);重新加载它似乎已经足够了。

还有一句话:你应该非常小心第二个网格的id值。不允许在页面上具有id重复项。如果您无法在服务器上生成唯一ID,则可以考虑使用网格的idPrefix选项。