jquery,jquery-ui,jqgrid开发要点

7 篇文章 0 订阅
2 篇文章 0 订阅

逐步记录前端使用这些框架开发的一些要点。

jqgrid的使用:

1、在html里面插入:

        <div>
            <table id="listTaskManager"></table>
            <div id="pagerTaskManager"></div>
        </div>

上面是表格,下面是分页器

2、js里面:

            $("#listTaskManager").jqGrid({
                url: "./test.aspx?method=Get",//ajax请求的地址
                datatype: "json",
                mtype: "POST",
                height: "auto",//高度自适应
                colNames: ['IdNo', '任务类型', 'KeyId', '计划执行时间', 'ResultCode', '执行结果', '是否有效', '修改时间', '创建时间', 'InfoJson'],//colName为在表格上显示的列明
                colModel: [//字段,注意大小写要跟数据库的大小写相符
                    { name: 'IdNo', index: 'IdNo', key: true, hidden: true },
                    {
                        name: 'Type', index: 'Type', width: 100, align: "center"
                        , edittype: "select", editoptions: { value: "<%= TaskTypeEnumsString %>" }
   		                , formatter: "select", formatoptions: { value: "<%= TaskTypeEnumsString %>" }
                    },//注意配置editoptions和formatoptions,这个是请求了后端页面的一个变量,这个变量会将枚举组装出来,这个字段是一个object将会根据key来显示对应的value,这里应该填入的是一个值对串,比如1:a;2:b;3:c,如果从数据库取到的是1,则这里会显示a,以此类推,下面会将需要的后端代码也贴出来
                    { name: 'KeyId', index: 'KeyId', width: 150, align: "center" },
                    { name: 'Schedule', index: 'Schedule', width: 150, align: "center", sorttype: "date", formatter: "date", formatoptions: { srcformat: 'Y-m-d H:i:s', newformat: 'Y-m-d H:i:s' } },
                    { name: 'ResultCode', index: 'ResultCode', width: 20, align: "center", hidden: true },
                    { name: 'ResultMsg', index: 'ResultMsg', width: 200, formatter: taskResultMsgFormatter, align: "center" },
                    { name: 'Enabled', index: 'Enabled', width: 60, formatter: taskIsEnabledFormatter, align: "center" },
                    { name: 'ModifyTime', index: 'ModifyTime', width: 150, align: "center", sorttype: "date", formatter: "date", formatoptions: { srcformat: 'Y-m-d H:i:s', newformat: 'Y-m-d H:i:s' } },
                    { name: 'CreateTime', index: 'CreateTime', width: 150, align: "center", sorttype: "date", formatter: "date", formatoptions: { srcformat: 'Y-m-d H:i:s', newformat: 'Y-m-d H:i:s' } },
                    { name: 'InfoJson', index: 'InfoJson', hidden: true }
                ],
                multiselect: true,//可否多选
                rowNum: 20,//默认每页多少条
                rowList: [20, 50, 100],//选择每页显示多少条
                pager: '#pagerTaskManager',//指定分页器
                sortname: 'Schedule',//排序指定的字段
                viewrecords: true,//显示总共有多少条记录
                sortorder: "desc",//排序,desc是从大到小(降序),asc是从小到大(升序)
                caption: "任务管理列表",//表格的title
                gridComplete: function (){
                    
                },
                beforeProcessing: function (data,status,xhr) {
                    ajaxResponseResult(data);
                }
            });
            jQuery("#listTaskManager").jqGrid('navGrid', '#pagerTaskManager', { edit: false, add: false, del: false, search: false });//配置分页

