jqGrid + JSON + WebService 完整示例

真没找到这样的例子,于是自已写了个,分享出来。

第一步,首先在WebService上,添加[System.Web.Script.Services.ScriptService]属性标签,让WebServer支持JSON.

namespace jqGrid_JSON_WebService_Sample.Services
{
/// <summary>
/// Summary description for WebServiceGrid
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class WebServiceGrid : System.Web.Services.WebService
{
}
}

接着,添加ajax调用的后端代码,获取数据,返回JSON对象:

        [WebMethod]
public object Grid(bool? _search, string nd, int page, int rows, string sidx, string sord, string searchField, string searchString, string searchOper)
{
int count;
var data = dc.Query<Issue>(string.IsNullOrWhiteSpace(searchField) ? null : new string[] { searchField }, new string[] { searchOper }, new object[] { searchString }, null, new string[] { string.IsNullOrWhiteSpace(sidx) ? "IssueID" : sidx }, new string[] { sord }, (page - 1) * rows, rows, out count);
return (new
{
total = Math.Ceiling((float)count / (float)rows),
page = page,
records = count,
rows = data.Select(item => new { id = item.IssueID, cell = new object[] { item.IssueID, item.Title, item.Description, item.Progress, item.CreateTime, item.Locked } })
});
}

第二步,添加前台页面,首先添加各种的js,css引用,然后添加jqGrid所需的<div>和js代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebFormGrid.aspx.cs" Inherits="jqGrid_JSON_WebService_Sample.WebFormGrid" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
<link href="/Content/smoothness/jquery-ui-1.8.17.custom.css" rel="stylesheet" type="text/css" />
<link href="/Content/Site.css" rel="stylesheet" type="text/css" />
<script src="/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery-ui-1.8.11.min.js" type="text/javascript"></script>
<link href="/Content/ui.jqgrid.css" rel="stylesheet" type="text/css" />
<script src="/Scripts/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="/Scripts/jquery.jqGrid.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function ()
{
$("#list #grid").jqGrid(
{
url: '/Services/WebServiceGrid.asmx/Grid',
mtype: 'POST',
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
serializeGridData: function (postData)
{
if (postData.searchField === undefined) postData.searchField = null;
if (postData.searchString === undefined) postData.searchString = null;
if (postData.searchOper === undefined) postData.searchOper = null;
return JSON.stringify(postData);
},
jsonReader:
{
root: "d.rows",
page: "d.page",
total: "d.total",
records: "d.records"
},
datatype: "json",
colNames:
[
'IssueID',
'Title',
'Description',
'Progress',
'CreateTime',
'Locked'
],
colModel:
[
{ name: 'IssueID', width: 100, index: 'IssueID' },
{ name: 'Title', width: 100, index: 'Title' },
{ name: 'Description', width: 300, index: 'Description' },
{ name: 'Progress', width: 150, index: 'Progress' },
{ name: 'CreateTime', width: 100, index: 'CreateTime', formatter:'date', sorttype:'datetime', datefmt:'M d h:i' },
{ name: 'Locked', width: 100, index: 'Locked' }
],
rowNum: 10,
rowList: [10, 15, 20, 25, 40],
pager: '#pager',
viewrecords: true,
sortorder: "desc",
width: 900,
height: 240,
});

$("#list #grid").jqGrid('navGrid', '#pager', { edit: false, add: false, del: false });
});
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div id="list">
<table id="grid">
</table>
<div id="pager">
</div>
</asp:Content>

注意jqGrid函数据前面的部分代码:

                url: '/Services/WebServiceGrid.asmx/Grid',
mtype: 'POST',
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },

通过url指定WebService方法,mtype指定使用POST方法,contentType指定为json,这样WebService才会返回json对象。

可是,返回的数据是放在一个属性名为d的对象里,所以还要添加 jsonReader,来作数据映射:

 jsonReader:
{
root: "d.rows",
page: "d.page",
total: "d.total",
records: "d.records"
},

