Dorado中DataTable使用技巧汇总

2012-05-08  来源:本站原创  分类:其他  人气:3 

1.如何设定表格中行的高度(包括表格头,合计栏)
headerHeight:设定表格头的高度;
footerHeight:设定表格合计栏的高度;
rowHeidht:设定数据行的高度;

dorado-5.0 060904.1658以后的版本支持

2.如何添加动态列(包含自定义的按钮或者自定义的超链接)
Table中直接添加一个column,不需要设定field属性,如name为operation
范例1:
实现效果:表格列中包含一个按钮,功能:单击查看详细
实现方法:
在该列的onRefresh事件中写入代码
var id = record.getValue("id"); //通过表格当前单元框所属的record对象获取主键信息。
var html = "<button onclick=\"showDetail('"+id+"');\" style=\"border-width:1px\">详细</button>" ;
cell.innerHTML = html;

在视图模型的<<functions>>中添加
function showDetail(id){
open("打开详细信息显示页面的url?id="+id);
}

范例2:
表格列中包含一个超级链接,功能:单击查看详细
实现方法:
在该列的onRefresh事件中写入代码
var id = record.getValue("id"); //通过表格当前单元框所属的record对象获取主键信息。
var html = "<a href=\"打开详细信息显示页面的url?id="+id+"\">详细</a>" ;
cell.innerHTML = html;

3.如何在表格的双击事件中打开详细信息页面,如detail.jsp,并传入表格中当前行的某几列信

实现表格的onRecordDBClick事件,写入代码:
open("detail.jsp?param1="+dataset.getValue("field1")+"&param2="+dataset.getValue("field2"));
以上代码需要注意的是,我们提交给detail.jsp页面的参数是通过dataset获取而不是直接从表格中的列获取,这是由于DataTable提供了绑定功能的机制,当我们选中了表格的某一行双击选择时,dataset已经自动的定位到当前行所在的dataset的record对象上,我们通过 dataset.getValue()就是获得表格当前选择行所属的record对象的getValue()方法。

4.如何在页面打开时,自动锁定表格中的指定的两列信息

设定表格的fixedColumn为2,并在Studio设计器中调整自己需要的两个列到DataTable的最前面,如下的配置:
<Control id="tableEmployee" type="DataTable" dataset="datasetEmployee" showDefinedColsOnly="true" width="100%" highlightSelection="false" height="400" fixedColumn="2">
<Column name="married" field="married" sortable="true" rendererType="checkbox" width="40" />
<Column name="employee_name" field="employee_name" sortable="true" width="150" />
<Column name="sex" field="sex" sortable="true" dropDown="dropdownSex" align="center" width="70" editorType="radiogroup" />
<Column name="birthday" field="birthday" sortable="true" width="110" />
<Column name="salary" field="salary" sortable="true" width="150" />
<Column name="web" field="web" sortable="true" readOnly="true" width="160" />
<Column name="operation" label="操作" align="center" readOnly="true" width="180" />
</Control>
就表示当前表格锁定的列为married和employee_name.

5.如何隐藏表格中指定列
虽然表格中的列提供了visible属性,如果我们将它设定为false该列将自动隐藏。
我们建议的最好方式是直接删除视图模型中DataTable中的该列

6.如何在客户端动态的隐藏或则添加表格中指定的列
方法一:
DataTable提供了removeColumn方法用于动态删除列,实现代码如下:
table1.removeColumn("这里填入你想要隐藏的列的name");
table1.refresh();//刷新表格,使新的设定生效
方法二:
DataTable提供getColumn方法获得表格中指定列对象。
var column = table1.getColumn("employee_name");
column.setVisible(false); //设定该列对象的visible属性为false,用以隐藏该列
table1.refresh();//刷新表格,使新的设定生效
方法三:
利用DataTable的addColumn属性动态的添加列
var column = table1.addColumn("employee_name");
column.setField("employee_name");//设定该列绑定到记录集合的employee_name字段
table1.setColumnIndex(column,0);//设定该列在表格中的位置
table1.refresh();//刷新表格,使新的设定生效

