第3個jqGrid範例: XML與XML STRING格式

如果將datatype設定為XML或XMLSTRING時,就能使用XML格式當做資料來源。XML資料儲放在程式外部時使用”XML”,要使用內嵌於程式裡時則使用”XMLSTRING”。

伴隨XML資料來源必須指定取得資料的網址,使用url定義主機端的資料提供程式,或者直接指定一個XML檔當做網址也可以。以下範例my_xmlex.jsp改寫自範例資料夾裡的xmlex.html;請注意我把第一個colNames欄位的標題設定成紅色字體:

< %@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
< %@ include file="/jqgrid/jq_inc.jspf" %>
<style type="text/css">
  .altClass {
    background: lightYellow;
    color: red;
  }
</style>
</head>
<table id="list1"></table>
<div id="pager1"></div>
<br />
<br />
</html>

<script type="text/javascript">
  jQuery(document).ready(function () {
    /*$.jgrid.defaults = { recordtext: "記錄 {0} - {1} 共{2}筆",
	    emptyrecords: "無資料",
      loadtext: "載入中...",
		  pgtext: "第{0}頁/共{1}頁",
      altclass: "altClass"
    };*/
    $.jgrid.defaults.altclass = "altClass";  // 奇偶列使用不同的樣式形成斑馬紋

    jQuery("#list1").jqGrid({
      url:'test1_xml.jsp',  // 主機端提供資料的網址
      datatype: "xml",
      colNames:['<font color="red">使用者代碼</font>','姓名', '密碼'],
      colModel:[
        { name:'userid', index:'userid', width:75 },
        { name:'username', index:'username', width:90, sortable:true },
        { name:'passwd', index:'passwd', width:100,align:'center' }
      ],
      rowNum:10,  // 由Server取回10筆
      rowList:[10,20,30],  // 每頁顯示筆數
      pager: jQuery('#pager1'),
      sortname: 'userid',
      sortorder: "desc",
      height: "auto",  // Grid高度
      autowidth: true, // 自動欄寬
      viewrecords: true,
      altRows: true,
      //footerrow: true,
      gridview: true,  // 設定成true以快速大量資料集之載入
      loadonce: true,  // 只由Server讀一次資料
      rownumbers: true,
      caption:"jqGrid測試3"
    });
    // 要顯示編輯與新增按鈕時使用下列指令
    //jQuery("#list1").jqGrid('navGrid', '#pager1', {edit:true,add:true,del:true});
  });

</script>

選項url:’test1_xml.jsp’指定主機端程式為test_xml.jsp,撰寫此jsp時有幾個重點:

  • jsp要傳回標準的XML格式,第一行必須就是<?xml version=’1.0′ encoding=’utf-8′?>,因此jsp開頭不要加上註解列或指引(directives)列
  • jsp要儲存並設定成UTF-8格式
  • 回傳內容要讓jqGrid辨識出是XML格式,因此要加上下列指令:
      response.setCharacterEncoding("UTF-8");
      response.setHeader("Content-type","text/xml");
    

test1_xml.jsp範例如下:

