设计器外挂菜单实现数据填报
第33章 设计器外挂菜单实现数据填报
1 . 问题概述
有些客户会把V4设计器作为主要的报表操作工具,而不是要发布到B/S的模式上应用,需求如下:
1. 在设计器中打开一张填报表,设置填报表单元格预览可以修改数据
2. 预览该报表,并修改相应数据
3. 在报表设计器文件菜单下外挂一个菜单叫做提交数据
4. 在预览报表的时候可以直接点击提交数据保存填报表数据到数据库中
2 . 案例
浙江公众信息
3.流程步骤
1.在数据库创建student表:
use exercise
create table student(
stu_no varchar(20),
stu_name varchar(20),
stu_sex varchar(2),
stu_age varchar(20)
)
go
insert into student(stu_no,stu_name,stu_sex,stu_age) values(’2001001′,’李三’,'男’,22);
insert into student(stu_no,stu_name,stu_sex,stu_age) values(’2001002′,’张四’,'女’,23);
2 在润乾报表设计器的文件菜单下(systemconfig.xml)增加一个菜单选项可命名为:提交数据
3.打开做好的填报表,修改C2单元格为可写,打印时允许修改勾上.
4.在设计器里点击预览:
5.然后在设计预览里修改C2单元格的值:
6.设计器里选择”提交数据”菜单,点击执行
7.数据正确更新到数据库中,带相关提示
8.查看数据库表,进行数据对比:
4. 程序说明
连接数据源,获取填报单元格,执行update语句,saveReport.java代码:
package api;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import com.runqian.report4.ide.GVIde;
import com.runqian.report4.ide.base.IReportSheet;
import com.runqian.report4.ide.configmenu.CMAction;
import com.runqian.report4.model.ReportDefine;
import com.runqian.report4.usermodel.Context;
import com.runqian.report4.usermodel.INormalCell;
import com.runqian.report4.usermodel.IReport;
public class saveReport extends CMAction {
public saveReport() {
super();
}
IReport rp = null;
ReportDefine rd = null;
Context context = null;
private final static String driver = “com.newatlanta.jturbo.driver.Driver”;
private final static String url = “jdbc:JTurbo://localhost/exercise/charset=GBK”;
private final static String username = “sa”;
private final static String password = “sa”;
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
Statement smt = null;
IReportSheet irs = GVIde.reportSheet; // 获取IReportSheet对象
irs.refresh();
rp = irs.getReport(); // 获取预览的IReport对象
rp.setInput(IReport.INPUT_NORMAL);
rp.setSubmit(IReport.SUBMIT_UPDATABLE_WRITABLE);
// rp=(IReport)handler.processMessage(“HttpSave”,null);
INormalCell inc_2_1 = rp.getCell(2, (short) 1);
INormalCell inc_2_3 = rp.getCell(2, (short) 3);
System.out.println(inc_2_1.getValue());
System.out.println(inc_2_3.getDispValue());
INormalCell inc_3_1 = rp.getCell(3, (short) 1);
INormalCell inc_3_3 = rp.getCell(3, (short) 3);
System.out.println(inc_3_1.getValue());
System.out.print(inc_3_3.getDispValue());
Connection con = getConnection(driver, url, username, password); // 建立连接
try {
smt = con.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try { // 数据更新
smt.executeUpdate(“update student set stu_name =’”
+inc_2_3.getDispValue() + “‘ where stu_no=’”
+ inc_2_1.getValue() + “‘”);
smt.executeUpdate(“update student set stu_name = ‘”
+ inc_3_3.getDispValue() + “‘ where stu_no=’”
+ inc_3_1.getValue() + “‘”);
JOptionPane.showMessageDialog(null, “数据更新成功!“,
“提示“, JOptionPane.INFORMATION_MESSAGE);
smt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
System.out.println(“数据更新失败!“);
}
}
private static Connection getConnection(String driver, String url,
String username, String password) {
// 建立数据库连接
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
}
Connection con = null;
try {
con = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
}