Row Editing in DataGrid简单讲解

具体例子可以去官网上看,官网的demo和documentation都是非常有用的。

下面是从官网上拿来的代码,这里只看js吧,底下做了分析

       var editIndex = undefined;
        function endEditing(){
            if (editIndex == undefined){return true}
            if ($('#dg').datagrid('validateRow', editIndex)){
                var ed = $('#dg').datagrid('getEditor', {index:editIndex,field:'productid'});
                var productname = $(ed.target).combobox('getText');
                $('#dg').datagrid('getRows')[editIndex]['productname'] = productname;
                $('#dg').datagrid('endEdit', editIndex);
                editIndex = undefined;
                return true;
            } else {
                return false;
            }
        }
        function onClickRow(index){
            if (editIndex != index){
                if (endEditing()){
                    $('#dg').datagrid('selectRow', index)
                            .datagrid('beginEdit', index);
                    editIndex = index;
                } else {
                    $('#dg').datagrid('selectRow', editIndex);
                }
            }
        }
        function append(){
            if (endEditing()){
                $('#dg').datagrid('appendRow',{status:'P'});
                editIndex = $('#dg').datagrid('getRows').length-1;
                $('#dg').datagrid('selectRow', editIndex)
                        .datagrid('beginEdit', editIndex);
            }
        }
        function removeit(){
            if (editIndex == undefined){return}
            $('#dg').datagrid('cancelEdit', editIndex)
                    .datagrid('deleteRow', editIndex);
            editIndex = undefined;
        }
        function accept(){
            if (endEditing()){
                $('#dg').datagrid('acceptChanges');
            }
        }
        function reject(){
            $('#dg').datagrid('rejectChanges');
            editIndex = undefined;
        }
        function getChanges(){
            var rows = $('#dg').datagrid('getChanges');
            alert(rows.length+' rows are changed!');
        }

重点放在js上,可以看到首先定义了一个变量editIndex,这个变量记录了当前的编辑行索引

可以想的到,这个变量将会在“编辑开始”时被赋值,而在“编辑终止”时被还原成undefined,这个也就是各个方法之间通信的公共变量。

下面要介绍一个最重要的方法——endEditing,可以看到这个方法在下面的好几个方法中都用到了,非常的关键。

那么endEditing是用来做什么的呢?首先看名字来猜猜,这个方法大概是用来结束编辑的,再看看代码

需要校验通过才能终止编辑,返回true,由于终止编辑了那么editIndex又被置为undefined。否则返回false

这个方法主要是对“终止编辑”这个操作做一个校验,并且做一些收尾的工作,比如翻译一些代码,将editIndex置为undefined等。

从而印证了刚才观察到的,这个方法是要配合别的方法一起使用的,也就是所谓的需要“终止编辑”的方法,先来看看它们吧

onClickRow(index)

这是datagrid提供的一个onClickRow事件的处理函数,当点击某一行时触发,在Row Editing中我们希望点击某一行时可以将那一行变为可编辑行。

那么很简单:

$('#dg').datagrid('beginEdit', index)

若是已经在编辑其中一行了,然后再点击另一行的这种clickRow呢?那么需要判断editIndex和index是否相等了

若不相等,则要先将当前编辑行“终止编辑”,再“开始编辑”新点击的那一行。若相等,那么还是选中当前编辑行

        function onClickRow(index){
            if (editIndex != index){
                if (endEditing()){
                    $('#dg').datagrid('beginEdit', index);
                    editIndex = index;
                } else {
                    $('#dg').datagrid('selectRow', editIndex);
                }
            }
        }

接下来的几个方法其实也都是围绕着editIndex来进行的。其中datagrid的appenRow方法可以给新增行赋初始值

在accept时需要调用acceptChanges方法,这个方法是接受之前的改变用的,也就是说这个方法真正的将刚才所改变的值保存了下来

若是没有调用这个方法前,即使“终止编辑”了,但是若按cancel那个按钮,则未acceptChanges的row全部复原。另外,还可以通过getChanges来查看还未accept的changes的条数

搞懂这个demo其实也就掌握了大多数情况datagrid的编辑情况,为之后更复杂的datagrid打下的一个良好的基础。

时间: 2024-10-29 04:37:00

Row Editing in DataGrid简单讲解的相关文章

DataGrid 简单数据绑定实例

1.默认数据显示(自动显示列) 后台绑定 //DataGrid 数据绑定 dataGridOne.ItemsSource = _Context.Info.ToList(); 前台定义 <DataGrid Name="dataGridOne" HorizontalAlignment="Left" Margin="10,92,0,0" VerticalAlignment="Top" Height="219"

