具体工具类代码,请见我上一个博客。
顾名思义,DataTable其实就是一张虚拟数据表,用于存储由数据库select出来的数据。
支持多表查询,以及不同数据库查询数据表的连接。
DataTable 其实 就是一个List,数据表包含许多行,所以我们List定义为DataRow
而DataRow 又会包含很多列: DataColumn(键值对)
现在简单画一个图示:
DataColumn
|
数据表DataTable |
数据行DataRow |
数据列/数据单元 DataColumn |
例:现在我们有两张关系表(父、子) :news为newsType 字表
我们利用DataTable做一次查询
查询结果为:
其中DataTable.outTable(dt);为 封装在DataTable类中的一个静态方法,可以输出一个数据表对象,具体请自己参考代码。
由于我们会经常操作双数据库,也会 常常遇到关联字段查询问题,所以DataTable中 封装了一个用于数据表连接的静态方法。
以sql server 2005 中案件表CaseView以及Oracle数据库中卷宗考评为例。
两表有一公共字段为案件编号,在2005中为id ,在oracle中为 ajbh。
现在写一查询将两数据库中表合一。
其中 连接的具体方法详情,请大家自己去看工具类中方法定义。
以卷宗管理界面为例:
我们对于Action中获取DataTable代码不说,单独看看前台如何使用:
Eval()方法用于输出一行中对应某列来的值,具体 方法 请 大家参考工具类
PageUtil 类包含许多方法,我这里通过一个例子告诉大家如何使用即可,想知道内部实行的同学自己去分析代码,注释很完善。
界面展示 :
对应Action:
核心代码1:
PageUtil page = new PageUtil(10); // 分页控件,首先定义其页面大小
核心代码2:
前台页面使用:
核心界面部分:
对应工具类中方法,有兴趣的 朋友就自己去看吧:
package cdu.yas.xykps.util; /** * @功能描述 通用分页工具类 * @可能的错误 * @作者 叶小钗 * @修改说明 * @修改人 */ public class PageUtil { DataTable dt;// 要返回的数据表 int allRow;// 数据表总行数,总记录数 int totalPage;// 一共多少页 int pageIndex;// 当前页索引,当前第几页 // 基础数据设置 int pageSize; // 每页记录数,每页有多少数据行 boolean isFirstPage;// 当前是否第一页 boolean isLastPage;// 当前是否最后一页 // 人性化设置 String firstPageText = "首页";// 首页名称设置 String lastPageText = "尾页";// 尾页名称设置 String prevPageText = "上一页";// 上一页名字设置 String nextPageText = "下一页";// 下一页名字设置 public PageUtil() { this.pageSize = 10; this.pageIndex = 1; } public PageUtil(int pageSize) { this.pageSize = pageSize; this.pageIndex = 1; } public PageUtil(String firstPageText, String prevPageText, String nextPageText, String lastPageText, int pageSize) { this.pageIndex = 1; this.pageSize = pageSize; this.firstPageText = firstPageText; this.lastPageText = lastPageText; this.prevPageText = prevPageText; this.nextPageText = nextPageText; } // 初始化 public void init() { totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow / pageSize + 1; this.isFirstPage = isFirstPage(); this.isLastPage = isLastPage(); } // 判断当前是否第一页 private boolean isFirstPage() { return pageIndex == 1; } // 判断当前是否最后一页 private boolean isLastPage() { return pageIndex == totalPage; } // 最终返回菜单 public String getToolBar(String urlName, String objectName) { String o = objectName; init(); String s = "<table width='100%' border='0' align='center' cellpadding='0' cellspacing='0' class='right-font08'><tr><td width='50%'>共 <span class='right-text09'>" + totalPage + "</span> 页 | 第 <span class='right-text09'> " + pageIndex + "</span> 页</td><td width='49%' align='right'>[ "; if (isFirstPage) s += firstPageText + " | " + prevPageText + " | "; else { s += " <a class='right-font08' href=" + urlName + "?" + o + ".pageIndex=1 >" + firstPageText + "</a> | "; s += " <a class='right-font08' href=" + urlName + "?" + o + ".pageIndex=" + (pageIndex - 1) + ">" + prevPageText + "</a> | "; } if (isLastPage) s += nextPageText + " | " + lastPageText + " ] </td></tr></table>"; else { s += " <a class='right-font08' href=" + urlName + "?" + o + ".pageIndex=" + (pageIndex + 1) + " >" + nextPageText + "</a> | "; s += " <a class='right-font08' href=" + urlName + "?" + o + ".pageIndex=" + totalPage + ">" + lastPageText + "</a> ] </td></tr></table>"; } return s; } // 最终返回菜单 public String getToolBar1(String urlName, String objectName) { String o = objectName; init(); String s = "共 " + allRow + " 条记录 共 " + totalPage + " 页 当前第 " + pageIndex + " 页 "; if (isFirstPage) s += firstPageText + " " + prevPageText + " "; else { s += " <a href=" + urlName + "?" + o + ".pageIndex=1 > " + firstPageText + "</a> "; s += " <a href=" + urlName + "?" + o + ".pageIndex=" + (pageIndex - 1) + ">" + prevPageText + " </a> "; } if (isLastPage) s += nextPageText + " " + lastPageText + " "; else { s += " <a href=" + urlName + "?" + o + ".pageIndex=" + (pageIndex + 1) + " >" + nextPageText + "</a> "; s += " <a href=" + urlName + "?" + o + ".pageIndex=" + totalPage + ">" + lastPageText + "</a> "; } return s; } // 最终返回菜单 public String getTool(String urlName, String objectName, String id) { String o = objectName; init(); String s = "<table width='100%' border='0' align='center' cellpadding='0' cellspacing='0' ><tr>"; s += "<td width='55%' align='right'> "; if (isFirstPage) s += "[ " + prevPageText + " ] "; else { s += " [ <a class='right-font08' href=" + urlName + "?caseId=" + id + "&" + o + ".pageIndex=" + (pageIndex - 1) + ">" + prevPageText + "</a> ] "; } if (isLastPage) s += " [ " + nextPageText + " ] "; else { s += " [ <a class='right-font08' href=" + urlName + "?caseId=" + id + "&" + o + ".pageIndex=" + (pageIndex + 1) + " > " + nextPageText + "</a> ]"; } s += "</td><td width='40%' align='right' >共 <span >" + totalPage + "</span> 页 | 第 <span >" + pageIndex + "</span> 页 </td><td width='5%' ></td>"; s += "</tr></table>"; return s; } // ///////// /////////////////////////////需要前台取的数据 public DataTable getDt() { return dt; } public int getAllRow() { return allRow; } public int getTotalPage() { return totalPage; } public int getPageIndex() { return pageIndex; } public int getPageSize() { return pageSize; } public String getFirstPageText() { return firstPageText; } public String getLastPageText() { return lastPageText; } public String getPrevPageText() { return prevPageText; } public String getNextPageText() { return nextPageText; } public void setDt(DataTable dt) { this.dt = dt; } public void setAllRow(int allRow) { this.allRow = allRow; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public void setPageIndex(int pageIndex) { this.pageIndex = pageIndex; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public void setFirstPage(boolean isFirstPage) { this.isFirstPage = isFirstPage; } public void setLastPage(boolean isLastPage) { this.isLastPage = isLastPage; } public void setFirstPageText(String firstPageText) { this.firstPageText = firstPageText; } public void setLastPageText(String lastPageText) { this.lastPageText = lastPageText; } public void setPrevPageText(String prevPageText) { this.prevPageText = prevPageText; } public void setNextPageText(String nextPageText) { this.nextPageText = nextPageText; } // }