< %
  response.setCharacterEncoding("UTF-8");
  response.setHeader("Content-type", "text/xml");

  String _sPage = request.getParameter("page"); // get the requested page
  String _sLimit = request.getParameter("rows"); // get how many rows we want to have into the grid
  String _sIndex = request.getParameter("sidx"); // get index row - i.e. user click to sort
  String _sOrder = request.getParameter("sord"); // get the direction
  if (_sPage == null) _sPage = "1";
  if (_sIndex == null) _sIndex = "1";
  if (_sLimit == null) _sLimit = "10";
  int _iLimit = Integer.parseInt(_sLimit);
  if (_iLimit == 0) _iLimit = 10;
  int _iPage = Integer.parseInt(_sPage);

  Class.forName("net.sourceforge.jtds.jdbc.Driver"); // 使用jTDS連接MS SQL Server
  java.sql.Connection _oConn = java.sql.DriverManager.getConnection(
      "jdbc:jtds:sqlserver://localhost/資料庫", "使用者", "密碼");

  double _dTotalPages = 0;
  try {
    String _sSQL = "select top 20 USERID,USERNAME,PASSWD from Users order by USERID";
    java.sql.PreparedStatement _oStmt = _oConn.prepareStatement(_sSQL);
    java.sql.ResultSet rs = _oStmt.executeQuery();
    int _iCount = 0;
    StringBuffer _sbXml = new StringBuffer();  // 把記錄存起來,最後一齊輸出
    while (rs.next()) {
      _iCount++;
      _sbXml.append("<row id=\"" + _iCount + "\">");
      _sbXml.append("<cell>< ![CDATA[" + rs.getString(1) + "]]></cell>");
      _sbXml.append("<cell>< ![CDATA[" + rs.getString(2) + "]]></cell>");
      _sbXml.append("<cell>< ![CDATA[" + rs.getString(3) + "]]></cell>");
      _sbXml.append("\n");
    }
    if( _iCount >0 ) {
      _dTotalPages = Math.ceil(_iCount/_iLimit);
    } else {
      _dTotalPages = 0;
    }
    if (_iPage > _dTotalPages) _iPage = (int) _dTotalPages;
    int _iStart = _iLimit * _iPage - _iLimit; // do not put $limit*($page - 1)

    out.println("< ?xml version=\"1.0\" encoding=\"utf-8\"?>");
    out.println("<rows>");
    out.println("<page>" + _iPage + "</page>");
    out.println("<total>" + ((int) _dTotalPages) + "</total>");
    out.println("<records>" + _iCount + "</records>");
    out.print(_sbXml.toString());
    out.println("</rows>\n");
  } catch (Exception e) {
    out.println("Exception: " + e.getMessage());
  } finally {
    if (_oConn != null) _oConn.close();
  }
%>

執行後畫面如下: jqGrid XML datatype

XML檔案的資料格式

除非有使用選項xmlReader特別指定XML的資料格式,否則標準的XML資料必須為下列格式讓jqGrid讀取:

< ?xml version ="1.0" encoding="utf-8"?>
<rows>
  <page>開始頁數</page>
  <total>總頁數</total>
  <records>總筆數</records>
    <row id = 'unique_rowid'>
      <cell> cellcontent </cell>
      <cell> < ![CDATA[<font color='red'>cell content]]> </cell>
        …
    </row>
    <row id = 'unique_rowid'>
      <cell> cellcontent </cell>
      <cell> < ![CDATA[<font color='red'>cell content]]> </cell>
        …
    </row>
      …
</rows>

url除了指定JSP檔案外,也可以直接指定XML檔,例如:url: "test1.xml"。範例test1_xml.jsp產生的資料內容如下。:

< ?xml version="1.0" encoding="utf-8"?>
<rows>
<page>1</page>
<total>2</total>
<records>20</records>
<row id="1"><cell>< ![CDATA[AARON.LIN]]></cell><cell>< ![CDATA[林大龍]]></cell><cell>< ![CDATA[123]]></cell></row>
<row id="2"><cell>< ![CDATA[ABBY.LIANG]]></cell><cell>< ![CDATA[梁小惠]]></cell><cell>< ![CDATA[456]]></cell></row>
<row id="3"><cell>< ![CDATA[ABEL.LEE]]></cell><cell>< ![CDATA[李中彬]]></cell><cell>< ![CDATA[123]]></cell></row>
<row id="4"><cell>< ![CDATA[AGE.WANG]]></cell><cell>< ![CDATA[王大軍]]></cell><cell>< ![CDATA[456]]></cell></row>
<row id="5"><cell>< ![CDATA[AIR.WEI]]></cell><cell>< ![CDATA[魏中中]]></cell><cell>< ![CDATA[789]]></cell></row>
<row id="6"><cell>< ![CDATA[ALB.YEH]]></cell><cell>< ![CDATA[葉小光]]></cell><cell>< ![CDATA[123]]></cell></row>
<row id="7"><cell>< ![CDATA[ALEX.HUANG]]></cell><cell>< ![CDATA[黃大智]]></cell><cell>< ![CDATA[456]]></cell></row>
<row id="8"><cell>< ![CDATA[ALICE.HUANG]]></cell><cell>< ![CDATA[黃中英]]></cell><cell>< ![CDATA[789]]></cell></row>
<row id="9"><cell>< ![CDATA[AMY.CHUANG]]></cell><cell>< ![CDATA[鍾小梅]]></cell><cell>< ![CDATA[abc]]></cell></row>