7.如何在表格中显示图片
DataTable中的每一个表格框在初始化的以及数据更新的时候都会触发表格中column对象的onRefresh事件,由该事件负责向表格中的 cell中写入显示的信息,利用这个机制。我们可以在表格中需要显示图片的column中的onRefresh事件中加入如下的代码:
cell.innerHTML = "<img src='指定你要显示的图片的资源路径'>";
如:
cell.innerHTML = "<img src='images/man.gif'>";
当然了,很多情况下我们的图片是储存到文件服务器或则数据库中,而不是上面例子中图片存储到war包下。
那么我们就可以修改src的url路径为一个servlet,并且传入表格中当前记录的其它字段信息,以便后台根据关键字获得正确的图片文件。如:
cell.innerHTML = "<img src='photodownload?employeeId="+record.getValue("employee_id")+"'>";
随后我们可以在服务器端新增一个servlet对象。
web.xml中配置为:
<servlet>
<servlet-name>photodownload</servlet-name>
<servlet-class>sample.control.Photodownload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>photodownload</servlet-name>
<url-pattern>/photodownload</url-pattern>
</servlet-mapping>
Servlet的定义为
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String employeeId = request.getParameter("employeeId");
InputStream in = getDownloadFileInputStream(employeeId); //根据employeeId获取要输出文件的文件流对象
if (in != null) {
OutputStream out = response.getOutputStream();
try {
byte[] buffer = new byte[2048];
int len = in.read(buffer);
while (len != -1) {
out.write(buffer, 0, len);
len = in.read(buffer);
}
out.flush();
}
catch (Exception ex) {
/** @todo
* to avoid "java.net.SocketException: Connection reset by peer: socket write error"
*/
}
finally {
in.close();
out.close();
}
}

其中getDownloadFileInputStream是需要开发人员自定义的函数,主要功能是通过employeeId获取一个文件流对象,开发人员可根据具体业务需求决定从文件服务器获得文件还是数据库获得文件。
以下摘抄一段oracle获取数据库文件流的代码:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String employeeId = request.getParameter("employeeId");
Connection con = getConnection();//获取connection
con.setAutoCommit(false);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(
"select fileName, contents from BLOBIMG where id='" + employeeId + "' ");

if (rs.next()) {
String fileName = rs.getString("fileName");
oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob(1);
InputStream ins = blob.getBinaryStream();
response.setContentType("application/unknown");
response.addHeader("Content-Disposition",
"attachment; filename=" + fileName);
OutputStream outStream = response.getOutputStream();
byte[] bytes = new byte[1024];
int len = 0;
while ( (len = ins.read(bytes)) != -1) {
outStream.write(bytes, 0, len);
}
ins.close();
outStream.close();
outStream = null;
con.commit();
con.close();
}
}

8.如何使用表格的汇总行
a.视图模型中设定表格的showFooter属性为true;
b.设定表格绑定的数据集中需要作汇总的字段的supportsSum为true;

根据这个设置,dataset会自动的计算该字段的和,并显示在表格的统计列中。通过该种方式设置的统计值会自动根据表格中统计字段的值变化而重新统计和。并刷新;

后记:
合计列数值的格式化定义:
实现column的onFooterRefresh事件,代码如:
cell.innerHTML="<font color='red'>"+value+"</font>";//value为数据集的统计值,datatable调用该事件时,会先自动计算出这个合计值。
return false;

合计数值之前的一列显示一个汇总项说明:
设置合计列之前的一列(Column)的footValue属性(在xml中直接指定最为简洁)

9.如何自定义表格的CSS风格
默认情况下DataTable的CSS风格是通过doradohome资源目录下(dorado项目中对应的是home)\smartweb\v2\skins\default\skin.css
主要属性有:
/*数据表格*/
.DataTable {
background-color: #F5F7F9;
}
/*数据头*/
.DataTable .HeaderGrid {
color: #405368;
border-width: 1;
border-color: #C5D9E8;
border-style: solid;
border-collapse: collapse;
table-layout: fixed;
}
/*数据头激活单元格*/
.DataTable .HeaderGrid .HotCell {
background-position-y: 100%;
background-image: url(${SkinRoot}/datatable_header_hot.gif);
}
/*统计栏*/
.DataTable .FooterGrid {
background-color: #E1EAF1;
border-width: 1;
border-color: #C5D9E8;
border-style: solid;
border-collapse: collapse;
table-layout: fixed;
}
/*锁定列的数据表格体*/
.DataTable .FixedDataGrid {
background-color: #EDF2F6;
border-width: 1;
border-color: #C5D9E8;
border-style: solid;
border-collapse: collapse;
table-layout: fixed;
}
/*锁定列的数据表格体的行指示器*/
.DataTable .FixedDataGrid .Indicator {
background-color: #E6EDF2;
}
/*锁定列数据表格体的数据行*/
.DataTable .FixedDataGrid .Row {
}