最后,为了保证查询时能够POST正确的参数,还要对POST的参数值进行检查:

                serializeGridData: function (postData)
{
if (postData.searchField === undefined) postData.searchField = null;
if (postData.searchString === undefined) postData.searchString = null;
if (postData.searchOper === undefined) postData.searchOper = null;
return JSON.stringify(postData);
},

到此,一个完整的jqGrid示例就完成了,成果展示:


完整示例代码:jqGrid_JSON_WebService_Sample.zip

汗!数据库文件还有版本问题,低版本的数据库文件在这下载, 低版本数据库文件的完整示例代码:jqGrid_JSON_WebService_Sample(v2).zip

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react] 在react中页面重新加载时怎样保留数据?

[react] 在react中页面重新加载时怎样保留数据&#xff1f; 使用浏览器localstorage来保存应用程序的状态 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Sublime Text 3 代码格式化插件推荐 CodeFormatter

CodeFormatter CodeFormatter has support for the following languages: * PHP - By PHP_Beautifier* JavaScript/JSON - By JSBeautifier* HTML - By JSBeautifier* CSS - By JSBeautifier* Python - By PythonTidy (only ST2) 支持&#xff0c;php,js,html,css 默认快捷键 …

[react-router] React-Router 4中<Router>组件有几种类型?

[react-router] React-Router 4中<Router>组件有几种类型&#xff1f; HashRouter&#xff1a;老浏览器的history,主要通过hash来实现&#xff0c;对应createHashHistory()BrowserRouter&#xff1a;高版本浏览器,通过html5里面的history&#xff0c;对应createBrowserH…

交叉编译和交叉调试环境搭建及使用

From: http://blog.chinaunix.net/uid-25119314-id-226230.html 1. 交叉编译器 1.1 交叉编译器介绍 在一种计算机环境中运行的编译程序&#xff0c;能编译出在另外一种环境下运行的代码&#xff0c;我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说&…

struts2文件上传中,如何限制上传的文件类型

这个在struts2的doc中已经有所说明&#xff0c;但是说得并不详细,而且他给的例子是有错误的&#xff0c;下面我将列出文件上传并限制类型的具体步骤struts2版本是2.1.6struts2是根据contentType来限制的&#xff0c;并不是文件的扩展名比如我想仅上传image/png,image/gif,image…

CGContextRef CIImageRef详解

