
2008年9月4日
原文地址:http://www.java2000.net/p8972
先看看运行效果
html源代码
- <html>
- <head>
- <meta http-equiv="Content-Type" c>
- <title>Editor Grid Example</title>
- <link rel="stylesheet" type="text/css" href="../resources/css/ext-all.css" />
- <script type="text/javascript" src="../adapter/ext/ext-base.js"></script>
- <script type="text/javascript" src="../ext-all.js"></script>
- <script type="text/javascript">
- Ext.onReady(function(){
- Ext.QuickTips.init();
- // 日期格式化
- function formatDate(value){
- return value ? value.dateFormat('Y年m月d日') : '';
- };
- // shorthand alias
- var fm = Ext.form;
- // 自定义的字段
- var checkColumn = new Ext.grid.CheckColumn({
- header: "婚否?",
- dataIndex: 'married',
- width: 55
- });
- // 列数据的模型
- // dataIndex 对应着数据里面的字段
- var cm = new Ext.grid.ColumnModel([{
- id:'name', // 数据模型的唯一编号
- header: "姓名", // 标题
- dataIndex: 'name', // 对应于数据源里面的字段
- width: 220, // 宽度
- editor: new fm.TextField({ // 编辑的类型
- allowBlank: false // 不允许为空,如果为空,则会显示红色波浪线警告且恢复原始数值
- })
- },{
- header: "学位", // 学位的标题
- dataIndex: 'degree', // 对应于学位
- width: 130,
- editor: new Ext.form.ComboBox({ // 使用自定义的下拉框
- typeAhead: true,
- triggerAction: 'all',
- transform:'degree', // 对应的下拉列表ID
- lazyRender:true,
- listClass: 'x-combo-list-small'
- })
- },{
- header: "薪资(元)",
- dataIndex: 'salary',
- width: 70,
- align: 'right', // 右对齐
- editor: new fm.NumberField({ // 数字编辑框
- decimalPrecision: 0, // 默认的小数点位数
- allowBlank: false,
- allowNegative: false, // 不允许为负数
- maxValue: 100000 // 最大值为10万
- })
- },{
- header: "出生日期",
- dataIndex: 'birthday',
- width: 95,
- renderer: formatDate,
- editor: new fm.DateField({ // 日期的编辑框
- format: 'Y-m-d', // 格式
- minValue: '1908-08-08'
- })
- },
- checkColumn // 自定义的婚否列
- ]);
- // 默认列是可以排序的
- cm.defaultSortable = true;
- // 创建数据源的记录,代表一个员工
- var Employee = Ext.data.Record.create([
- // name对应着数据里面对应的标签,birthday例外,对应着birth
- {name: 'name', type: 'string'},
- {name: 'address', type: 'string'},
- {name: 'degree'},
- {name: 'salary', type: 'int'},
- // 日期自动转换
- {name: 'birthday', mapping: 'birth', type: 'date', dateFormat: 'm/d/Y'},
- {name: 'married', type: 'bool'}
- ]);
- // 创建数据集,读取员工数据
- var store = new Ext.data.Store({
- // 使用HTTP协议获得
- url: 'employees.xml',
- // the return will be XML, so lets set up a reader
- // 返回的是一个XML数据,我们解析为我们定义的记录格式 Employee
- reader: new Ext.data.XmlReader({
- // 记录里面有个 "employee" 的标签
- record: 'employee'
- }, Employee),
- sortInfo:{field:'name', direction:'ASC'} // 默认按照姓名正向排序
- });
- // 创建可编辑的 Grid
- var grid = new Ext.grid.EditorGridPanel({
- store: store, // 指定数据源
- cm: cm,
- renderTo: 'editor-grid', // 目标的id位置
- width:600,
- height:300,
- autoExpandColumn:'name', // 默认自动扩展宽度的字段
- title:'人员信息编辑', // 标题
- frame:true,
- plugins:checkColumn,
- clicksToEdit: 0, // 默认为双击编辑,如果为1则单击就编辑
- tbar: [{ // 顶部的工具栏 tools bar
- text: '增加新员工',
- handler : function(){
- var p = new Employee({
- name: '输入员工姓名',
- degree: '学士',
- salary: 0,
- birthday: (new Date()).clearTime(),
- married: false
- });
- grid.stopEditing();
- store.insert(0, p);
- grid.startEditing(0, 0);
- }
- }]
- });
- // 装载数据
- store.load();
- });
- Ext.grid.CheckColumn = function(config){
- Ext.apply(this, config);
- if(!this.id){
- this.id = Ext.id();
- }
- thisthis.renderer = this.renderer.createDelegate(this);
- };
- Ext.grid.CheckColumn.prototype ={
- init : function(grid){
- this.grid = grid;
- this.grid.on('render', function(){
- var view = this.grid.getView();
- view.mainBody.on('mousedown', this.onMouseDown, this);
- }, this);
- },
- onMouseDown : function(e, t){
- if(t.className && t.className.indexOf('x-grid3-cc-'+this.id) != -1){
- e.stopEvent();
- var index = this.grid.getView().findRowIndex(t);
- var record = this.grid.store.getAt(index);
- record.set(this.dataIndex, !record.data[this.dataIndex]);
- }
- },
- renderer : function(v, p, record){
- p.css += ' x-grid3-check-col-td';
- return '<div class="x-grid3-check-col'+(v?'-on':'')+' x-grid3-cc-'+this.id+'"> </div>';
- }
- };
- </script>
- </head>
- <body>
- <h1>可编辑的 Grid</h1>
- <select name="degree" id="degree" style="display: none;">
- <option value="博士">博士</option>
- <option value="硕士">硕士</option>
- <option value="双学士">双学士</option>
- <option value="学士">学士</option>
- <option value="其它">其它</option>
- </select>
- <div id="editor-grid"></div>
- </body>
- </html>
用到的 employees.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <catalog>
- <employee>
- <name>张三</name>
- <address>天津市第一大街</address>
- <zone>4</zone>
- <degree>学士</degree>
- <salary>2440</salary>
- <birth>03/15/2006</birth>
- <married>true</married>
- </employee>
- <employee>
- <name>李四</name>
- <address>北京市朝阳区</address>
- <zone>3</zone>
- <degree>学士</degree>
- <salary>9370</salary>
- <birth>03/06/2006</birth>
- <married>true</married>
- </employee>
- <employee>
- <name>王五</name>
- <address>上海浦东</address>
- <zone>4</zone>
- <degree>博士</degree>
- <salary>6810</salary>
- <birth>05/17/2006</birth>
- <married>false</married>
- </employee>
- <employee>
- <name>赵六</name>
- <address>广州</address>
- <zone>4</zone>
- <degree>学士</degree>
- <salary>9900</salary>
- <birth>03/06/2006</birth>
- <married>true</married>
- </employee>
- <employee>
- <name>孙武</name>
- <address>四川成都</address>
- <zone>3</zone>
- <degree>学士</degree>
- <salary>6440</salary>
- <birth>01/20/2006</birth>
- <married>true</married>
- </employee>
- </catalog>
结论:
Extjs 确实不错。
posted @ 2008-09-04 14:16 啊凡 阅读(425) 评论(0)
编辑
转摘于:http://www.blogjava.net/liaojiyong/archive/2006/10/10/74245.html
PowerDesigner是Sybase公司著名的产品,我从16-bit的Windows开始,就接触并使用这个工具,应该说是有很深的感情。PowerDesigner是DBA和软件架构师设计的利器,随着版本的不断升级,PowerDesigner提供了更多更强大的功能。仅以本篇为开始,向大家介绍一些PowerDesinger中的使用技巧,帮助大家更好地更有效率地使用这个CASE工具。
问题的提出
我曾经在很多网上看到有朋友问起,在 PowerDesigner 的 Physical Model design 中,除了 Oracle 外,选择其他数据库模型,最后生成建数据库脚本的时候,不会自动生成记录表和列注释信息的数据库脚本代码。
请允许我先解释一下这个问题的概念,我们通过 PowerDesigner 设计 oracle 数据库,最后得到的脚本可以像下面这样,其中的 comment 语句就是我上面指出的在 oracle 中保存注释信息的脚本语句,在 oracle 中执行后,可以通过查询 oracle 的数据字典得到这些信息。这样做的好处是,以后查看表结构比较方便,不需要从数据库文档资料中去寻找了,对于团队开发来说,有应用的意义。
|
/*===============================================*/
/* Table: EMP */
/*==============================================*/
create table EMP (
"EmpID" NUMBER,
"EmpName" VARCHAR2(50),
SEX CHAR(1)
)
/
comment on table EMP is ' 职员信息 '
/
comment on column EMP."EmpID" is ' 职员编号 '
/
comment on column EMP."EmpName" is ' 职员姓名 '
/
comment on column EMP.SEX is ' 性别 F: 女 M: 男 '
/
|
SQL Server 也有这样的语句,但是,大家往往发现选择了数据库模型是 SQL Server ,在自动生成建库脚本的时候,即使你选上了生成 comment 语句的选项, powerdesigner 也不会帮你自动生成,是 PowerDesigner 不支持 SQL Server 么,答案显然是否定的。
问题的解决
PowerDesigner 这个工具可以支持任何一种关系型数据库的模型设计,因为,在 PowerDesigner 中每一种数据库模型的特性定义都存储在一个 xdb 文件中,我们可以在 [PowerDesigner_Install_Home]/Resource Files/DBMS 下可以找到。当然,我们也可以自己创建一个新的 xdb ,定义好我们想支持的数据库模型的特性。明白了这一点,这个问题的答案就显而易见。
下面我就简单地说明一下,我使用的是 PowerDesinger9.5 企业版。 Sybase 有些简化版本 ( 如 SQL Moduler) 就不能自定义 xdb ,请大家注意。
1 从菜单 TOOLS->RESOUCES->DBMS ,进入自定义数据模型,参见图 1 。
PBlock>
ASPectratio="t" v:ext="edit">
图1
2 PowerDesigner弹出一个对话框,列表框中列出了当前PowerDesigner支持的
数据库模型(图2)。我们选择创建一个新的。输入名字SQL SERVER 2000(EXTENDED),选择从现有的SQL SERVER 2000复制,这样SQL SERVER 2000(EXTENDED)就包含了原来SQL SERVER2000模型拥有的所有特征(图3)。