3、后端取值对

    private string _taskTypeEnumsString;
    public string TaskTypeEnumsString 
    {
        get 
        {
            if (string.IsNullOrEmpty(_taskTypeEnumsString)) 
                _taskTypeEnumsString = EnumBase.GetEnumValAndDesc<Enums.TaskType>();
            return _taskTypeEnumsString;
        }
    }
        /// <summary>
        /// 把枚举的值和描述串起来,比如:
        /// 1:a;2:b;3:c
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static string GetEnumValAndDesc<T>() 
        {
            string resultStr = "";
            List<string> reslut = new List<string>();

            T obj = default(T);
            if (obj != null && obj.GetType().IsEnum) 
            {
                foreach (int s in Enum.GetValues(typeof(T))) 
                {
                    string strName = Enum.GetName(typeof(T), s);
                    string desc = "";
                    MemberInfo[] memInfo = typeof(T).GetMember(strName);
                    if (memInfo != null && memInfo.Length > 0)
                    {
                        object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
                        if (attrs != null && attrs.Length > 0)
                            desc = ((DescriptionAttribute)attrs[0]).Description;
                    }
                    reslut.Add(s + ":" + desc);
                }
            }

            foreach (string str in reslut) 
                resultStr += (str + ";");

            if (!string.IsNullOrEmpty(resultStr)) 
            {
                if(resultStr.LastIndexOf(';')==(resultStr.Length-1))
                    resultStr = resultStr.Substring(0, resultStr.Length - 1);
            }

            return resultStr;
        }

4、formatter

就是让字段不直接显示值,而是显示经过包装的一个数据

        function taskResultMsgFormatter(cellvalue, options, rowdata)
        {
            return rowdata["ResultMsg"];//或者rowdata.ResultMsg
        }
cellvalue是当前字段的取值,rowdata则可以取到当前行的所有值

5、对jqgrid使用搜索,先用post方式请求后台让后台修改数据库,再让grid重新请求一次

            $("#btnDisabled").click(function () {
                var s = jQuery("#listTaskManager").jqGrid('getGridParam', 'selarrrow');//这个方法可以取出勾选的项目
                if (s == "") return;

                var url = "AldsTaskManager.aspx?method=Disabled";
                $.post(url, { idNos: s.toString() })//post数据,注意:1、变量名可以不使用引号;2、s必须toString()
                .done(function (myJsonResult) {
                    var data = $.evalJSON(myJsonResult);// 注意,改为:var data = JSON.parse(myJsonResult);
                    ajaxResponseResult(data);
                    if (data.IsSuccess) {
                    }
                    if (data.SuccessCount && data.SuccessCount > 0)
                        $("#listTaskManager").trigger("reloadGrid");//结束之后重新载入表格即可
                })
                .fail(function (data) {
                    ajaxResponseResult(data);
                })
                .always(function (myJsonResult) {
                });
            });

6、对jqgrid改变url、参数、post参数再发起请求

$("#btnFilter").click(function () {
                $("#listTaskManager").setGridParam({
                    url: "AldsTaskManager.aspx?method=Get",
                    page: 1,
                    postData: {
                        "isFilter": "true",
                        "txtFilter": $("#txtFilter").val(),
                        "DropTypeSelector": $("#<%=DropTypeSelector.ClientID%>").val(),
                        "dropTimeTypeSelector": $("#dropTimeTypeSelector").val(),
                        "inputDateText": $("#inputDateText").val(),
                        "dropTimeSegmentSelector": $("#dropTimeSegmentSelector").val()
                    }
                }).trigger("reloadGrid");
                
            });

7、分页的处理

jqgrid在请求数据的时候,会自动带一些get的参数过来,比如:

        // 分页
        string _page = Request["page"]; // get the requested page
        string _rows = Request["rows"]; // get how many rows we want to have into the grid
        string _sidx = Request["sidx"]; // get index row - i.e. user click to sort
        string _sord = Request["sord"]; // get the direction
page是请求的是第几页,rows是要请求多少行,sidx是排序的字段,比如如果是按CreateTime排序,那么sidx的值就为CreateTime,sord排序方式,desc为从大到小(记得d就是大),asc则为从小到大

int page = string.IsNullOrEmpty(_page) ? 1 : int.Parse(_page);//page,如果这个值为空,则设为1
        int rows = string.IsNullOrEmpty(_rows) ? 100 : int.Parse(_rows);//要请求的行数,如果为空,则设为100
        if (rows > 200)//如果传过来的值大于200,则设为200,让最大的行数不要超过200
        {
            rows = 200;
        }
        string sort = string.IsNullOrEmpty(_sidx) ? "" : (_sidx + " " + _sord);//如果排序字段取不到,即没有设置,就认为不需要排序,返回一个空字符串,如果存在的话则拼一下字段跟排序,比如"CreateTime desc"
        bool hasNext;