矩阵快速幂 模板与简单讲解

模板 快速幂模板 1 void solve(matrix t,long long o) 2 { 3 matrix e; 4 5 memset(e.a,0,sizeof(e.a)); 6 7 for (int i = 0;i < d;i++) 8 e.a[i][i] = 1; 9 10 while (o) 11 { 12 if (o & 1) 13 { 14 e = mul(e,t); 15 } 16 17 o >>= 1; 18 19 t = mul(t,t); 20 } 21

WeX5的简单介绍及UI的简单讲解

WeX5的简单介绍及UI的简单讲解 (2016-01-13 14:49:05) 标签: it 分类: WeX5的初步自学 一.WeX5的简单讲解 1.WeX5是前端快速开发框架,可开发跨端运行应用.是移动App/微信/WebApp开发利器,一次开发多平台运行. 二.WeX5平台了解 1.菜单和工具栏 :查看API:启动Tomcat:搜索:首选项:复位透视图 2.透视图 :导入java项目:使用svn 3.模型资源 :文件对比 :新建.复制.删除:重命名文刷件新及文件夹:模型编译 切换到资源管理器

FTP的搭建与虚拟目录作用&lt;之简单讲解&gt;

操作系统:win7 VS2010编写WebService与在IIS的发布<之简单讲解>中我已经说了IIS安装与使用,不明白的可以跳过去看. 1.添加FTP站点 2. 3. 4. 5. zqz上的小黑点代表未启动,记得要启动! 6.打开浏览器 7.添加虚拟目录 8. 9.qq添加成功 10. 11.再次添加一个虚拟目录:aa 12. 13. 14.这里我为什么要添加两个虚拟目录呢?一个是qq一个是aa.这就引出了虚拟目录的重要作用. 虚拟目录就是将其他目录以映射的方式虚拟到该FTP服务器的主目录

Android事件总线分发库EventBus3.0的简单讲解与实践

Android事件总线分发库EventBus的简单讲解与实践 导语,EventBus大家应该不陌生,EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅.以及将发送者和接收者解耦.反正能帮助我们快速开发,这个确实是个好东西,其实鸿洋大神已经对源码作了一个较全面的剖析了 Android EventBus源码解析 带你深入理解Ev

机器学习实战之一---简单讲解决策树

机器学习实战之一---简单讲解决策树 https://blog.csdn.net/class_brick/article/details/78855510 前言:本文基于<机器学习实战>一书,采用python语言,对于机器学习当中的常用算法进行说明. 一. 综述 定义:首先来对决策树进行一个定义,决策树是一棵通过事物的特征来进行判断分支后得到该事物所需要的预测的属性的树. 流程:提取特征à计算信息增益à构建决策树à使用决策树进行预测 关键:树的构造,通过信息增益(熵)得到分支点和分支的方式.

常用函数式接口与Stream API简单讲解

常用函数式接口与Stream API简单讲解 Stream简直不要太好使啊!!! 常用函数式接口 Supplier<T>,主要方法:T get(),这是一个生产者,可以提供一个T对象. Consumer<T>,主要方法:void accept(T),这是一个消费者,默认方法:andthen(),稍后执行. Predicate<T>,主要方法:boolean test(T t),这是一个判断者,默认方法:and():且,or():或,negate():非. Functio

二叉树的遍历方法之层序-先序-中序-后序遍历的简单讲解和代码示例

二叉树的基础性质及二叉树的建立参见前面两篇博文: http://blog.csdn.net/why850901938/article/details/51052936 http://blog.csdn.net/why850901938/article/details/51052156 首先为了讲解方便,我建立了如图所示的二叉树: 取名为:树A 1.何为层序遍历? 层序遍历就是按照二叉树的层次由上到下的进行遍历,每一层要求访问的顺序为从左到右: 以树A为例,层序遍历得到的结果为: 5 2 6 1

Linux Vim编辑器使用简单讲解

在Linux中,主要编辑器为vi或者vim,本文围绕vim做简单的讲解说明:Linux默认自带vi(vim)编辑器,其程序包为:[[email protected] ~]# rpm -qf `which vi` vim-minimal-7.2.411-1.8.el6.x86_64 [[email protected] ~]# rpm -qf `which vim` vim-enhanced-7.2.411-1.8.el6.x86_64vim 编辑器模式切换:命令模式 .命令行模式.编辑模式命令模