用extjs写一个grid表格数据修改后,后台数据也随之修改的完整例子

时间: 2023-05-27 12:04:32 浏览: 75
以下是一个完整的示例,用ExtJS 6.5编写,它演示了如何在Grid中编辑数据,并使用Ajax将更改保存到后端。 在这个例子中,我们将创建一个向后端服务器发送请求并接收响应的PHP脚本。它应该返回一个JSON编码的数组,我们将用来填充Grid数据。 PHP文件 fetchdata.php: ```php <?php // 模拟从服务器获取数据 $data = array( array('id'=>1, 'name'=>'张三', 'age'=>26), array('id'=>2, 'name'=>'李四', 'age'=>32), array('id'=>3, 'name'=>'王五', 'age'=>45), array('id'=>4, 'name'=>'赵六', 'age'=>18), array('id'=>5, 'name'=>'钱七', 'age'=>40) ); // 将数据返回为JSON格式 echo json_encode($data); ?> ``` 下面是ExtJS代码,包括Grid和与服务器进行通信的Ajax请求: ```javascript Ext.onReady(function(){ // 创建数据模型 Ext.define('Person', { extend: 'Ext.data.Model', fields: [ 'id', 'name', 'age' ] }); // 创建存储 var store = Ext.create('Ext.data.Store', { model: 'Person', proxy: { type: 'ajax', url: 'fetchdata.php', reader: { type: 'json', rootProperty: '' } }, autoLoad: true }); // 创建列模型 var columns = [ { text: 'ID', dataIndex: 'id' }, { text: '姓名', dataIndex: 'name', editor: 'textfield' }, { text: '年龄', dataIndex: 'age', editor: 'numberfield' } ]; // 创建Grid var grid = Ext.create('Ext.grid.Panel', { renderTo: Ext.getBody(), store: store, columns: columns, selModel: 'cellmodel', plugins: [ Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 1 }) ], listeners: { // 在单元格编辑后立即保存更改 edit: function(editor, e){ Ext.Ajax.request({ url: 'savechanges.php', method: 'POST', jsonData: e.record.data, success: function(response, opts){ //console.log(response.responseText); var obj = Ext.decode(response.responseText); if(obj.success){ Ext.Msg.alert('成功', '数据已保存'); store.load(); } else { Ext.Msg.alert('错误', obj.error); } }, failure: function(response, opts){ Ext.Msg.alert('错误', response.statusText); } }); } } }); }); ``` 注意: - CellEditing 插件可在单元格编辑时自动保存更改。 - 在保存更改时,我们使用Ajax请求将数据发送到名为 savechanges.php 的PHP文件。 - 在保存请求成功时,我们刷新存储以便更新Grid中的数据。 下面是PHP文件savechanges.php,我们稍后将用它来保存更改: ```php <?php // 获取POST数据 $data = json_decode(file_get_contents('php://input')); // 将更改保存到数据库 // 这里是我们自己的代码,为了演示,我们只返回成功。 $response = array('success'=>true); // 将响应数据转换为JSON格式并发送回来 echo json_encode($response); ?> ``` 在本地web服务器上运行这些代码后,您应该会看到一个包含可编辑单元格的Grid。更改数据时,单元格的背景色将变为黄色,表示它们已更改但尚未保存。保存更改时,将出现保存状态或错误消息。 希望这个例子对你有所帮助!

相关推荐

