zoukankan      html  css  js  c++  java
  • SlickGrid example 3a: 可编辑单元

    可编辑单元支持一列展示多个属性域,可以为编辑单元提供验证,并且自定义验证事件。

    SlickGrid <wbr>example <wbr>3a: <wbr>可编辑单元
     
    代码:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>SlickGrid example 3a: Advanced Editing</title>
    <link rel="stylesheet" href="../css/slick.grid.css" type="text/css" />
    <link rel="stylesheet"
    href="../css/smoothness/jquery-ui-1.8.16.custom.css" type="text/css" />
    <link rel="stylesheet" href="../css/examples.css" type="text/css" />
    <style>
    .cell-title {
    font-weight: bold;
    }
    </style>
    </head>
    <body>
    <div style="position: relative">
    <div style=" 600px;">
    <div id="myGrid" style=" 100%; height: 500px;"></div>
    </div>
     
    <div class="options-panel">
    <h2>Demonstrates:</h2>
    <ul>
    <li>compound cell editors driving multiple fields from one cell</li>
    <li>providing validation from the editor</li>
    <li>hooking into validation events</li>
    </ul>
    </div>
    </div>
     
    <script src="../js/firebugx.js"></script>
    <script src="../js/jquery-1.7.min.js"></script>
    <script src="../js/jquery-ui-1.8.16.custom.min.js"></script>
    <script src="../js/jquery.event.drag-2.0.min.js"></script>
    <script src="../js/slick.core.js"></script>
    <script src="../js/slick.editors.js"></script>
    <script src="../js/slick.grid.js"></script>
     
    <script type="text/javascript">
    var grid;//定义表格
    //定义表格数据变量
    var data = [];
    //设置列显示样式
    var columns = [ {
    id : "title",
    name : "Title",
    field : "title",
    width : 120,
    cssClass : "cell-title",
    editor : Slick.Editors.Text
    }, {//可管理多个属性域
    id : "range",
    name : "Range",
    width : 120,
    formatter : NumericRangeFormatter, //自定义显示风格格式化方法
    editor : NumericRangeEditor //编辑方法
    } ];
    //设置表格参数
    var options = {
    editable : true,
    enableAddRow : false,
    enableCellNavigation : true,
    asyncEditorLoading : false
    };
    //一列中显示多个属性域
    function NumericRangeFormatter(row, cell, value, columnDef, dataContext) {
    return dataContext.from + " - " + dataContext.to;
    }
    //编辑处理
    function NumericRangeEditor(args) {
    var $from, $to;
    var scope = this;
     
    this.init = function() {
    $from = $("<INPUT type=text style='40px' />").appendTo(
    args.container).bind("keydown", scope.handleKeyDown);
     
    $(args.container).append("&nbsp; to &nbsp;");
     
    $to = $("<INPUT type=text style='40px' />").appendTo(
    args.container).bind("keydown", scope.handleKeyDown);
     
    scope.focus();
    };
     
    this.handleKeyDown = function(e) {
    if (e.keyCode == $.ui.keyCode.LEFT
    || e.keyCode == $.ui.keyCode.RIGHT
    || e.keyCode == $.ui.keyCode.TAB) {
    e.stopImmediatePropagation();
    }
    };
     
    this.destroy = function() {
    $(args.container).empty();
    };
     
    this.focus = function() {
    $from.focus();
    };
     
    this.serializeValue = function() {
    return {
    from : parseInt($from.val(), 10),
    to : parseInt($to.val(), 10)
    };
    };
     
    this.applyValue = function(item, state) {
    item.from = state.from;
    item.to = state.to;
    };
     
    this.loadValue = function(item) {
    $from.val(item.from);
    $to.val(item.to);
    };
     
    this.isValueChanged = function() {
    return args.item.from != parseInt($from.val(), 10)
    || args.item.to != parseInt($from.val(), 10);
    };
    //可定义验证编辑单元数据
    this.validate = function() {
    if (isNaN(parseInt($from.val(), 10))
    || isNaN(parseInt($to.val(), 10))) {
    return {
    valid : false,
    msg : "Please type in valid numbers."
    };
    }
     
    if (parseInt($from.val(), 10) > parseInt($to.val(), 10)) {
    return {
    valid : false,
    msg : "'from' cannot be greater than 'to'"
    };
    }
     
    return {
    valid : true,
    msg : null
    };
    };
     
    this.init();
    }
     
    $(function() {// 生成表格数据
    for ( var i = 0; i < 100; i++) {
    var d = (data[i] = {});
     
    d["title"] = "Task " + i;
    d["from"] = Math.round(Math.random() * 100);
    d["to"] = d["from"] + Math.round(Math.random() * 100);
    }
    //渲染表格
    grid = new Slick.Grid("#myGrid", data, columns, options);
     
    grid.onValidationError.subscribe(function(e, args) {
    alert(args.validationResults.msg);
    });
    })
    </script>
    </body>
    </html>
  • 相关阅读:
    Sencha touch 2 入门 -------- DataView 显示服务器端JSON文件数据
    Sencha touch API
    Android Intent详解
    物流配送中商品订货数量的控制技术
    multiset基础学习,可以有重复类型的多重集合容器
    人生总会遇到浑噩期,但是需要反思
    创建Sencha touch第一个应用
    How I Turned Down $300,000 from Microsoft to go Full-Time on GitHub
    c++ list 合并操作函数实例
    电子设计与制作100例(第3版)
  • 原文地址:https://www.cnblogs.com/wt869054461/p/3948569.html
Copyright © 2011-2022 走看看