第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate函数创建CGImageRef 然后把CGImageRef放到CGContext中去编辑 第三种 用CGImageCreateCopy 或者 CGImageCreateCopyWithColorSpace 函数拷贝 CGImageRef CGImageCreate ( …

[react] react怎么拿到组件对应的DOM元素?

[react] react怎么拿到组件对应的DOM元素&#xff1f; 在Class组件中 import React from react; class CComponent extends React.Component {refDiv React.createRef();componentDidMount () {console.log(this.refDiv.current)}render () {return <div><div class…

linux缩小lv发生文件系统错误

众所周知&#xff0c;linux lvm 扩大lv是先扩大lv&#xff0c;然后再扩大文件系统&#xff0c;所以有的人就认为缩小lv也是先缩小lv,再缩小文件系统&#xff0c;当然博主刚开始也那么认为&#xff0c;导致lvresize 以后&#xff0c;lv的大小小于文件系统大小而无法挂载&#xf…

Fedora12上编译安装gdb-7.2

在Fedora12上编译安装gdb-7.2&#xff1a;编译安装gdb和gdbserver 1. 下载gdb7.2: ftp://sourceware.org/pub/gdb/releases/gdb-7.2a.tar.bz2 2. 编译安装gdb 2.1 解压&#xff1a; [zcm~ #1]$cd /mnt/hgfs/opensource/ [zcmopensource #2]$ls a52dec ffmpeg-1.2…

[react-router] react的路由和普通路由有什么区别?

[react-router] react的路由和普通路由有什么区别&#xff1f; React路由是前端的路由&#xff0c;普通路由指的是后端的路由React路由不管是hash还是browser的模式&#xff0c;都是在响应了hash/browser的change之后&#xff0c;再变更页面的DOM结构&#xff0c;由于是单页应…

UITableView 性能优化

网络图片异步加载&#xff0c;SDWebImage。文字直接 drawInRect/drawAtPoint 绘制&#xff0c;参考 ABTableViewCell&#xff0c;AdvancedTableViewCells。本地图片也可以直接绘制&#xff0c;或者用 CALayer 来添加显示。cell 重用机制。cell 内容尽量避免透明效果。如非必要&…

Hello Views之Spinner(yaozq翻译,仅供参考)

Spinner是一种类似于下拉列表的widget。 在这个教程中&#xff0c;你将创建一个简单的用于展示星球列表的spinner组件。当选择列表中的一项时&#xff0c;将会弹出一个表示所选项的toast信息。下面是具体步骤&#xff1a; 1&#xff0c;新建一个名为HelloSpinner的项目。 2&…

error PRJ0003 : 生成“cl.exe”时出错 解决方案

本人已经安装了VS2010&#xff0c;但是同事给的项目是用VC2008写的&#xff0c;用到几个lib文件&#xff0c;路径也都正确&#xff0c;但就是无法正确解析&#xff0c;所以我怀疑是lib库生成的环境问题。所以考虑装个VC2008。但是我又不敢直接安装VS2008&#xff0c;怕破坏VS20…

[react] 简要描述下你知道的react工作原理是什么?

[react] 简要描述下你知道的react工作原理是什么&#xff1f; 我理解的核心部分&#xff1a; 通过虚拟DOM表达真实DOM通过数据驱动更新虚拟DOM进而更新真实DOM&#xff08;MVVM&#xff09;有一套完整并且合理的 DOM Diff 算法&#xff08;现在 React 17 是基于 lane 架构来调…

Bitmap 之 getPixels() 的 stride

学习Graphics中遇到位图(Bitmap)中getPixels()方法&#xff0c;对该方法的用法大体理解&#xff0c;但对其中的stride参数却不明白具体的用法以及用意&#xff0c;现记述过程如下&#xff1a; getPixels()方法的用处为获取位图(Bitmap)中的像素值(颜色值)&#xff0c;存入类型为…

i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例

From: http://blog.csdn.net/leo115/article/details/8101541 我们通常在写for循环 的时候&#xff0c;要实现变量 i 的自增 1 &#xff1b;往往会在i 和i中随便挑一种写&#xff0c;对于i和i的理解&#xff0c;我们往往停留在返回的值的不同&#xff0c;其实i与i在实现效率上…

day②:字典的fromkeys方法

start##fromkeys方法本身就是把所有的key都指向同一个对象了>>> cdict.fromkeys(range(5),[]) >>> c{0: [], 1: [], 2: [], 3: [], 4: []}>>> c[0].append({"B":{123}})>>> c{0: [{B: set([123])}], 1: [{B: se…

[react-router] React-Router的实现原理是什么?

[react-router] React-Router的实现原理是什么&#xff1f; 1.react-router依赖基础 - history&#xff0c;是一个独立的第三方js库&#xff0c;可以用来兼容在不同浏览器、不同环境下对历史记录的管理&#xff0c;拥有统一的API。具体来说里面的history分为三类: HashRouter…

Linux Bash Shell入门教程

BASH 的基本语法 最简单的例子 —— Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定&#xff08;与 C 语言的异同&#xff09; BASH 中的基本流程控制语法 函数的使用 2.1 最简单的例子 —— Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是…

[react] 请描述下事件在react中的处理方式是什么?

[react] 请描述下事件在react中的处理方式是什么&#xff1f; 所有时间都挂载到 document 上&#xff0c;然后捕获对应的 dom。 类似事件委托 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录…