<row id="10"><cell>< ![CDATA[AMY.WU]]></cell><cell>< ![CDATA[巫大瑢]]></cell><cell>< ![CDATA[def]]></cell></row>
<row id="11"><cell>< ![CDATA[ANBEY.XIE]]></cell><cell>< ![CDATA[謝中彬]]></cell><cell>< ![CDATA[ghi]]></cell></row>
<row id="12"><cell>< ![CDATA[ANDREW.LIN]]></cell><cell>< ![CDATA[林小宇]]></cell><cell>< ![CDATA[123]]></cell></row>
</rows>

內嵌式的xmlstring也是非常簡單,把url換成datastr就可以了:

< %@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
< %@ include file="/jqgrid/jq_inc.jspf" %>
<style type="text/css">
  .altClass {
    background: lightYellow;
    color: red;
  }
</style>
</head>
<table id="list1"></table>
<div id="pager1"></div>
<br />
<br />
</html>

<script type="text/javascript">
  // 把XML內嵌到JavaScript的變數裡
  var _sXmlString = "< ?xml version='1.0' encoding='utf-8'?>"+
  "<rows>"+
  "<page>1</page>"+
  "<total>2</total>"+
  "<records>20</records>"+
  "<row id='1'><cell>< ![CDATA[AARON.LIN]]></cell><cell>< ![CDATA[林大龍]]></cell><cell>< ![CDATA[123]]></cell></row>"+
  "<row id='2'><cell>< ![CDATA[ABBY.LIANG]]></cell><cell>< ![CDATA[梁小惠]]></cell><cell>< ![CDATA[456]]></cell></row>"+
  "<row id='3'><cell>< ![CDATA[ABEL.LEE]]></cell><cell>< ![CDATA[李中彬]]></cell><cell>< ![CDATA[123]]></cell></row>"+
  "<row id='4'><cell>< ![CDATA[AGE.WANG]]></cell><cell>< ![CDATA[王大軍]]></cell><cell>< ![CDATA[456]]></cell></row>"+
  "<row id='5'><cell>< ![CDATA[AIR.WEI]]></cell><cell>< ![CDATA[魏中中]]></cell><cell>< ![CDATA[789]]></cell></row>"+
  "<row id='6'><cell>< ![CDATA[ALB.YEH]]></cell><cell>< ![CDATA[葉小光]]></cell><cell>< ![CDATA[123]]></cell></row>"+
  "<row id='7'><cell>< ![CDATA[ALEX.HUANG]]></cell><cell>< ![CDATA[黃大智]]></cell><cell>< ![CDATA[456]]></cell></row>"+
  "<row id='8'><cell>< ![CDATA[ALICE.HUANG]]></cell><cell>< ![CDATA[黃中英]]></cell><cell>< ![CDATA[789]]></cell></row>"+
  "<row id='9'><cell>< ![CDATA[AMY.CHUANG]]></cell><cell>< ![CDATA[鍾小梅]]></cell><cell>< ![CDATA[abc]]></cell></row>"+
  "<row id='10'><cell>< ![CDATA[AMY.WU]]></cell><cell>< ![CDATA[巫大瑢]]></cell><cell>< ![CDATA[def]]></cell></row>"+
  "<row id='11'><cell>< ![CDATA[ANBEY.XIE]]></cell><cell>< ![CDATA[謝中彬]]></cell><cell>< ![CDATA[ghi]]></cell></row>"+
  "<row id='12'><cell>< ![CDATA[ANDREW.LIN]]></cell><cell>< ![CDATA[林小宇]]></cell><cell>< ![CDATA[123]]></cell></row>"+
  "</rows>";

  jQuery(document).ready(function () {
    /*$.jgrid.defaults = { recordtext: "記錄 {0} - {1} 共{2}筆",
	    emptyrecords: "無資料",
      loadtext: "載入中...",
		  pgtext: "第{0}頁/共{1}頁",
      altclass: "altClass"
    };*/
    $.jgrid.defaults.altclass = "altClass";  // 奇偶列使用不同的樣式形成斑馬紋

    jQuery("#list1").jqGrid({
      datatype: "xmlstring",
      datastr: _sXmlString,
      colNames:['<font color="red">使用者代碼</font>','姓名', '密碼'],
      colModel:[
        { name:'userid', index:'userid', width:75 },
        { name:'username', index:'username', width:90, sortable:true },
        { name:'passwd', index:'passwd', width:100,align:'center' }
      ],
      rowNum:10,  // 由Server取回10筆
      rowList:[10,20,30],  // 每頁顯示筆數
      pager: jQuery('#pager1'),
      sortname: 'userid',
      sortorder: "desc",
      height: "auto",  // Grid高度
      autowidth: true, // 自動欄寬
      viewrecords: true,
      altRows: true,
      //footerrow: true,
      gridview: true,  // 設定成true以快速大量資料集之載入
      loadonce: true,  // 只由Server讀一次資料
      rownumbers: true,
      caption:"jqGrid測試3"
    });
    // 要顯示編輯與新增按鈕時使用下列指令
    //jQuery("#list1").jqGrid('navGrid', '#pager1', {edit:true,add:true,del:true});
  });

