DataGrid1

Posted on 2005-11-22 13:35  飞鼠  阅读(200)  评论(0)    收藏  举报


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+="&nbsp";
                   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+"頁&nbsp;&nbsp;";
          strReturn+="第"+idtgCurrentPage+"頁&nbsp;&nbsp;&nbsp;&nbsp;";


           //顯示上一標簽組連接符號(<<<)
          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+="&nbsp;&nbsp;&nbsp;第";
           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;
  }