图2

图3
3 接下来,我们就需要为SQL Server 2000(Extended)添加支持自动生成表和列注释代码的特性。PowerDesinger把定义的特性用树状结构组织了起来(图4),本篇要做的工作就是定义Script代码特征。我们需要修改Script"Objects"Table"TableComment和Script"Objects"Column"ColumnComment中的脚本特征代码。
4 SQL Server 2000在数据库中保存表和列注释是通过调用系统存储过程sp_addextendedproperty来做的。那么我们只需要,分别写上
|
表级的注释代码是:
EXECUTE sp_addextendedproperty N'MS_Description', N'%COMMENT%', N'user', N'%OWNER%', N'table', N'%TABLE%', NULL, NULL
列级的注释代码是
EXECUTE sp_addextendedproperty N'MS_Description', N'%COMMENT%', N'user', N'%OWNER%', N'table', N'%TABLE%', N'column', N'%COLUMN%'
|
大家看看这些代码,立刻就明白是怎么回事了(图5)。%COMMENT%之类的就是相当于替换变量,PowerDesigner在生成脚本的时候自动替换设计模型中替换变量的值。

图4

图5
5 保存SQL Server 2000(Extended)成一个xdb文件。
6 现在,我们可以创建一个新的Physical Data Model了,数据库模型选SQL Server 2000(Extended)。建立一个表,需要提醒的是,一定要指定一个数据库使用者,一般用dbo(图6)。我们可以为表和列都添加上注释。

图6
7 生成建库脚本,菜单Databases->Generate Database。在图7所示的对话框中,注意要选中comment选项。点击确定,就得到最终的建库脚本。打开看看,我们看到了PowerDesinger根据我们告诉它的规则生成了对应的代码
|
…
EXECUTE sp_addextendedproperty N'MS_Description', N'雇员信息', N'user', N'dbo', N'table', N'Employee', NULL, NULL
go
EXECUTE sp_addextendedproperty N'MS_Description', N'主键ID,自动增加', N'user', N'dbo', N'table', N'Employee', N'column', N'EmployeeID'
go
….
|
8 我们在SQL Server 2000中执行这个角本,然后通过EntERPrise Manager可以看到这些注释。

图7

图8
小结
通过这个实践,我们可以了解PowerDesigner是如何处理不同数据库的SQL语法差异的,这和我们开发应用中的参数文件的思路基本一致。同时,我们也应该认识到,PowerDesinger的功能还是比较多和复杂的,只有熟悉这个工具的功能使用,才能真真提高生产效率
posted @ 2008-09-04 14:11 啊凡 阅读(28) 评论(0)
编辑