jqGrid-编辑数据

jqGrid-编辑数据,jqgrid,Jqgrid,我对jquery和jqgrid很陌生。我使用ASP.NETWebForms。我能够在prom服务器上获取一些数据并在网格中显示。我使用PageMethods从服务器获取数据。通常我的代码是 function CreateGrid(){ $("#sestGrid").jqGrid({ datatype: GetData, //toolbar: [true, "top"], colNames: ['Name', 'Age'],

我对jquery和jqgrid很陌生。我使用ASP.NETWebForms。我能够在prom服务器上获取一些数据并在网格中显示。我使用
PageMethods
从服务器获取数据。通常我的代码是

function CreateGrid(){
    $("#sestGrid").jqGrid({
        datatype: GetData,
        //toolbar: [true, "top"],
        colNames: ['Name', 'Age'],
        colModel: [
            { name: 'Name', index: 'Name', width: 170, align: 'left',
              sortable: false, key: true },
            { name: 'Age', index: 'Age', width: 40, align: 'center',
              sortable: false, editable: true },
        ],
        ondblClickRow: function () {
            var row_id = $("#sestGrid").getGridParam('selrow');
            $('#sestGrid').editRow(row_id, true);
        }
    });
}

function GetData() {
    PageMethods.GetSestevalniStevecData(GotData);
}

function GotData (data) {
    $("#sestGrid").clearGridData(false);
    for (var j = 0; j <= data.length; j++)
        $("#sestGrid").jqGrid('addRowData', j + 1, data[j]);
}
函数CreateGrid(){ $(“#sestGrid”).jqGrid({ 数据类型:GetData, //工具栏:[正确,“顶部”], colNames:['Name','Age'], colModel:[ {name:'name',index:'name',宽度:170,对齐:'left', 可排序:false,key:true}, {名称:'Age',索引:'Age',宽度:40,对齐:'center', 可排序:false,可编辑:true}, ], ondblClickRow:函数(){ var row_id=$(“#sestGrid”).getGridParam('selrow'); $('#sestGrid').editRow(row#id,true); } }); } 函数GetData(){ GetSestevalniStevecData(GotData); } 函数GotData(数据){ $(“#sestGrid”).clearGridData(false);
对于(var j=0;jjqGrid被设计为与ajax服务一起使用。因此,如果用户更改某些行的数据,那么这些更改将被发送到服务器:发送到您通过jqGrid参数
editurl
配置的URL。因此,实现行编辑的最简单方法是在其中包含ASMX web服务或WCF服务网站。是否使用ASP.NET WebForms、ASP.NET MVC或纯HTML作为网页并不重要。因此,只需选择您喜欢的技术并将相应的网页添加到您的网站即可

ASMX或WCF应该有一个签名如下的方法

public string MyDataEdit (string Age, string oper, string id)
(有关更多信息,请参见旧答案)。如果是添加操作,该方法应返回新添加项的id(在您的示例中为
名称


还有一个小注释。您可以将
ondblClickRow
函数的定义从
function()
更改为
function(row\u id)
并删除使用的行
getGridParam('selrow')

jqGrid设计用于与ajax服务一起使用。因此,如果用户更改某些行的数据,则更改将发送到服务器:发送到您通过jqGrid参数
editurl
配置的URL。因此,实现行编辑的最简单方法是在您的系统中包含ASMX web服务或WCF服务b站点。页面使用ASP.NET WebForms、ASP.NET MVC还是纯HTML并不重要。因此,只需选择您喜欢的技术并将相应的页面添加到您的站点即可

ASMX或WCF应该有一个签名如下的方法

public string MyDataEdit (string Age, string oper, string id)
(有关更多信息,请参见旧答案)。如果是添加操作,该方法应返回新添加项的id(在您的示例中为
名称


还有一个小注释。您可以将
ondblClickRow
函数的定义从
function()
更改为
function(row\u id)
,并删除使用的行
getGridParam('selrow')

我使用了您的示例,对其进行了一些更改:

ondblClickRow: function (rowid) {
if (rowid && rowid != lastsel) {
    changedRows.push(rowid); //keep row id
    jQuery('#jqgrid').editRow(rowid, true);
}
}
在“保存”按钮下,单击事件:

$.each(changedRows, function () {
    var row = $("#jqgrid").getRowData(this);
    var Id = row['ID'];
    var price = $(row['Price']).val(); //this is an input type
});

HTH某人:)

我用了你的例子,对它做了一些修改:

ondblClickRow: function (rowid) {
if (rowid && rowid != lastsel) {
    changedRows.push(rowid); //keep row id
    jQuery('#jqgrid').editRow(rowid, true);
}
}
在“保存”按钮下,单击事件:

$.each(changedRows, function () {
    var row = $("#jqgrid").getRowData(this);
    var Id = row['ID'];
    var price = $(row['Price']).val(); //this is an input type
});

有人:)

Oleg,感谢您的回复!您的帖子帮助我提高了对jqgrid的了解。因此,如果我没记错的话,每一行在编辑后都会发布到服务器上。是否可以编辑几行,然后单击按钮将所有行发布到服务器上?@user521379:更确切地说,jqgrid支持三种主要的编辑类型:表单编辑、内联编辑编辑和单元格编辑。内联编辑和单元格编辑支持本地编辑。因此,可以在jqGrid本地编辑数据。仅表单编辑支持删除和插入行。例如,您可以实现本地内联编辑,并一次性发布修改的行。问题是,在发布多个修改行的情况下,您必须导入手动删除数据。此外,在多用户环境中,实现错误处理要复杂得多。我建议发布一行。是否有更简单的选项从网格中获取更改的数据?现在我将其保存在自定义数组中,这是一种非常原始且不太可靠的解决方案。网格是否有类似GetChangedRows()的方法??有没有比我更好的存储更改行的解决方案?谢谢!@user521379:没有。jqGrid只有正在编辑的当前行的数据。因此,如果您确实需要一次对多行执行编辑,您必须手动执行许多操作。跟踪所有修改的行,您可以在
ondblClickRow中自己完成处理程序,但这只是问题的起点。因此,如果确实需要,请执行此操作。好的。通常网格支持批量编辑。如果用户需要快速编辑数据,我无法在编辑每行后重新加载网格数据。在某些情况下,我必须加载200或300行。我很惊讶此插件不支持rt此功能…还是我遗漏了什么?如果用户决定取消编辑怎么办?我有点迷路了!!Oleg谢谢你的回复!!!你有什么想法吗?Oleg,谢谢你的回复!你的帖子帮助我提高了我的jqgrid知识。所以,如果我没弄错,每一行在编辑后都会发布到服务器上。是否可以只需点击一个按钮即可编辑几行并将其全部发布到服务器?@user521379:更确切地说,jqGrid支持三种主要编辑类型:表单编辑、内联编辑和单元格编辑。内联编辑和单元格编辑支持本地编辑。因此,数据可以在jqGrid本地编辑。只有表单编辑支持删除和插入行。您可以例如,可以实现本地内联编辑并立即发布修改后的行。问题是,如果发布许多修改后的行,您必须手动实现。此外,在多用户环境中,实现错误处理要复杂得多。我建议发布一行。有没有更简单的选项更改了网格中的数据?现在我