【问题标题】:pass data to the controller in jqgrid inline editing在 jqgrid 内联编辑中将数据传递给控制器
【发布时间】:2015-05-21 12:08:59
【问题描述】:

我需要将数据从内联网格传递到控制器

我在 jqgrid 中有两列并使用了一个 editurl 属性

但是我不知道具体怎么用

这是我的 JqGrid 代码

jQuery(document).ready(function () {
        var pageWidth = $(window).width();
        var lastSel;
        $("#sortrows").setGridWidth(pageWidth);
        $('#sortrows').jqGrid('GridUnload');
        jQuery("#sortrows").jqGrid({            
            datatype: "local",
            mtype: "GET",
            hoverrows: false,
            jsonReader: { repeatitems: false, id: "Code" },
            ajaxGridOptions: { timeout: 30000 },
            colNames: PricelistHeaderColName,
            colModel: PricelistHeaderModel,
            id: 'Code',
            localReader: { id: 'Code' },
            prmNames: { id: "Code" },
            rowNum: 10,            
            rowList: [10, 20, 30],
            hidegrid: false,
            rownumbers: true,
            viewrecords: true,
            height: 'auto',
            width: pageWidth,
            scrollOffset: 0,
            gridview: true,
            autowidth:true,
            shrinkToFit: true,
            pager: '#psortrows',
            sortname: 'Description',
            autoencode: true,
            loadonce: true,
            ignoreCase: true,
            multiselect: false,
            viewrecords: true,
            sortorder: "asc",
            caption: "PriceList Headers",
            editurl: "../Header/Save",                   
        });

        $('#sortrows').jqGrid('setLabel', 'Description', "Description", { 'text-align': 'left' });

        jQuery("#sortrows").jqGrid('navGrid', '#psortrows',
            {
                edit: false,
                add: false,
                del: false,

            });



        jQuery("#sortrows").jqGrid('inlineNav', '#psortrows',
            {
                add: true,
                addtext: "Add",
                addicon:"ui-icon-plus",
                edit: true,
                editicon: "ui-icon-pencil",
                edittext: "Edit",
                save: true,
                saveicon: "ui-icon-disk",
                savetext:"Save",
                cancel: true,
                cancelicon: "ui-icon-cancel",
                canceltext: "Cancel",
                search: true,
                searchtext: "Seaech",                
            });
 jQuery("#sortrows").jqGrid('sortableRows', { items: '.jqgrow:not(.unsortable)' });

        $('#sortrows').jqGrid('filterToolbar', { searchOnEnter: false, enableClear: false, defaultSearch: "cn", stringResult: true });

        //var myData = $('#sortrows').jqGrid('getDataIDs');        
        for (var i = 0; i < myData.length; i++) {            
            //jQuery("#sortrows").addRowData(myData[i].Code, myData[i]);
            $("#sortrows").jqGrid('addRowData', i + 1, myData[i]);

        }

    });

这是我的 HTML 页面:

<div>
        <label class="col span_1_of_2lbl">
            <span style="font-family:'Segoe UI';font-size:13px;font-weight:bold;color:white ;">Environment</span>
        </label>
        <div class="drg_drop_one">
            <div style="padding-top: 13px;">
                @Html.DropDownListFor(model => model.Environment, environmentList, new SelectListItem { Value = Model.EnvironmentCode })
            </div>
        </div>
    </div>

<div style="margin-top:40px;">
        <table id="sortrows" RequestURL="@Url.Action("LoadPriceListHeadersGrid", "Header")"></table>
        <div id="psortrows"></div>
    </div>

我们是否有任何方法来获取已编辑的行属性并将下拉 UI 值附加到该编辑行对象?

或者我们可以在editrow事件中定义任何ajax方法?

请帮帮我

【问题讨论】:

  • 你如何使用内联编辑?您是直接拨打editRow 还是使用inlineNav 还是使用formatter: "actions"?您使用哪个版本和哪个分支的 jqGrid?可能性略有不同,附加参数的指定形式也不同。
  • @Oleg 我的问题已更新为我的代码供您参考。请帮我解决这个问题..
  • your previous answer 怎么样?您没有发布任何 cmets,也没有 "accepted" 答案。现在问题解决了吗,还有什么不清楚的地方吗?

标签: jquery model-view-controller jqgrid


【解决方案1】:

内联编辑中使用的基本方法是editRowsaveRowrestoreRow。方法addRow 在内部使用editRow。要发送附加数据,应指定saveRoweditRowextraparam 选项。问题是addRoweditRowsaveRow 方法将在使用inlineNav 的情况下被间接调用。因此您必须指定相应的附加参数。

如果使用free jqGrid,您只需将选项添加到jqGrid,所有内联编辑方法都会自动使用这些选项。有关详细信息,请参阅the wiki 文章。额外的 jqGrid 选项将如下所示

inlineEdit: {
    extraparam: {
        environment: function () {
            return $(".drg_drop_one select").val();
        }
    }
}

如果使用更旧版本的 jqGrid,代码应如下所示

var inlineEditOptions = {
        extraparam: {
            environment: function () {
                return $(".drg_drop_one select").val();
            }
        }
    };

jQuery("#sortrows").jqGrid('inlineNav', '#psortrows', {
    add: true,
    addtext: "Add",
    addicon:"ui-icon-plus",
    edit: true,
    editicon: "ui-icon-pencil",
    edittext: "Edit",
    save: true,
    saveicon: "ui-icon-disk",
    savetext:"Save",
    cancel: true,
    cancelicon: "ui-icon-cancel",
    canceltext: "Cancel",
    search: true,
    searchtext: "Seaech",                
    // additional parameters below:
    editParams: inlineEditOptions,
    addRowParams: {addParams: inlineEditOptions }
});

【讨论】:

  • 感谢 Oleg,这正是我所需要的……但是我们能以某种方式将整个 rowobject 传递给控制器​​吗?
  • @BaluJagua:不客气!我不确定我是否正确理解你,但你可以在 jqGrid 中定义serializeRowData 回调(而不是inlineEditOptionsinlineEdit)。回调为您提供了更改将发送到服务器的数据的最后机会。您可以使用例如serializeRowData: function (postdata) { return $.extend({}, postdata, myObject); } 的方式将标准参数(postdata 的属性)与您的自定义对象myObject 的属性结合起来。
  • 嗨奥列格,有没有可能的解决方案来获取控制器中的所有 jqgrid 行?例如,这是我在 wiindows applicaion For Each row In Me.PriceListHeadersGrid.Rows If CInt(row.Cells("Sort").Value) &lt;&gt; row.Index Then row.Cells("Sort").Value = row.Index End If Next 中的代码我可以在控制器中实现这一点..
  • @BaluJagua:对不起,我不明白你的意思。为什么在一行的内联编辑过程中可能需要获取所有行?此外,网格中的数据来自控制器。为什么需要发回相同的数据?您可能需要数据的过滤和排序ID列表吗?如果您使用loadonce: true,那么它是可能的,但实现取决于您使用的 jqGrid 版本。免费的 jqGrid 有lastSelectedData 参数,您可以通过getGridParam 获得。见the demo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多