zoukankan      html  css  js  c++  java
  • jqGrid动态列实现方案

    引言

    最近公司的项目中使用到jqGrid控件,官方演示程序中grid的列都是固定的。

    <script id="defined grid" type="text/javascript">
        sProgID = "VDQ009"   
        var grdMast = clone(oMagicGrid);
        grdMast.GridID = 'grid1';
        grdMast.width = 980;
        grdMast.height = 300;
        grdMast.Fun = 'Mast';
        grdMast.pager = 'grid1Pager';
        grdMast.btnadd = false;
        grdMast.sortable = true;
        grdMast.loadonce = true;
    
        grdMast.colNames = ['操作', '期別', '廠商編號', '廠商簡稱', '評分類別代碼','可改變的列...','得分'];
        grdMast.colModel = [{ name: 'acts',  45, fixed: true, sortable: false, resize: false },
                            { name: 'AccPeriod', index: 'AccPeriod',  60 },
                            { name: 'VendorID', index: 'VendorID',  80 },
                            { name: 'AbbrName', index: 'AbbrName',  100 },
                            { name: 'ScoreType', index: 'ScoreType',  80 },
                            { name: 'changingColumn', index: 'changingColumn',  80 },
                            { name: 'Score', index: 'Score',  80 }
                           ];
        grdMast.FrmQuery = 'frmQuery';
        grdMast.hideCol = ['acts'];
    </script>

    问题

    项目中有一个功能是:根据不同的筛选条件,调用同一个存储过程,但存储过程返回的结果的列数是不同的,可能有少到6列,多到20列的字段呈现。
    这样jqGrid固定列的模式就满足不了需求。而jqGrid的colNames、colModel都是不可更改的。

    解决方案

    这里通过 重新加载grid 的办法,对colNames、colModel重新赋值,就可以实现动态列的显示了。

    关键在于重新加载grid之前,需要调用 GridUnload() 这样一个方法,下面给出部分代码片段:

    jQuery("#grid1").GridUnload(); //destroy the grid.see this website:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods
            switch (sType) {
                case "VDQ02020":
                    grdMast.colNames = ['操作', '期別', '廠商編號', '廠商簡稱', '評分類別代碼', '001', '002', '003', '004', '分數'];
                    grdMast.colModel = [{ name: 'acts',  45, fixed: true, sortable: false, resize: false },
                                        { name: 'AccPeriod', index: 'AccPeriod',  60 },
                                        { name: 'VendorID', index: 'VendorID',  80 },
                                        { name: 'AbbrName', index: 'AbbrName',  100 },
                                        { name: 'ScoreType', index: 'ScoreType',  80 },
                                        { name: 'A', index: 'A',  80 },
                                        { name: 'B', index: 'B',  80 },
                                        { name: 'C', index: 'C',  80 },
                                        { name: 'D', index: 'D',  80 },
                                        { name: 'END', index: 'END',  80 }
                                       ];
                    break;
                case "VDQ02021":
                    grdMast.colNames = ['操作', '期別', '廠商編號', '廠商簡稱', '評分類別代碼', '交期得分'];
                    grdMast.colModel = [{ name: 'acts',  45, fixed: true, sortable: false, resize: false },
                                        { name: 'AccPeriod', index: 'AccPeriod',  60 },
                                        { name: 'VendorID', index: 'VendorID',  80 },
                                        { name: 'AbbrName', index: 'AbbrName',  100 },
                                        { name: 'ScoreType', index: 'ScoreType',  80 },
                                        { name: 'DUEScore', index: 'DUEScore',  80 }
                                       ];
                    break;

    然后再对grid进行加载,就可以实现项目的功能要求了。

    希望本文对你有帮助。


    作者:hangwei
    出处:http://www.cnblogs.com/hangwei/
    关于作者:专注于微软平台项目的架构设计与开发、数据库调优等工作。如有问题或建议,请多多赐教!
    版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
    如果您觉得文章对您有帮助,可以点击文章右下角“推荐”一下。您的鼓励是作者坚持原创和持续写作的最大动力!

  • 相关阅读:
    循环队列操作
    让测试人员参与软件设计
    Oracle之初探
    关注LoadRunner脚本回放日志中的Warning信息
    性能测试工具CurlLoader
    『原创』网站测试计划模板
    LoadRunner如何监控Linux下的系统资源
    搭建Linux学习环境安装CentOS5.4
    Linux下搭建Tomcat服务器
    性能测试分析之带宽瓶颈的疑惑
  • 原文地址:https://www.cnblogs.com/hangwei/p/2547533.html
Copyright © 2011-2022 走看看