</script>

範例檔案下載(請用右鍵另存目標)

範例1 Local array: my_localex.html
範例2 Local array 2: my_localex2.jsp
範例3
  1. XML類型: my_xmlex.jsp
  2. XML字串類型: my_xmlstringex.jsp
  3. JSP含入檔: jq_inc.jspf
  4. 產生資料的程式範例:test1_xml.jsp
範例4 資料列處理程式: my_manipex.jsp

##

您可能也會有興趣的類似文章

填寫回應

 

 

 

您可使用這些HTML標籤

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

隨機文章

  1. [Xuite] 發生異常了…? (1)
  2. 用App Launcher建立Windows 7的桌面工具列 
  3. 手動撰寫WordPress隨機文章功能 (2)
  4. Command Prompt Explorer Bar: 將DOS視窗嵌入檔案總管 (4)
  5. Open source的資料庫建模工具:Db Designer Fork 
  6. Joomla! 1.0的系統目錄結構 
  7. [轉貼] 開放原始碼 一飛沖天 (2)
  8. 神似 Google search的x-friend 
  9. 移除ThinkPad的螢幕放大功能 
  10. NetBeans 5.0釋出了! 

歷史熱門文章

  1. 如何手動輸入Plurk的表情圖示? (352,898 點擊/2008-09-29)
  2. 簡單放大Plurk輸入區的方法[修訂] (86,911 點擊/2008-09-29)
  3. 啟用&關閉中華電信ZyXEL P874的無線網路連線功能的步驟[修訂] (83,685 點擊/2011-06-01)
  4. Plurk CSS樣式自訂修改全攻略 (83,022 點擊/2009-07-04)
  5. 網路升級光世代50M/3M與設定ZyXEL P874 (53,115 點擊/2011-05-28)
  6. 輕鬆學會彈指神功-揭露AutoHotkey絕技 (43,107 點擊/2008-04-10)
  7. iPad新手入門技巧 (40,340 點擊/2011-02-05)
  8. 分享世博台灣館主題曲『台灣的心跳聲』MV(附歌詞+下載連結+新歌詞) (38,131 點擊/2010-04-27)
  9. 把HTC Touch HD操作介面換成Spb Mobile Shell,美觀又便利! (37,943 點擊/2009-02-18)
  10. 另一套適用手機的影片轉檔工具:WinAVI 3GP/MP4/PSP/iPod Video Converter (35,892 點擊/2009-04-18)