以下是一个使用ExtJS 4.2.1的完整例子,可以将Grid表格导出为Excel文件: Ext.require([ 'Ext.grid.*', 'Ext.data.*', 'Ext.util.*', 'Ext.toolbar.Paging', 'Ext.ux.exporter.Exporter' ]); Ext.onReady(function() { // 模拟数据 var data = []; for (var i = 0; i < 20; i++) { data.push({ name: 'User ' + i, email: 'user' + i + '@example.com', phone: '555-' + Ext.Number.randomInt(1000, 9999) }); } // 创建数据模型 Ext.define('User', { extend: 'Ext.data.Model', fields: ['name', 'email', 'phone'] }); // 创建数据源 var store = Ext.create('Ext.data.Store', { model: 'User', data: data, proxy: { type: 'memory', reader: { type: 'json', root: 'data' } } }); // 创建Grid表格 var grid = Ext.create('Ext.grid.Panel', { store: store, columns: [{ text: 'Name', dataIndex: 'name' }, { text: 'Email', dataIndex: 'email', flex: 1 }, { text: 'Phone', dataIndex: 'phone' }], width: 400, height: 200, dockedItems: [{ xtype: 'toolbar', dock: 'top', items: [{ xtype: 'button', text: 'Export to Excel', handler: function() { // 导出Excel Ext.ux.exporter.Exporter.exportGrid(grid, 'Excel', { title: 'User List' }); } }] }, { xtype: 'pagingtoolbar', store: store, dock: 'bottom', displayInfo: true }] }); // 渲染Grid表格 Ext.create('Ext.container.Viewport', { layout: 'fit', items: [grid] }); }); 在上面的代码中,我们首先定义了一个模拟数据数组,然后创建了一个数据模型和一个数据源。接下来,我们创建了一个Grid表格,将数据源绑定到该表格中,并添加了一个工具栏和一个分页工具栏。在工具栏中,我们添加了一个按钮,当用户单击该按钮时,将调用Ext.ux.exporter.Exporter.exportGrid函数将Grid表格导出为Excel文件。 需要注意的是,我们使用了Ext.ux.exporter.Exporter类来执行导出操作。该类是ExtJS的一个扩展,需要在应用程序中明确声明。在本例中,我们使用了Ext.require函数来加载必需的类和扩展。
可以使用 Ext.grid.feature.Grouping 插件来进行单元格合并。以下是示例代码: Ext.create('Ext.grid.Panel', { title: 'My Grid Panel', store: myStore, columns: [ { text: 'Name', dataIndex: 'name', flex: 1 }, { text: 'Age', dataIndex: 'age', flex: 1 }, { text: 'Salary', dataIndex: 'salary', flex: 1 } ], features: [{ ftype: 'grouping', groupHeaderTpl: '{columnName}: {name} ({rows.length})', hideGroupedHeader: true, startCollapsed: true, groupByText: 'Group by this field' }], renderTo: Ext.getBody() }); 在上述代码中,我们创建了一个包含三列的 GridPanel,并使用 Ext.grid.feature.Grouping 插件进行了单元格合并。我们使用 groupHeaderTpl 属性来指定分组的标题,hideGroupedHeader 属性来隐藏已分组的列的标题,startCollapsed 属性来指定分组初始时是否折叠,groupByText 属性来指定分组菜单项的文本。 如果您想要根据特定的列进行分组和合并,则可以使用 groupField 属性来指定要分组的列的名称。例如: Ext.create('Ext.grid.Panel', { title: 'My Grid Panel', store: myStore, columns: [ { text: 'Name', dataIndex: 'name', flex: 1 }, { text: 'Age', dataIndex: 'age', flex: 1 }, { text: 'Salary', dataIndex: 'salary', flex: 1 } ], features: [{ ftype: 'grouping', groupHeaderTpl: '{columnName}: {name} ({rows.length})', hideGroupedHeader: true, startCollapsed: true, groupByText: 'Group by this field', groupField: 'age' }], renderTo: Ext.getBody() }); 在上述代码中,我们将 groupField 属性设置为 'age',这意味着我们将根据 'age' 列进行分组和合并。
下面是一个基于 ExtJS 6 的折线图完整例子: Ext.onReady(function () { Ext.define('SalesData', { extend: 'Ext.data.Model', fields: [ {name: 'month', type: 'string'}, {name: 'sales', type: 'float'} ] }); var store = Ext.create('Ext.data.Store', { model: 'SalesData', data: [ {month: 'Jan', sales: 100}, {month: 'Feb', sales: 200}, {month: 'Mar', sales: 300}, {month: 'Apr', sales: 250}, {month: 'May', sales: 350}, {month: 'Jun', sales: 400}, {month: 'Jul', sales: 450}, {month: 'Aug', sales: 500}, {month: 'Sep', sales: 550}, {month: 'Oct', sales: 600}, {month: 'Nov', sales: 700}, {month: 'Dec', sales: 800} ] }); var chart = Ext.create('Ext.chart.CartesianChart', { renderTo: 'chart-container', width: 600, height: 400, animate: true, store: store, axes: [{ type: 'numeric', position: 'left', fields: 'sales', title: 'Sales', grid: true, minimum: 0 }, { type: 'category', position: 'bottom', fields: 'month', title: 'Month' }], series: [{ type: 'line', xField: 'month', yField: 'sales', title: 'Sales' }] }); }); 在这个例子中,我们定义了一个名为 SalesData 的数据模型,它有两个字段:month 和 sales。接着我们创建了一个名为 store 的数据源,它包含了一些假数据。 然后我们创建了一个名为 chart 的折线图,它使用了上面创建的数据源。我们定义了两个轴:一个用于绘制数值,一个用于绘制分类。我们还定义了一个系列,用于绘制折线图。 最后,我们将折线图渲染到页面上的一个元素中,这个元素的 ID 是 chart-container。

最新推荐

extjs动态生成表格,前台+后台

extjs动态生成表格,前台+后台extjs动态生成表格,前台+后台extjs动态生成表格,前台+后台extjs动态生成表格,前台+后台extjs动态生成表格,前台+后台extjs动态生成表格,前台+后台

extjs和servlet数据交互的例子

extjs和servlet数据交互的例子,对初次接触这方面的学习很有帮助

ExtJs+Dwr带分页分组传参后台排序功能的grid

ExtJs+Dwr带分页分组传参后台排序功能的grid 主要包含:这个主要用到ExtJS+DWR+Spring+Hibernate,主要包括浏览页(usernamerecord.jsp),脚步文件(usernamerecord.js),dwr分页代理脚本文件(dwrproxy.js),...

基于超声技术的气体流量测量仪设计

本文主要从基础研究出发,对超声波测量技术进行深入分析,并设计出实际电路,通过对实际电路调试,提出可行性改进措施,为今后的研究打下基础。采用基于改进型时差法的测量原理,能够较好地克服温度和声速对流量测量的影响,提高系统的精度。 系统设计上,硬件电路主要分为模拟电路和数字电路,模拟电路包括超声波发射电路、开关切换电路、超声波接收电路、限幅电路等。数字电路包括单片机控制电路、ADC转换电路、LCD显示电路等。 软件程序上选用KeilC语言编写,主要包括初始化配置模块、脉冲发射模块、数据采集模块、流速及流量计算模块、LCD驱动及显示模块等。完成硬件电路的设计、焊接和软件程序的编写,进行系统的整机调试,对实际中出现误差的可能性做具体的分析。 本文主要介绍气体流量测量仪的设计,首先介绍超声波检测的基本原理以及其发展历史、目前现状等。然后对设计中的数字式气体流量测量仪的总体设计及各功能模块进行了探讨,确定了气体流量测量仪设计的解决方案并对系统解决方案中的主控芯片和可编程逻辑控制芯片进行了选型。之后重点研究数字化气体流量测量仪系统的硬件设计,包括超声波的发射电路,接收电路,信号调理电路以及数据采集处理

Jupyter文件存储到想要文件夹,而不是默认安装文件夹

可以快速使得Jupyter在想要的存储位置存储文件

基于jsp的酒店管理系统源码数据库论文.doc

基于jsp的酒店管理系统源码数据库论文.doc

5G技术在医疗保健领域的发展和影响:全球疫情COVID-19问题

阵列14(2022)1001785G技术在医疗保健领域不断演变的作用和影响:全球疫情COVID-19问题MdMijanurRahmana,Mh,FatemaKhatunb,SadiaIslamSamia,AshikUzzamanaa孟加拉国,Mymensingh 2224,Trishal,Jatiya Kabi Kazi Nazrul Islam大学,计算机科学与工程系b孟加拉国Gopalganj 8100,Bangabandhu Sheikh Mujibur Rahman科技大学电气和电子工程系A R T I C L E I N F O保留字:2019冠状病毒病疫情电子健康和移动健康平台医疗物联网(IoMT)远程医疗和在线咨询无人驾驶自主系统(UAS)A B S T R A C T最新的5G技术正在引入物联网(IoT)时代。 该研究旨在关注5G技术和当前的医疗挑战,并强调可以在不同领域处理COVID-19问题的基于5G的解决方案。本文全面回顾了5G技术与其他数字技术(如人工智能和机器学习、物联网对象、大数据分析、云计算、机器人技术和其他数字平台)在新兴医疗保健应用中的集成。从文献中

def charlist(): li=[] for i in range('A','Z'+1): li.append(i) return li

这段代码有误,因为 `range()` 函数的第一个参数应该是整数类型而不是字符串类型,应该改为 `range(ord('A'), ord('Z')+1)`。同时,还需要将 `ord()` 函数得到的整数转化为字符类型,可以使用 `chr()` 函数来完成。修改后的代码如下: ``` def charlist(): li = [] for i in range(ord('A'), ord('Z')+1): li.append(chr(i)) return li ``` 这个函数的作用是返回一个包含大写字母 A 到 Z 的列表。

需求规格说明书1

1.引言1.1 编写目的评了么项目旨在提供一个在线评分系统,帮助助教提高作业评分效率,提供比现有方式更好的课堂答辩评审体验,同时减轻助教的工作量并降低助教工作复

人工免疫系统在先进制造系统中的应用

阵列15(2022)100238人工免疫系统在先进制造系统中的应用RuiPinto,Gil GonçalvesCNOEC-系统和技术研究中心,Rua Dr. Roberto Frias,s/n,office i219,4200-465,Porto,Portugal波尔图大学工程学院,Rua Dr. Roberto Frias,s/n 4200-465,Porto,PortugalA R T I C L E I N F O保留字:人工免疫系统自主计算先进制造系统A B S T R A C T近年来,先进制造技术(AMT)在工业过程中的应用代表着不同的先进制造系统(AMS)的引入,促使企业在面对日益增长的个性化产品定制需求时,提高核心竞争力,保持可持续发展。最近,AMT引发了一场新的互联网革命,被称为第四次工业革命。 考虑到人工智能的开发和部署,以实现智能和自我行为的工业系统,自主方法允许系统自我调整,消除了人为干预管理的需要。本文提出了一个系统的文献综述人工免疫系统(AIS)的方法来解决多个AMS问题,需要自治的