每行在我们的数据库中都有一个与jqgrid行id不同的id。如何在保存行时发送此lineid?
另外,有没有办法删除一行?
到目前为止,这是我的代码:
var mydata = [
{
lineItemId: "785",
productSku:"n123",
productName:"hello there",
pieces:"123",
value:"23.00",
line:"123"
}
,
{
lineItemId: "803",
productSku:"n1234",
productName:"hello there",
pieces:"123",
value:"23.00",
line:"123"
}
];
var colNames = ['SKU','Product Name', 'Pieces','Total Value','Line Number'];
var colModel = [
{name:'productSku', index:'productSku', width:10, sorttype: 'text', editable:true},
{name:'productName', index:'productName', width:60, editable:true},
{name:'pieces', index:'pieces', width:10, sorttype: 'int', editable:true, formatter: 'integer'},
{name:'value', index:'value', width:10, sorttype: 'int', editable:true, formatter: 'number'},
{name:'line', index:'line', width:10, sorttype: 'int', editable:true, formatter: 'integer', formatoptions:{thousandsSeparator: ""}}
];
initOrdersJqGrid("orderContent", mydata, '<xsl:value-of select="$datapath/OrderId"/>', colNames, colModel, "sku", "desc");
var orderLineOptions = {
keys: true,
aftersavefunc: function (rowid, response, options) {
// only update page if orderis is nil i.e. a new order
if($('#orderidlabel').text() == "") {
log('saving order line item from order with no id yet.');
var dummy = $('<div />').html(response.responseText);
var id = dummy.find('#orderId').val();
$('#orderidlabel').text(id);
$('#orderId').val(id);
$('button[value="Save Order"]').trigger('click');
}
}
}
function initOrdersJqGrid(id, data, orderid, colNames, colModel, defaultSortColumn, defaultSortOrder) {
$("#" + id + "Table")
.jqGrid({
datatype: "local",
data: data,
colNames: colNames,
colModel: colModel,
localReader: { id: "lineItemId"},
pager: '#' + id + 'Pager',
autowidth: true,
gridview: true,
autoencode: true,
height: "auto",
forceFit: true,
shrinkToFit: true, //Width of columns should be expressed in integers which add to 100
sortname: defaultSortColumn,
sortorder: defaultSortOrder,
url: "fs/servlet/CS",
editurl: "CS?action=com.agistix.webinterface.controllers.OrderIC,saveLineItems&orderId=" + orderid
})
.jqGrid('navGrid',"#" + id + "Pager",{edit:false,add:false,del:false,search: false, refresh: false})
.jqGrid('inlineNav',"#" + id + "Pager", { addParams: { addRowParams: orderLineOptions }, editParams: orderLineOptions});
}
答案 0 :(得分:2)
如果您使用datatype: "local"
,则data
参数指定的输入数据数组中的项应具有附加属性id
,该值指定{的值{1}}网格的每一行(id
)的属性。如果您希望使用另一个rowsid属性名称,可以使用<tr>
来指定它。例如,localReader
选项通知jqGrid从localReader: { id: "Id" }
属性获取行(rowid)的id
属性的值。如果您的数据项目应如下所示
Id
{
Id: 76453
productSku:"n123",
productName:"hello there",
pieces:"123",
value:"23.00",
line:"123"
}
属性的值必须是唯一的。
如果网格中已有一些列包含来自某个数据库表的id,则不需要使用id
属性添加相同的值。而不是你可以只在列中id
。 jqGrid只允许将key: true
放在key: true
的一个项中。
行ID的一个常见问题是重要的是要理解。如果您需要在页面上放置更多的网格,或者如果您需要将Subgrid用作网格,那么您仍然可能遇到一个问题。数据库中的ID在表中是唯一的,但是在多个表中可以具有相同的ID。另一方面,HTML元素的ID(用于行的包含colModel
元素)在整个页面上必须是唯一的。
要解决此问题,可以使用jqGrid的<tr>
选项。例如,数据库中有idPrefix
列用于数据库中表的主键。在这种情况下,您将整数作为rowid的原生ID。值可以是第一个网格中的INT IDENTITY
,3
,5
。按使用情况40
,分配给行(至idPrefix: "g1_"
元素)的ID将为<tr>
,"g1_3"
,"g1_5"
。因此,"g1_40"
对第一个网格的使用和另一个值如idPrefix: "g1_"
可以解决潜在的id重复问题。重要的是jqGrid会自动从rowid中删除前缀idPrefix: "g2_"
,如果它向服务器发送一些数据(例如,如果你在网格中使用编辑)。人们可以区分“id”和“rowid”这两个名字。 “rowid”将始终为,前缀为。您可以使用idPrefix
函数来剪切前缀。