resultTable = TaskManager.GetUserTask(_nick, sort, page, rows+1, out hasNext);//将排序、第几页、行数、是否有下一页代入查询,这里需要注意的是,这里查询的时候将rows设置为原来的rows+1,这样如果查出来是rows+1行行数是完整的,说明有比rows行多,说明有下一页。这个下一页的判断是比较简单的,不用查全文总行数。
            arro.page = page;     //当前页

            if (hasNext)
            {
                arro.total = page + 1;  //总页数,有下一页就显示比当前页数多1
                arro.records = rows * page + 1;//总条数,如果有下一页就显示比现在的条数多1
            }
            else
            {
                arro.total = page;//没有下一页的话,总页数就是当前页
                arro.records = rows * (page - 1) + resultTable.Rows.Count;//没有下一页的话,总条数就是过去按乘法计算出来的条数加上当前页的条数
            }
            arro.rows = resultTable;
            arro.IsSuccess = true;
8、禁止使用排序功能

除了在顶级设置sortable:false以外,在每个col也要设置sortable:false。

9、取所有的列名

var columnNames = $("#id").jqGrid('getGridParam','colModel');

10、取得所有的id

		    var ids = jQuery("#listAliww").jqGrid('getDataIDs');//这个id就是在col被标为key的值
		    for(var i=0;i < ids.length;i++){}

11、取勾选的id

var s = jQuery("#listAliww").jqGrid('getGridParam', 'selarrrow');


12、对一个列设置属性

$("#id").setColProp("SendLevel", { hidden: true });
13、动态显示/隐藏列

jQuery("#grid_id").setGridParam().showCol("colname").trigger("reloadGrid");

jQuery("#grid_id").setGridParam().hideCol("colname").trigger("reloadGrid");

14、一开始不加载,在合适的时候才加载

默认设datatype为local,然后要加载的时候将其改为json

15、在行首显示勾选框

multiselect:true

16、自动换行

.ui-jqgrid tr.jqgrow td {
          white-space: normal !important;
          height:auto;
          word-break:break-all;
         }

17、显示文本输入框

        function notifyUrlFormatter(cellvalue, options, rowdata) {
            return "<TextArea id='appId" + rowdata.AppId + "' style='width:93%;margin-top:4px;'>" + cellvalue + "</TextArea>";
        }




jquery、jquery-ui的使用:

1、注意,用input做按钮,用jquery的click做点击事件做ajax请求,input必须指定为button,否则会上传整个页面

<button type="button" id="btnFilter">搜索</button>

2、jquery做点击事件的做法

            $("#btnFilter").click(function () {
                
            });

3、使用jquery-ui让按钮具有样式的做法

            $("#btnFilter").button().click(function () {
                
            });
加个button()就可以了

4、使用tab做页面布局

开发当中,页面常要显示几个相关的部分,而且为了展示的效果,不能同时展示,而要切换展示,这时使用tab就非常合适了。

    <div id="tabs" style="">
        <ul>
		    <li><a href="#tab1">tab1按钮</a></li>
		    <li><a href="#tab2">tab2按钮</a></li>
	    </ul>
        <div id="tab1">
            这是tab1
        </div>
        <div id="tab2">
            这是tab2
        </div>
    </div>

然后在js里:

$("#tabs").tabs();

就生效了。

5、当点击tab才触发加载

比如说在tab2上展示一个表格,但是我们初始化这个表格可以当用户点击tab2的时候才进行,如果用户一般情况下不看tab2的话,这样必要的时候才加载才不会造成浪费。

    var hasLoadList2 = false;
    $("#tabs").on("tabsactivate", function (event, ui) {
        if (hasLoadList2) return;
        else hasLoadList2 = true;
        // 下面是初始化表格
        $("#list2").jqGrid({
        	......
        });
    });


6、jquery判断显示、隐藏元素

            if ($("#appSecretText").is(":visible"))
            {
                $("#appSecretText").hide();
            } else
            {
                $("#appSecretText").show();
            }



html

1、checkbox

<input id="CheckBox1" type="checkbox" name="CheckBox1" /><label for="CheckBox1" style="vertical-align:middle;">优先出售</label>











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值