zoukankan      html  css  js  c++  java
  • 利用JqGrid结合ashx显示列表之一

    最近项目决定运用JqGrid列表控件显示相关数据,以前接触比较多还是easyui和Ext.Net的列表控件,文章简单写的小实例进行一个总结;

    1:引入相关的JS及CSS文件,JqGrid目前可以利用Jquery UI的皮肤:

        <link href="css/ui-lightness/jquery-ui-1.10.4.min.css" rel="stylesheet" type="text/css" />
        <link href="css/ui.jqgrid.css" rel="stylesheet" type="text/css" />
        <script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
        <script src="js/i18n/grid.locale-cn.js" type="text/javascript"></script>
        <script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>

    2:Html签标(一个用于列表显示 一个用于分页的存放):

    <body>
        <form id="form1" runat="server">
        <table id="list">
        </table>
        <div id="pager3">
        </div>
        </form>
    </body>

    3:JS内容:

        <script type="text/javascript">
            $(function () {
                $("#list").jqGrid({
                    url: 'HandlerTest.ashx',
                    datatype: "json",
                    mtype: "GET",
                    colNames: ['ID', 'UserName'],
                    colModel: [
                                { name: 'ID', index: 'ID',  20 },
                                { name: 'UserName', index: 'UserName',  80 }
    
                    ],
                    rowNum: 10,
                    loadonce: true,
                    sortname: 'ID',
                    viewrecords: true,
                    sortorder: 'desc',
                    caption: "客户列表",
                    jsonReader: {
                        repeatitems: false,
                        root: function (obj) { return obj.rows; },
                        page: function (obj) { return obj.page; },
                        total: function (obj) { return obj.total; },
                        records: function (obj) { return obj.records; }
                    }
                }).navGrid("#pager3", { edit: false, add: false, del: false });
            });
        </script>

    上面的代码可以查看jqGrid相关属性说明,其中比较重要的jsonReader,刚开始没有编写这个导致数据一直显示不出来;JqGrid对数据的显示格式要求比较严格,

    例如下面这个是一个比较准确的JSON格式显示;其属性分别代码分页的相关属性及数据的显示格式;

    {
        "page": "1",
        "total": "10",
        "records": "10",
        "rows": [
            {
                "ID": 1,
                "UserName": "Wujy"
            },
            {
                "ID": 2,
                "UserName": "踏浪帅"
            }
        ]
    }

    4:后端代码HandlerTest.ashx:

    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Script.Serialization;
    
    namespace WebApplication1
    {
        /// <summary>
        /// HandlerTest 的摘要说明
        /// </summary>
        public class HandlerTest : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
                List<ChinaUser> list = new List<ChinaUser>(){new ChinaUser() { ID=1,UserName="Wujy"},
                    new ChinaUser() { ID=2,UserName="踏浪帅"}
                };
    
                GridData model = new GridData();
                model.page = "1";
                model.records = "10";
                model.total = "10";
                model.rows = list;
    
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                string Resul = serializer.Serialize(model);
                context.Response.Write(Resul);
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    
        public class ChinaUser
        {
            public int ID { set; get; }
            public string UserName { get; set; }
        }
    
        public class GridData
        {
            public string page { set; get; }
    
            public string total { get; set; }
    
            public string records { get; set; }
    
            public List<ChinaUser> rows { get; set; }
        }
    }

    二:(补充)接下来设置复杂表头及双击响应事件;

    1:后台代码如下:

    namespace WebApplication1
    {
        /// <summary>
        /// HandlerTest 的摘要说明
        /// </summary>
        public class HandlerTest : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
                List<ChinaUser> list = new List<ChinaUser>(){new ChinaUser() { ID=1,UserName="Wujy",PassWord="2111", Address="厦门", Sex=""},
                    new ChinaUser() { ID=2,UserName="踏浪帅3",PassWord="2222", Address="厦门3", Sex="男3"},
                    new ChinaUser() { ID=2,UserName="踏浪帅4",PassWord="4444", Address="厦门4", Sex="男4"},
                    new ChinaUser() { ID=2,UserName="踏浪帅5",PassWord="25555", Address="厦门5", Sex="男5"},
                    new ChinaUser() { ID=2,UserName="踏浪帅6",PassWord="22226", Address="厦门6", Sex="男6"}
                };
    
                GridData model = new GridData();
                model.page = "1";
                model.records = "10";
                model.total = "10";
                model.rows = list;
    
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                string Resul = serializer.Serialize(model);
                context.Response.Write(Resul);
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    
        public class ChinaUser
        {
            public int ID { set; get; }
            public string UserName { get; set; }
            public string PassWord { get; set; }
            public string Sex { get; set; }
            public string Address { get; set; }
        }
    
        public class GridData
        {
            public string page { set; get; }
    
            public string total { get; set; }
    
            public string records { get; set; }
    
            public List<ChinaUser> rows { get; set; }
        }
    }

    2:前台代码如下:

    <head runat="server">
        <title></title>
        <link href="css/ui-lightness/jquery-ui-1.10.4.min.css" rel="stylesheet" type="text/css" />
        <link href="css/ui.jqgrid.css" rel="stylesheet" type="text/css" />
        <script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
        <script src="js/i18n/grid.locale-cn.js" type="text/javascript"></script>
        <script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function () {
                $("#list").jqGrid({
                    url: 'HandlerTest.ashx',
                    datatype: "json",
                    mtype: "GET",
                    colNames: ['ID', 'UserName', 'PassWord', 'Address', 'Sex'],
                    colModel: [
                                { name: 'ID', index: 'ID',  20 },
                                { name: 'UserName', index: 'UserName',  80 },
                                { name: 'PassWord', index: 'PassWord',  80 },
                                { name: 'Address', index: 'Address',  80 },
                                { name: 'Sex', index: 'Sex',  80 }
    
                    ],
                    rowNum: 10,
                    rowList: [10, 20, 50],
                    loadonce: true,
                    sortname: 'ID',
                    viewrecords: true,
                    sortorder: 'desc',
                    pager: "#pager3",
                    caption: "客户列表",
                    jsonReader: {
                        repeatitems: false,
                        root: function (obj) { return obj.rows; },
                        page: function (obj) { return obj.page; },
                        total: function (obj) { return obj.total; },
                        records: function (obj) { return obj.records; }
                    },
                    ondblClickRow: function () { SelectShow(); }
                }).navGrid("#pager3", { edit: false, add: false, del: false });
    
    
                jQuery("#list").jqGrid('setGroupHeaders', {
                    useColSpanStyle: true,
                    groupHeaders: [
                        { startColumnName: 'PassWord', numberOfColumns: 2, titleText: '<em>Info</em>' }
                  ]
                });
    
            });
    
            function SelectShow() {
                var ID = jQuery("#list").jqGrid('getGridParam', 'selrow');
                if (ID) {
                    alert("您选中的列为:" + ID);
                    $("#list").trigger("reloadGrid");
                }
                else {
                    alert("请选择");
                }
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <table id="list">
        </table>
        <div id="pager3">
        </div>
        </form>
    </body>
    </html>

    其中下面的代码就是组成复杂表头(表示从哪一列开始,并有几列在其下面,显示的头部名称):

                jQuery("#list").jqGrid('setGroupHeaders', {
                    useColSpanStyle: true,
                    groupHeaders: [
                        { startColumnName: 'PassWord', numberOfColumns: 2, titleText: '<em>Info</em>' }
                  ]
                });

    双击事件并刷新列表的代码如下ondblClickRow: function () { SelectShow(); }:

            function SelectShow() {
                var ID = jQuery("#list").jqGrid('getGridParam', 'selrow');
                if (ID) {
                    alert("您选中的列为:" + ID);
                    $("#list").trigger("reloadGrid");
                }
                else {
                    alert("请选择");
                }
            }

    通过上面几步就可以显示列表数据;

    注意:

    1:网上有很多的JSON在线验证是否正确,例如:http://jsonformatter.curiousconcept.com/ http://jsonlint.com/

    2:在访问上面的页面时可以通过网络查看器发现其请求的URL为:

    /HandlerTest.ashx?_search=false&nd=1397385085506&rows=10&page=1&sidx=ID&sord=desc 其中可以发现它自动带个几个参数,所以后台可以运用上面的参数进行分页显示;

    3:JqGrid官网实例地址:www.trirand.com/blog/jqgrid/jqgrid.html

    感谢您的阅读,坚持每天进步一点点,离成功就更近一步;希望文章对您有所帮助;

  • 相关阅读:
    RHEL6.5安装QT5.4,设置环境变量
    Oprofile安装与使用探索
    龙芯3A上V8的编译与测试
    C#穿透session隔离———Windows服务启动UI交互程序 be
    C#获取CPU与网卡硬盘序列号及Base64和DES加密解密操作类 be
    C#读取Excel转换为DataTable be
    WPF DataGrid ScrollBar Style be
    C#操作注册表 be
    C#读取Excel转为DataTable be
    C# DataTable与Excel读取与导出 be
  • 原文地址:https://www.cnblogs.com/wujy/p/3662575.html
Copyright © 2011-2022 走看看