package com.bshine.Util;
import java.util.*;
public class DataGrid {
public DataGrid() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public DataGrid(int dtgID) {
this.dtgID=dtgID;
}
//用於標示DataGrid的ID
private int dtgID=0;
private String[] dtgCurrentPage = new String[] {"1","1","1","1","1"}; /** 當前頁 */
private String[] dtgSelectItem = new String[] {"0","0","0","0","0"}; /** 選取值 */
private String[] checked;
//以下變量用於記錄 DataGrid 的當前頁與選取列
//private String dtgCurrentPage="1"; /** 當前頁 */
//private String dtgSelectItem="0";
private java.util.Hashtable[] ht; /*DataSource*/
private String[] columnText; // :記錄數據索引的Key值
private String[] dtgTitle; // :表頭數組
private String[] dtgRight; // :數字靠右文字靠左原則
int pageSize=0; // : 每頁顯示的筆數
String url=""; // :調用此方法的頁面
String selfURL=""; //本頁面名稱
String selectDisplay=""; //是否顯示選取
String deleteDisplay="none"; //是否顯示刪除
String selectText ="選取";
String deleteText ="刪除";
//換頁面時將所有訊息置空
public void ChangePageClear(String cURL)
{
this.url = cURL; // :調用此方法的頁面
this.dtgCurrentPage[dtgID] = "1"; /** 當前頁 */
this.dtgSelectItem[dtgID] = "0";
this.ht=null ; /*DataSource*/
this.columnText=null; // :記錄數據索引的Key值
this.dtgTitle=null; // :表頭數組
this.dtgRight=null; // :數字靠右文字靠左原則
this.pageSize = 0; // : 每頁顯示的筆數
selectDisplay = ""; //是否顯示選取
deleteDisplay = "none"; //是否顯示刪除
selectText = "選取";
deleteText = "刪除";
}
/* **************************************************************
※ 以下程序段功能: 根具條件產生DataGrid
參數: 1. String URL :調用此方法的頁面
2. java.util.Hashtable ht[] :數據源
3. String[] ColumnText :記錄數據索引的Key值
4. String[] dtgTitle :表頭數組
5. String[] dtgRight :數字靠右文字靠左原則
6. int PageSize : 每頁顯示的筆數
************************************************************** */
public String GetDataGrid_old() throws Exception {
String strReturn="";
int idtgCurrentPage=1;//DataGrid當前頁面
int ItemCount =0; //數據總數
int colSpan ; //PagerStyle佔用縂 <TD> 數目
int pageCount=1; //計算所有數據共有多少頁
if (ht==null)
{
return "<tr><td style= \"display:none\"> </td></tr>\n";
}
else
ItemCount = ht.length; //數據總數
if (columnText==null)
{
return "<tr><td style= \"display:none\"> </td></tr>\n";
}
else
if(ItemCount==0) //沒有數據時則不顯示DataGrid
return "<tr><td style= \"display:none\"> </td></tr>\n";
//PagerStyle佔用縂 <TD> 數目
colSpan = columnText.length + 1;
if(!this.selectDisplay.trim().equals("none") )
colSpan++;
if(!this.deleteDisplay.trim().equals("none") )
colSpan++;
//非法值處理
if(pageSize<1)
{ pageSize=10;}
//計算所有數據共有多少頁
if (ItemCount != 0 && (ItemCount % pageSize) != 0) {
pageCount = (ItemCount / pageSize) + 1;
} else {
pageCount = ItemCount / pageSize;
}
//當請的頁數超出有效值範圍時:
try{
idtgCurrentPage=Integer.parseInt(dtgCurrentPage[dtgID]);
if(idtgCurrentPage<1)
idtgCurrentPage=1;
else if(idtgCurrentPage>pageCount){
idtgCurrentPage=pageCount;
}
}
catch(Exception ex) {
idtgCurrentPage=1;
}
finally{
dtgCurrentPage[dtgID]=String.valueOf(idtgCurrentPage);
}
//DataGrid 表頭列
strReturn+=GetDtgTitle(dtgTitle);
//DataGrid 數據列
strReturn+=GetDtgItem(selfURL,columnText,dtgRight,idtgCurrentPage,pageSize) ;
//DataGrid PagerStyle
strReturn+=GetDtgPagerStyle( selfURL, idtgCurrentPage, pageSize, ItemCount, colSpan);
return strReturn;
}
/*----------------DataGrid 表頭列--------------------*/
private String GetDtgTitle(String[] dtgTitle) throws Exception {
String strReturn = "";
//只寫入一次 </TR>
strReturn += "<tr class=\"GridHeaderStyle\" align=\"center\" >\n";
strReturn += "<td ><nobr>操作</nobr> </td>\n";
strReturn += "<td ><nobr>筆數</nobr> </td>\n";
//循環寫 <TD>
for (int iTitle = 0; iTitle < dtgTitle.length; iTitle++) {
strReturn += "<td><nobr>" + dtgTitle[iTitle] + "</nobr></td>\n";
}
//只寫入一次 </TR>
strReturn += "</tr>\n";
// System.out.println( "-----------------DataGrid 表頭列--------------------\n\n") ;
// System.out.println(strReturn) ;
return strReturn;
}
/*----------------DataGrid 數據列--------------------*/
private String GetDtgItem(String URL,String[] ColumnText,String[] dtgRight,int idtgCurrentPage, int PageSize) throws Exception {
String strReturn = "";
/*-----------------DataGrid 數據列--------------------*/
for(int iRow=0;iRow<ht.length;iRow++) //數據以列循環
{
int dtgItemCount= iRow+1;//數據索引列
//控制換頁(顯示當前頁)
if (dtgItemCount <= (idtgCurrentPage - 1) * PageSize ||
dtgItemCount > idtgCurrentPage * PageSize) {
continue; //如果此筆數據不在dtgCurrentPage所記錄的當前頁的顯示範圍,則跳出循環體
}
//DataGrid數據列的 TR
int selectItem=Integer.parseInt(dtgSelectItem[dtgID]);
if (selectItem == dtgItemCount) { //當前選擇列:突出標示顔色
strReturn +=
" <tr align=\"left\" class=\"SelectedItemStyle\"> \n";
} else if (dtgItemCount % 2 == 0) { //如果是偶數列則使用不同的Css樣式,以示區分
strReturn +=
" <tr align=\"left\" class=\"AlternatingItemStyle\"> \n";
} else { //其它無特殊處理
strReturn += " <tr align=\"left\" > \n";
}
//DataGrid數據列的 固定 <TD>
String strSelect=URL+"?"+"action=Select&dtgSelectItem"+dtgID+"="+dtgItemCount+"";
String onclick="javascript:self.parent.document.Form1.all['action'].value='Select';self.parent.document.Form1.submit();";
strReturn += "<td align=\"center\" ><a onclick=\""+onclick+"\" href=\""+strSelect+"\">選取</a></td>\n";
strReturn += "<td align=\"center\"><nobr>"+dtgItemCount+"</nobr> </td>\n";
//DataGrid數據列的 動態 <TD>
for (int i = 0; i < ColumnText.length; i++) {
//出去空白:空白補:nbsp
String Text= com.bshine.Util.ClsCommFuns.doNull( ht[iRow].get(ColumnText[i]).toString() ) ;
Text+=" ";
System.out.println( "--------"+dtgTitle[i]+"---------"+ColumnText[i]+"--------------------\n\n") ;
if (dtgRight[i].equals("Right")) { //數字靠右對齊
strReturn += "<td align=\"right\" ><nobr>" + Text +
"</nobr></td>\n";
} else {//文字靠左對齊
strReturn += "<td><nobr>" +Text +
"</nobr></td>\n";
}
}//end for (int i = 0; i < ColumnText.length; i++)
strReturn+="</tr>\n";
}//end for(int iRow=0;iRow<ht.length;iRow++) //數據以列循環
// System.out.println( "-----------------DataGrid 數據列--------------------\n\n") ;
// System.out.println(strReturn) ;
return strReturn;
}
/*----------------DataGrid PagerStyle--------------------*/
private String GetDtgPagerStyle(String URL,int idtgCurrentPage, int PageSize,int ItemCount, int colSpan) throws Exception {
String strReturn = "";
System.out.println( "*-----------------DataGrid PagerStyle--------------------*") ;
/*-----------------DataGrid PagerStyle--------------------*/
// int ItemCount = ht.length; //數據總數
// int colSpan = ColumnText.length + 2; //PagerStyle佔用縂 <TD> 數目
int pageCount = 1; //記錄數據集的縂頁數
//計算所有數據共有多少頁
if (ItemCount != 0 && (ItemCount % PageSize) != 0) {
pageCount = (ItemCount / PageSize) + 1;
} else {
pageCount = ItemCount / PageSize;
}
//計算當前列顯示在哪一組 (10頁為一組)
int iCurrentGroup = PageGroup(idtgCurrentPage);
//<TR><TD>
strReturn += " <tr align=\"left\" class=\"GridFooterStyle\"> \n";
strReturn += "<TD colSpan=" + colSpan + " ><nobr>\n";
//共25頁 第2頁
strReturn+="共"+pageCount+"頁 ";
strReturn+="第"+idtgCurrentPage+"頁 ";
//顯示上一標簽組連接符號(<<<)
if ((iCurrentGroup-1) >= 1)
{
int LastPage=(iCurrentGroup-1)*10;
String strPar = URL + "?" + "dtgCurrentPage"+dtgID+"=" + LastPage + "";
strReturn += " <a href=\"" + strPar + "\"> 上10頁 </a> \n";
}
//顯示當前換頁標簽組
for (int j = 1; j <= pageCount; j++) {
String strPar = URL + "?" + "dtgCurrentPage"+dtgID+"=" + j + "";
if (GetPageCount(j,idtgCurrentPage)) { //判斷 j 頁是否為前換頁標簽組
strReturn += " <a href=\"" + strPar + "\">" + j + "</a> \n";
}
}
//顯示下一標簽組連接符號(>>>)
if (iCurrentGroup*10<pageCount)
{
int NextPage=iCurrentGroup*10+1;
String strPar = URL + "?" + "dtgCurrentPage"+dtgID+"=" + NextPage + "";
strReturn += " <a href=\"" + strPar + "\"> 下10頁 </a> \n";
}
//跳轉
strReturn+=" 第";
strReturn+="<input type=\"text\" class=\"gridtextbox\" size=\"3\" name=\"dtgCurrentPage"+dtgID+"\" id=\"dtgCurrentPage"+dtgID+"\" value=\""+idtgCurrentPage+"\">";
strReturn+="頁";
strReturn+="<input class=\"gridbutton\" value=\"跳轉\" type=\"button\" onclick=\"javascript:submit()\">";
strReturn += "</nobr></TD>\n</TR>\n";
/*---------------結束--DataGrid PagerStyle--------------------*/
// System.out.println(strReturn) ;
return strReturn;
}
浙公网安备 33010602011771号