/*数据表格体*/
.DataTable .DataGrid {
background-color: #F5F7F9;
border-width: 1;
border-color: #C5D9E8;
border-style: solid;
border-collapse: collapse;
}
/*数据表格体的数据行*/
.DataTable .DataGrid .Row {
}
/*数据表格体的当前激活行*/
.DataTable .DataGrid .CurrentRow {
background-color: #B7F39B;
}
通过修改这些css配置,我们就可以修改表格的默认风格。

10.如何设定表格列的只读属性

a.(推荐)设定表格列绑定的field的readOnly
b.设定column本身的readOnly属性

11.如何动态设定表格行/列的只读特性
表格中希望根据表格中某一列的数据动态决定该行是否可编辑。
在dataset的afterScroll方法中添加代码:
var flag = dataset.getValue("flag");//获取用于判断的关键字段的值
if (flag==true)
datasetEmployee.setReadOnly(true);//设定dataset的状态为不可编辑
else
datasetEmployee.setReadOnly(false);//设定dataset的状态为可编辑

使用技巧说明:
该处会让所有初次使用的人感到迷惑不解

a.为什么不是设定表格中的数据而是设定dataset的readOnly?
datatable说:很抱歉,我的信息都是dataset管理的。同样状态也由dataset管理。

b.为什么是设定整个dataset的只读属性而不是设定某一个record的只读属性?
dataset说:很是抱歉,虽然我有record对象,但是我的record对象不支持只读属性的设定。

这样我们所有的重担都落到dataset上了,兴好dataset找到它的cursor兄弟。cursor说:反正页面上所有元素显示的值都是由我决定的。当dataset的readOnly为true时,这些元素也不可编辑,所以你直接在我(cussor)进行定位时设定dataset的只读状态设定。于是dataset通过afterScroll方法进行只读状态的设定。

后传:
有人提出新的要求,动态根据字段的值决定某些其它字段的只读属性:
datasetEmployee.setFieldReadOnly("要设定字段的name",true/false);
tableEmployee.getColumn("dept_id").setReadOnly(true/false);
他们都支持动态设定。

12.如何设定表格让它变为不可编辑
a.(推荐)设定表格绑定数据集的readOnly属性,这种设定方法能使所有绑定到该数据集的的组件处于不可编辑状态;
b.设定表格本身的readOnly属性;

13.如何单击表格列中,出现一个下拉选择界面
设定表格列绑定的field的dropDown属性,绑定到本视图模型定义好的dropdown对象。

14.如何禁止table中单击表格列头,表格中数据自动排序的功能
该功能为dataTable默认集成的功能,如果想禁止,设定表格column的sortable为false

15.Column中editorType与rendererType的区别
editorType是在激活单元格做编辑时才起作用;
redererType为数据渲染器,用于以设定的渲染方式显示表格单元格的数据;

16.readOnly与editable的区别
editable为true时:表格不可编辑,但可以新增和删除记录;
readOnly为true时:表格不可编辑,也无法新增和删除记录;

