jqGrid与动态colModel?

我必须创建一个类似于http://www.chartle.net/的数据表。

最重要的function是:

  1. 可以动态添加/删除行(完成)
  2. 可以动态添加/删除列(我该怎么做?)
  3. 更改后的colModel可以保存在数据库中以进行function修改。

这可能吗 ?

在他们的文档中搜索getColPropsetColProp : http : //www.trirand.com/jqgridwiki/doku.php?id = setColPropsetColProp

问题是,您无法动态更改jQgrid ColModel。 我看到的两个选项是:

  1. 删除整个网格并使用GridUnload使用新的ColModel(如果它可以完全更改)重新加载它:

    jQuery的(选择器).GridUnload(选择器);

  2. 加载所有可能的行并显示/隐藏您需要的行,例如使用show hide columns插件

为了动态保存它,将数据库中的网格配置数据存储为JSON就足够了。

我认为这是可能的,但还没试过..

如果您使用ASP.NET MVC:您是否尝试以编程方式将Controller中的网格添加为ViewData? 这是个主意。

这个链接可能会让你更进一步: http : //arahuman.blogspot.com/2009/06/jqgrid-using-mvc-json-and-datatable.html

希望能帮助到你

jqGrid 3.6现在支持动态显示/隐藏列,并且在他们的3.6演示页面上有一个“Column Chooser”演示。 这对你的需求来说足够好吗?

 function objedit(id, cellname, value) { var flag = 0; for (var i = 0; i < index; i++) { if (obj[i][0] == id && obj[i][1] == cellname) { obj[i] = [id, cellname, value] flag++; } } if (flag == 0) { obj[index] = [id, cellname, value]; index++; } } function columnsData(Data) { var formater = ""; var str = "["; for (var i = 0; i < Data.length; i++) { if (Data[i] == "Id") str = str + "{name:'" + Data[i] + "', index:'" + Data[i] + "', hidden: true,}"; else str = str + "{name:'" + Data[i] + "', index:'" + Data[i] + "', editable: true}"; if (i != Data.length - 1) { str = str + ","; } } str = str + "]"; return str; } //------end grid part---------- 
  bindJqGrid("SetPayInvoice", feeID, datasetID, 1); function bindJqGrid(actionController, feeID, datasetID, step) { agreementID = $("#agreementID").val(); mappingTemplateID = $("#mappingTemplateID").val(); invoiceID = $("#invoiceID").val(); var action = '/PayInvoice/' + actionController + '?agreementID=' + agreementID + '&mappingTemplateID=' + mappingTemplateID + '&invoiceID=' + invoiceID + '&feeID=' + feeID + '&datasetID=' + datasetID; var caption = "Invoice Exception"; $("#headerText").html(caption); JQGrid(caption, action); } function JQGrid(caption, action) { $("#tblGrid").jqGrid('GridUnload'); $.ajax({ url: action, dataType: "json", mtype: 'POST', success: function (result) { if (result) { if (!result.Error && result != "" && result != undefined) { $("#TotalData").html(result.records); $("#divWorkflowWrapper").show(); $("#dvFooter").show(); var colData = ""; colData = columnsData(result.column); colData = eval('{' + colData + '}'); $("#tblGrid").jqGrid({ url: action, datatype: 'json', mtype: 'GET', colNames: result.column, colModel: colData, autowidth: true, height: 550, rowNum: 25, rowList: [25, 50, 75, 100], loadtext: "Loading...", pager: '#tblGridpager', viewrecords: true, gridview: true, altRows: true, cellEdit: true, cellsubmit: "remote", cellurl: '/PayInvoice/GridSavecell', beforeSelectRow: function (rowid) { return false; }, ondblClickRow: function (rowid, iRow, iCol) { jQuery("#tblGrid").editCell(iRow, iCol, true); }, afterEditCell: function () { e = jQuery.Event("keydown"); e.keyCode = $.ui.keyCode.ENTER; edit = $(".edit-cell > *"); edit.blur(function () { edit.trigger(e); }); }, beforeSubmitCell: function (id, cellname, value, iRow, iCol) { objedit(id, cellname, value); return { id: id, cellname: cellname, value: value, iRow: iRow, iCol: iCol }; }, afterSaveCell: function (id, cellname, value, iRow, iCol) { objedit(id, cellname, value); return { id: id, cellname: cellname, value: value, iRow: iRow, iCol: iCol }; }, caption: caption }); } } else { $("#divWorkflowWrapper").hide(); $("#dvFooter").hide(); } }, error: function (xhr, ajaxOptions, thrownError) { if (xhr && thrownError) { alert('Status: ' + xhr.status + ' Error: ' + thrownError); } } }); }