EditGridPanel增加,保存,删除,分页全过程分析
一.基础准备:
1.表结构:
2.实体类:
public class AppropriateFund { private Long id; private Long aid; private double totalFunds; private double country; private double province; private double county; private String fileNo; private Date fileDate; private String remark; ...... ...set/get }
3.映射文件:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2014-10-24 14:50:17 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="com.*.*.*.entity.AppropriateFund" table="APPROPRIATE_FUND"> <id name="id" type="java.lang.Long"> <column name="ID" precision="28" scale="0" /> <generator class="sequence"> <param name="sequence">SQ_APPROPRIATE_FUND</param> </generator> </id> <property name="aid" type="java.lang.Long"> <column name="AID" /> </property> <property name="totalFunds" type="double"> <column name="TOTAL_FUNDS" /> </property> <property name="country" type="double"> <column name="COUNTRY" /> </property> <property name="province" type="double"> <column name="PROVINCE" /> </property> <property name="county" type="double"> <column name="COUNTY" /> </property> <property name="fileNo" type="java.lang.String"> <column name="FILE_NO" /> </property> <property name="fileDate" type="java.sql.Date"> <column name="FILE_DATE" /> </property> <property name="remark" type="java.lang.String"> <column name="REMARK" /> </property> </class> </hibernate-mapping>
二:Extjs设计页面
1.创建Store:
var fundRecord = new Ext.data.Record.create([ {name:"id",type:"int"}, //注意type类型! {name:"aid",type:"int"}, {name:"totalFunds",type:"float"}, {name:"country",type:"float"}, {name:"province",type:"string"}, {name:"county",type:"string"}, {name:"fileNo",type:"string"}, {name:"fileDate",type:"date",format:"Y-m-d"}, {name:"remark",type:"string"} ]); var fundProxy = new Ext.data.HttpProxy({url:'getAppropriateFund.pay?doType=getAppropriateFund'}); var fundReader = new Ext.data.JsonReader({ root:'rows', totalProperty:'totalCount' //分页必须要有该项! },fundRecord); var fundStore = new Ext.data.Store({ proxy:fundProxy, reader:fundReader });注意:
1).EditGridPanel增加行时需要用到Record,所以此处创建Store必须用Record!
2).Record没有long和double类型!
3).若要分页,则Reader必须加上totalProperty属性!
2.创建ColumnModel:
var fundSm = new Ext.grid.CheckboxSelectionModel();//表格面板的复选框 var fundCm = new Ext.grid.ColumnModel({ defaultSortable:false,//默认排序 columns:[ fundSm,//复选框 { header:"编号", dataIndex:"id", hidden:true, width:50 },{ header:"项目ID", dataIndex:"aid", hidden:true, width:50 },{ header:"总下达资金", dataIndex:"totalFunds", align:"center", editor:new Ext.form.NumberField({ decimalPrecision: 2, minValue: 0.01 }), width:100 },{ header:"中央资助金额", dataIndex:"country", align:"center", editor:new Ext.form.NumberField({ decimalPrecision: 2, minValue: 0.01 }), width:100 },{ header:"省资助金额", dataIndex:"province", align:"center", editor:new Ext.form.NumberField({ decimalPrecision: 2, minValue: 0.01 }), width:100 },{ header:"县资助金额", dataIndex:"county", align:"center", editor:new Ext.form.NumberField({ decimalPrecision: 2, minValue: 0.01 }), width:100 },{ header:"下达政策文件号", dataIndex:"fileNo", align:"center", editor:new Ext.form.TextField(), width:150 },{ header:"下达政策时间", dataIndex:"fileDate", align:"center", editor:new Ext.form.DateField({ format:'Y-m-d', readOnly:true }), renderer :function(v,p,r){ if(r.data.id==-1){ return ""; }else if(v==null||v==""){ return ""; }else{ return regDate(v,p,r); } }, width:120 },{ header:"备注", dataIndex:"remark", align:"center", editor:new Ext.form.TextField(), width:150 } ] });注意:
1).复选框需要在ColumnModel中加入。
2).注意NumberField的精度。
3).注意DateField的日期格式化。
3.创建EidtGridPanel:
var fundGrid = new Ext.grid.EditorGridPanel({ title:"资金明细", layout:"fit", sm:fundSm, //复选框 cm:fundCm, //ColumnModel ds:fundStore, //Store clicksToEdit:1, //单击几次可编辑 stripeRows:true, //斑马条纹 loadMask:{msg:'正在加载数据,请稍侯……'}, tbar:[ { text:"保存", iconCls:"save", handler:saveFund },{ text:"增加行", iconCls:"add", handler:addFund },{ text:"删除行", iconCls:"remove", handler:removeFund } ], bbar: new Ext.PagingToolbar({ pageSize: pageSize, store: fundStore, displayInfo: true, displayMsg: '当前显示 {0} - {1} ,共{2}条记录', emptyMsg: "没有数据", items: ['-'] }) });
注意:
1.分页必须要有Store,并且该Store必须要有totalProperty属性!
返回的分页数据:
{ totalCount: 2,//注意:分页的话必须要有该项 rows: [ { "aid": 27, "country": 0, "county": 1800, "id": 42, "province": 200, "totalFunds": 2000 }, { "aid": 27, "country": 0, "county": 0, "id": 41, "province": 10000, "totalFunds": 10000 } ] }
4.Extjs:增加一列空行
/*增加一行资金空行信息*/ function addFund(){ var newFund = new fundRecord({ id:-1, //id为-1是为了Dao中判断插入还是更新 aid:aid, totalFunds:0,//注意:这里若默认为"",在不输入值的情况下,后台取值会报错!!! country:0, province:0, county:0, fileNo:"", fileDate:"", remark:"" }) fundGrid.stopEditing(); //关闭表格的编辑状态 fundStore.add(newFund); fundGrid.startEditing(0,0); }
5.Extjs:保存资金信息
/*保存资金信息*/ function saveFund(){ //只提交修改过的记录 var records = fundStore.getModifiedRecords(); //获取更改过的记录 if(records && records.length > 0){ Ext.Msg.wait("正在保存..."); var rows = new Array(); for (var i = 0; i < records.length; i++) { var record = records[i]; var row = new Object(); var fields = record.data; var totalFunds = fields["totalFunds"]; var country = fields["country"]; var province = fields["province"]; var county = fields["county"]; if (totalFunds != (country + province + county)) { Ext.Msg.alert("系统提示","各级资助金额总和必须等于总下达资金"); return; } row = {id:fields.id,aid:fields.aid,totalFunds:fields.totalFunds,country:fields.country,province:fields.province, county:fields["county"],fileNo:fields["fileNo"],fileDate:fields["fileDate"],remark:fields["remark"]}; rows.push(row); }//此处展示了Js的两种不同的取值方式 //发送异步请求,保存数据 Ext.Ajax.request({ url:"updateAppropriateFund.pay?doType=updateAppropriateFund", method:"POST", timeout:300000, params:{updateSets:Ext.encode(rows)},//将对象编码转化为Json字符串 success:success, failure:function(){Ext.Msg.alert('信息','未成功提交数据!'); } }); function success(response,options){ var result = Ext.decode(response.responseText);//返回值转码 if(result.success){ Ext.Msg.hide(); Ext.Msg.show({title:'成功', msg: '数据保存成功', buttons: Ext.Msg.OK, icon: Ext.MessageBox.INFO}); //保存成功后刷新修改过的脏数据。 fundStore.rejectChanges(); fundStore.reload(); }else{ Ext.Msg.hide(); Ext.Msg.alert('信息','保存数据未成功!'); } } } }注意:
1.获取修改过的记录进行提交
2.要将修改过的记录编码转化为Json字符串,再传到后台
3.数据保存成功后,需要将改变的记录去除掉,再重新加载!
6.Java:增加或更新资金信息
Servlet:else if ("updateAppropriateFund".equals(action)) { String str; AppropriateDao dao = new AppropriateDao(); String fundsStr = request.getParameter("updateSets"); JSONArray jArray = new JSONArray(fundsStr); List<AppropriateFund> funds = new ArrayList<AppropriateFund>(); if (jArray != null) { for (int i = 0; i < jArray.length(); i++) { AppropriateFund fund = new AppropriateFund(); JSONObject jObject = jArray.getJSONObject(i); fund.setId(jObject.getLong("id")); fund.setAid(jObject.getLong("aid")); fund.setTotalFunds(jObject.getDouble("totalFunds")); fund.setCountry(jObject.getDouble("country")); fund.setProvince(jObject.getDouble("province")); fund.setCounty(jObject.getDouble("county")); fund.setFileNo(jObject.getString("fileNo")); if (jObject.getString("fileDate") != null && !jObject.getString("fileDate").equals("")) { fund.setFileDate(Date.valueOf(jObject.getString("fileDate").substring(0, jObject.getString("fileDate").lastIndexOf("T")))); } fund.setRemark(jObject.getString("remark")); funds.add(fund); } } boolean done = dao.addOrUpdateApprociateFund(funds); if(done){ str="{success:true}"; }else{ str="{success:false}"; } response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); out.print(str); out.close(); return; }
相关推荐
高效分页存储过程的实现对于优化数据库性能至关重要。本文将深入探讨如何创建和使用高效的分页存储过程,并针对SQL Server 2005及2010提供一个实用的例子。 首先,理解分页的基本概念。分页通常涉及到两个关键参数...
分页存储过程 分页存储过程 分页存储过程 sql代码
在这个“Oracle增加、删除、修改和分页存储过程”项目中,我们将深入探讨这四个核心的数据库管理功能,并了解如何在PL/SQL环境中实现它们。 1. **增加(Insertion)**: 在Oracle中,创建一个用于插入数据的存储...
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
### 万能分页存储过程知识点详解 #### 一、概述 在数据库操作中,分页查询是一项常用且重要的技术,特别是在数据量较大的场景下,能够显著提高用户体验和系统性能。本文将详细介绍一个名为“万能分页存储过程”的...
oracle分页存储过程,oracle分页存储过程
本文将深入探讨如何通过使用存储过程来实现高效的分页存储过程,特别是针对ASP.NET应用程序。 标题 "效率高的分页存储过程实现的分页" 提到的是一种优化数据检索的技术。在ASP.NET开发中,GridView控件是常用的数据...
本篇文章将深入探讨MySQL中的分页存储过程及其代码调用方法。 首先,理解分页的基本概念。在网页或应用程序中,我们通常会看到“上一页”、“下一页”这样的导航,这就是分页的表现形式。分页查询通过设置每页显示...
本文将深入解析MySQL中的分页存储过程,通过实例代码讲解其工作原理与实现步骤。 ### MySQL分页存储过程概述 分页存储过程是一种在数据库层面上实现数据分页的技术。相比应用程序级别的分页,它能更高效地处理数据...
在IT领域,分页存储过程是数据库管理中的一个重要概念,特别是在构建大规模的Web应用程序时,如新闻系统。分页能够有效地提高用户体验,因为用户可以逐步加载数据,而不是一次性加载所有内容,这降低了服务器的负担...
为了解决这个问题,高效的分页存储过程会结合`ROW_NUMBER()`窗口函数或者`RANK()`、`DENSE_RANK()`等,这些函数可以在查询过程中直接确定每行的顺序号,从而避免了全表扫描。此外,通过在`WHERE`子句中加入`ROWNUM`...
SQL Server 分页存储过程是一种在数据库中实现高效数据分页查询的方法。在大型数据集的展示中,分页是必不可少的,因为它允许用户逐步浏览数据,而不是一次性加载所有记录,从而提高用户体验并减少服务器负载。以下...
### 通用分页存储过程知识点解析 #### 一、存储过程概述 在数据库管理系统中,存储过程是一种预先编译并存储在数据库中的SQL程序。它能够接收参数,并根据这些参数执行复杂的逻辑操作,如数据查询、更新等。通过...
"C#调用分页存储过程"是一个常见的技术实践,它结合了C#编程语言和SQL Server的存储过程来高效地获取数据库中的分页数据。这种方法可以有效地减少网络传输的数据量,提高用户界面的响应速度,尤其是在数据量达到百万...
oracle分页存储过程详细的编码 可直接使用 拿去使用吧
在SQL Server中,通过存储过程实现分页查询可以优化性能,避免全表扫描。 C#调用存储过程通常涉及到以下步骤: 1. **建立连接**:使用`SqlConnection`类创建数据库连接,需要提供正确的连接字符串,包括数据库...
分页存储过程 分页存储过程分页存储过程分页存储过程