相关文章
  • Dorado中DataTable使用技巧汇总 2012-05-08

    1.如何设定表格中行的高度(包括表格头,合计栏) headerHeight:设定表格头的高度: footerHeight:设定表格合计栏的高度: rowHeidht:设定数据行的高度: dorado-5.0 060904.1658以后的版本支持 2.如何添加动态列(包含自定义的按钮或者自定义的超链接) Table中直接添加一个column,不需要设定field属性,如name为operation 范例1: 实现效果:表格列中包含一个按钮,功能:单击查看详细 实现方法: 在该列的onRefresh

  • Java性能优化技巧汇总 2013-11-16

    这篇文章主要介绍了Java性能优化技巧,汇总了提升java程序性能的常用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例汇总了Java性能优化技巧.分享给大家供大家参考.具体分析如下: 这里参考了些书籍,网络资源整理出来,适合于大多数Java应用 在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1.尽量使用final修饰符. 带有final修饰符的类是不可派生的.在JAVA核心API中,有许多应用final的例

  • C#中DataTable排序.检索.合并等操作实例 2014-01-04

    这篇文章主要介绍了C#中DataTable排序.检索.合并等操作实例,其中详细介绍了DataTable.Select的一些注意问题和使用技巧等,需要的朋友可以参考下 一.排序1.获取DataTable的默认视图 2.对视图设置排序表达式 3.用排序后的视图导出的新DataTable替换就DataTable(Asc升序可省略,多列排序用","隔开) 1).重生法 dstaset.Tables.Add(dt) dataset.Tables(0).DefaultView.Sort = &qu

  • JS 模态对话框和非模态对话框操作技巧汇总 2014-02-14

    模态窗口javascript 技巧包括传值.打开.刷新以及相关实例学习,感兴趣的朋友可以参考下哈 模态窗口 javascript 技巧汇总(传值.打开.刷新) 1.要弹出的页面中,一定要保证<head></head>标签间有<base target="_self">,否则会弹出的模态窗口上,点击按钮时,会再次弹出一个新页面. 2.被弹出页面的按钮的事件处理中,应该有Response.Write(new Function().ClosePage());

  • Asp.Net性能优化技巧汇总 2014-03-12

    这篇文章主要介绍了Asp.Net性能优化技巧汇总,非常实用的归纳总结,需要的朋友可以参考下 本文搜集汇总了Asp.net性能优化的各种技巧,对于Asp.Net开发人员有很好的参考借鉴价值.具体内容如下: 一.选择会话状态存储方式 在Webconfig文件配置: <sessionState mode="???" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data

  • C#中Response.Write常见问题汇总 2014-03-16

    这篇文章主要介绍了C#中Response.Write常见问题汇总,总结了C#中Response.Write的常用技巧,非常实用,需要的朋友可以参考下 本文实例汇总了C#中Response.Write的常见问题,分享给大家供大家参考之用.具体分析如下: 问题一: Response.Write 后连接Response.Redirect ,则Response.Write无法显示,直接跳转入Response.Redirect 的页面. 解决方式: Response.Write("<script l

  • C#中datatable序列化与反序列化实例分析 2014-06-20

    这篇文章主要介绍了C#中datatable序列化与反序列化,是datatable的常用技巧,需要的朋友可以参考下 本文实例讲述了C#中datatable序列化与反序列化,分享给大家供大家参考.具体方法如下: 一.datatable序列化 public string getSendDetailQuery(DateTime timeS, DateTime timeE, string sccount) { try { SmsOperate so = new SmsOperate(); //得到dt D

  • VC小技巧汇总之对话框技巧 2014-06-26

    这篇文章主要介绍了VC小技巧汇总之对话框技巧,非常实用!对于进行VC开发有一定的参考借鉴价值,需要的朋友可以参考下 本文搜集汇总了VC中关于对话框常用的一些技巧,对于进行VC开发由于一定的参考借鉴价值. 1.如何修改对话框的背景色: 在对话框的OnPaint()函数中加入下面语句: CRect rect; GetClientRect(&rect); //计算对话框的尺寸 dc.FillSolidRect(&rect,RGB(192,248,202)); //绘制对话框背景色 2.如何让弹出

  • ThinkPHP中的常用查询语言汇总 2014-07-15

    这篇文章主要介绍了ThinkPHP中的常用查询语言汇总,是ThinkPHP中常用的技巧,在项目开发中非常有实用价值,需要的朋友可以参考下 本文实例汇总了ThinkPHP中的常用查询语言,供大家参考之用.相信能给大家ThinkPHP开发带来一定的帮助.具体如下: 一.普通查询: 在查询带入where条件等,最少有三种形式 1.字符串形式: 'id>5 and id<9' 2.数组形式: 示例代码如下: $user=M('user'); $data['username']='liwenkai';

  • Python中列表(list)操作方法汇总 2014-09-01

    这篇文章主要介绍了Python中列表(list)操作方法汇总,非常实用的技巧,需要的朋友可以参考下 本文实例汇总了Python中关于列表的常用操作方法,供大家参考借鉴.具体方法如下: 一.Python创建列表: sample_list = ['a',1,('a','b')] 二.Python 列表操作: 假设有如下列表: sample_list = ['a','b',0,1,3] 1.得到列表中的某一个值: value_start = sample_list[0] end_value = sam

  • VC小技巧汇总之控件技巧 2014-10-22

    这篇文章主要介绍了VC小技巧汇总之控件技巧,对于VC的开发很有借鉴价值,需要的朋友可以参考下 本文搜集汇总了VC小技巧的控件技巧,对于进行VC开发来说有一定的借鉴价值,具体如下: 1.如何隐藏和显示控件 用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件. 例1: CWnd *pWnd; pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号 pWnd->ShowWindow( SW_HIDE

  • C#中datatable去重的方法 2015-01-30

    这篇文章主要介绍了C#中datatable去重的方法,通过两种不同的方法对比分析了datatable去重的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C#中datatable去重的方法,分享给大家供大家参考.具体方法如下: 这里主要介绍两种方法: 1 数据库直接去除重复 select distinct * from 表名 去除了重复行distinct 2 对 DataTable直接进行操作 复制代码 代码如下: DataTable dt=db.GetDt("select * fr

  • C#之WinForm WebBrowser实用技巧汇总 2015-02-02

    这篇文章主要介绍了C#之WinForm WebBrowser实用技巧汇总,包括常见的各种设置及信息获取等,需要的朋友可以参考下 本文实例汇总了C#中WinForm WebBrowser常见的实用技巧,对于C#程序开发来说有不错的借鉴价值.分别叙述如下: 方法1:获取状态栏信息 void webBrowser1_StatusTextChanged(object sender, EventArgs e) { label1.Text = webBrowser1.StatusText; } 方法2:页面

  • C#中DataTable实现行列转换的方法 2015-03-14

    这篇文章主要介绍了C#中DataTable实现行列转换的方法,实例分析了C#操作DataTable的相关技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C#中DataTable实现行列转换的方法.分享给大家供大家参考.具体实现方法如下: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataTable tt = GetCrossTable(CreateDT()); GridView1

  • VC小技巧汇总之窗口技巧 2015-04-18

    这篇文章主要介绍了VC小技巧汇总之窗口技巧,功能非常实用,对于VC开发有一定借鉴价值,需要的朋友可以参考下 本文搜集汇总了VC小技巧的窗口技巧,对于VC程序开发的窗口设计而言有一定的借鉴价值,详情如下: 1.让窗口一启动就最大化 把应用程序类(CxxxApp)的 InitInstance() 函数中的 m_pMainWnd->ShowWindow(SW_SHOW); 改为 m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED); 则窗口一启动就最大化显示. 2.如何设

  • C#中DataTable删除行的方法分析 2013-10-24

    这篇文章主要介绍了C#中DataTable删除行的方法,包括了常见的几种删除方法的分析,需要的朋友可以参考下 本文实例讲述了C#中DataTable删除行的方法,分享给大家供大家参考之用.具体实现方法如下: 自己的删除例子(drTemp是表,gvSummary是dev 的gridview.单击右键点击grid删除): 1.dtTemp.Rows.RemoveAt(gvSummary.FocusedRowHandle); 2.dtTemp.Rows[gvSummary.FocusedRowHand

  • jQuery源码分析之jQuery中的循环技巧详解 2014-01-19

    这篇文章主要介绍了jQuery源码中的循环技巧,包括各类选择.判断.遍历等等操作,非常实用的技巧,需要的朋友可以参考下 jQuery的源码中有很多值得学习借鉴的技巧,本文即收集了jQuery中出现的各种遍历技巧和场景.具体分析如下: // 简单的for-in(事件) for ( type in events ) { } // 缓存length属性,避免每次都去查找length属性,稍微提升遍历速度 // 但是如果遍历HTMLCollection时,性能提升非常明显,因为每次访问HTMLColle

  • Python中运行并行任务技巧 2014-04-24

    这篇文章主要介绍了Python中运行并行任务技巧,本文给出了两个示例,并用map来处理并行任务,需要的朋友可以参考下 示例 标准线程多进程,生产者/消费者示例: Worker越多,问题越大 # -*- coding: utf8 -*- import os import time import Queue import threading from PIL import Image def create_thumbnail(filename, size=(128, 128)): try: fp,

  • Delphi中对时间操作方法汇总 2014-07-30

    这篇文章主要介绍了Delphi中对时间操作方法汇总,可以对Delphi的时间操作有一个更加深入的了解,需要的朋友可以参考下 一般来说在delphi中用于描述时间的有几种数据结构,而对时间的操作,实质上就是对这些结构的操作. TDateTime类型: Delphi中最常用的表示日期时间的数据类型TDateTime类型,和普通的整形数一样,你可以给日期定义一个日期型变量以便在程序中进行操作.TdateTime类型实质上是一个Double型的数,在Delphi中是这样定义TdateTime类型: ty

  • Java编程中的一些常见问题汇总 2014-10-06

    这篇文章主要介绍了Java编程中的一些常见问题汇总,本文总结的都是一些Java代码中比较典型的错误,需要的朋友可以参考下 本文列举了我在周围同事的Java代码中看到的一些比较典型的错误.显然,静态代码分析(我们团队用的是qulice)不可能发现所有的问题,这也是为什么我要在这里列出它们的原因. 如果你觉得少了什么,请不吝赐教,我会很乐意把它们加上. 下面列出的所有这些错误基本都与面向对象编程有关,尤其是Java的OOP. 类名 读下这篇短文"什么是对象".类应该是真实生活中的一个抽象实