首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSON数据中的显示jQGrid未设置警报

JSON数据中的显示jQGrid未设置警报
EN

Stack Overflow用户
提问于 2013-02-02 14:00:14
回答 1查看 2.1K关注 0票数 0

我需要从服务器加载一个JSON,我想让用户点击并编辑这个值。

但是当他们编辑时,它不应该调用服务器。我的意思是我不会马上更新。所以我不想要社论。所以我尝试了'ClientArray‘,但它仍然显示Url没有设置警报框。但是当用户单击“添加注释项”按钮时,需要所有已编辑的值,此按钮将触发AddSelectedItemsToSummary()以保存在服务器中的值。

MVC HTML脚本

代码语言:javascript
复制
<div>
<table id="persons-summary-grid"></table>
<input type="hidden" id="hdn-deptsk" value="2"/>
<button id="AddSelectedItems" onclick="AddSelectedItemsToSummary();" />
</div>


$(document).ready(function(){
   showSummaryGrid(); //When the page loads it loads the persons for Dept
});

JSON数据

代码语言:javascript
复制
    {"total":2,"page":1,"records":2,
     "rows":[{"PersonSK":1,"Type":"Contract","Attribute":"Organization
           Activity","Comment":"Good and helping og"},
          {"PersonSK":2,"Type":"Permanant","Attribute":"Team Management",
          "Comment":"Need to improve leadership skill"}
    ]}

jQGRID代码

代码语言:javascript
复制
var localSummaryArray;

function showSummaryGrid(){

 var summaryGrid = $("#persons-summary-grid");

 // doing this because it is not firing second time using .trigger('reloadGrid')
 summaryGrid.jqGrid('GridUnload'); 
 var deptSk = $('#hdn-deptsk').val();
 summaryGrid.jqGrid({
 url: '/dept/GetPersonSummary',
 datatype: "json",
 mtype: "POST",
 postData: { deptSK: deptSk },
 colNames: [
            'SK', 'Type', 'Field Name', 'Comments'],
colModel: [
           { name: 'PersonSK', index: 'PersonSK', hidden: true },
           { name: 'Type', index: 'Type', width: 100 },

           { name: 'Attribute', index: 'Attribute', width: 150 },
           { name: 'Comment', index: 'Comment', editable: true, 
                    edittype: 'textarea',  width: 200 }
         ],

cellEdit: true,
cellsubmit: 'clientArray',
editurl: 'clientArray',
rowNum: 1000,
rowList: [],        
pgbuttons: false,     
pgtext: null,         
viewrecords: false,    
emptyrecords: "No records to view",
gridview: true,
caption: 'dept person Summary',
height: '250',

jsonReader: {
    repeatitems: false

},
loadComplete: function (data) {

        localSummaryArray= data;
        summaryGrid.setGridParam({ datatype: 'local' });
        summaryGrid.setGridParam({ data: localSummaryArray});
    }

});
)

按钮单击函数

代码语言:javascript
复制
function AddSelectedItemsToSummary() {

 //get all the items that has comments 
 //entered using cell edit and save only those.
 // I need to prepare the array of items and send it to MVC controller method
 // Also need to reload summary grid

}

有人能帮上忙吗?,为什么我要得到那个URL没有设置错误?

编辑:

在loadComplete更改后,此代码正在工作。在它显示没有URL设置警告之前

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-03 09:20:29

我不明白你描述的细胞编辑的问题。此外,您还编写了“当用户单击一行中的+图标时,我需要编辑的值”。"+“图标在哪里?你是说"trash.gif“图标吗?如果您想使用单元格编辑,那么在单击行上的图标时,您是如何想象的呢?单击"trash.gif“图标时,哪个单元格应该开始编辑?您可以开始使用"trash.gif“图标editCell方法编辑其他单元格,但我不认为用户会感到舒服,因为从用户的角度来看,他将在单击另一个单元格时开始编辑另一个单元格。我好像很不舒服。可能您想要实现内联编辑

代码中一个明显的错误是showSummaryGridRemoveFromSummary中的使用。函数RemoveFromSummary 创建 jqGrid,而不仅仅是填充它。因此,人们应该只称它一次,。要刷新网格体,您应该调用$("#persons-summary-grid").trigger("refreshGrid");。不要使用postData: { deptSK: deptSk },您应该使用

代码语言:javascript
复制
postData: { deptSK: function () { return $('#hdn-deptsk').val(); } }

在这种情况下,触发refreshGrid就足够了,它将从'#hdn-deptsk'向服务器发送当前值。有关详细信息,请参阅答案

更新了:我无法重现您描述的问题,但我准备了演示,它可以满足您的需要(如果我正确理解您的需求)。您可能需要的代码中最重要的部分如下

代码语言:javascript
复制
$("#AddSelectedItems").click(function () {
    var savedRow = summaryGrid.jqGrid("getGridParam", "savedRow"),
        $editedRows,
        modifications = [];
    if (savedRow && savedRow.length > 0) {
        // save currently editing row if any exist
        summaryGrid.jqGrid("saveCell", savedRow[0].id, savedRow[0].ic);
    }
    // now we find all rows where cells are edited
    summaryGrid.find("tr.jqgrow:has(td.dirty-cell)").each(function () {
        var id = this.id;
        modifications.push({
            PersonSK: id,
            Comment: $(summaryGrid[0].rows[id].cells[2]).text() // 2 - column name of the column "Comment"
        });
    });
    // here you can send modifications per ajax to the server and call
    // reloadGrid inside of success callback of the ajax call
    // we simulate it by usage alert
    alert(JSON.stringify(modifications));
    summaryGrid.jqGrid("setGridParam", {datatype: "json"}).trigger("reloadGrid");
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14662632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档