解决方法
我最近广泛使用了我正在为CB Richard Ellis(我的雇主)工作的原型项目的jqgrid。有很多方法来填充jqgrid,如
documentation所示:(请参阅“检索数据”节点)。
目前,我做一个返回一个json字符串的服务调用,当被评估时,给我一个包含以下内容的对象:
> ColumnNames:string []
> ColumnModels:object [](每个对象都有属性“name”,“index”和“sortable”)
> Data:object [](每个对象都具有与列模型中的名称相匹配的属性)
> TotalRows:int
在我的成功回调中,我手动创建了这样的jqgrid:(“data”是我在评估返回的json字符串时得到的对象)。
var colNames = data.ColumnNames; var colModel = data.ColumnModels; var previewData = data.PreviewData; var totalRows = data.TotalRows; var sTargetDiv = userContext[0]; // the target div where I'll create my jqgrid $("#" + sTargetDiv).html("<table cellpadding='0' cellspacing='0'></table>"); var table = $("#" + sTargetDiv + " > table"); table.jqGrid({ datatype: 'local',colNames: colNames,colModel: colModel,caption: 'Data Preview',height: '100%',width: 850,shrinkToFit: false }); for (var row = 0; row < previewData.length; ++row) table.addRowData(row,previewData[row]);
所以你可以看到我手动填充数据。有一种以上的服务器错误。有一个逻辑错误,您可以在json字符串中作为属性返回,并在尝试创建jqgrid之前检查(或以每行为单位)。
if (data.HasError) ...
或者按行排列
for (var row = 0; row < previewData.length; ++row) { if (previewData[row].HasError) // Handle error,display error in row,etc ... else table.addRowData(row,previewData[row]); }
如果您的错误是服务器上的未处理的异常,则可能需要在异步调用时发出错误回调。在这种情况下,您的成功回调(大概)正在创建您的jqgrid将不会被调用。
这当然适用于手动填充jqgrid,这只是可用的许多选项之一。如果您将jqgrid直接连接到服务调用或函数来检索数据,那么这其实是完全不同的。
在文档页面上,查看“基本网格”>活动在那里你会看到可能派上用场的“loadError”事件。