Google Code Prettify

2015年5月2日 星期六

使用 jquery 選擇 grid 中的資料

這裡小小的改寫一下上一篇的例子,說明如何使用 jquery 選擇 grid 中的資料。如下圖所示,是執行出來的結果:


我只是在上方的欄位加入一個得票數欄位及一個儲存的按鍵,如果使用者覺得查詢出來結果有誤,可以點選該筆資料,那麼得票數就會被顯示在上方的欄位中,更改後按儲存。

在 struts2 jquery tag 的習慣裡,只要用到 grid,就會顯示到另一個 jsp 檔案,所以上面的網頁分成了兩個檔案,分別為 AreaResult.jsp 及 AreaResultGrid.jsp。因為接下來要用到 jquery,就要引入 jquery 的函式庫檔,因為 AreaReresult.jsp 是主網頁,所以在這一頁裡加入如下紅色部份所示的指令。而綠色部份則是上面所提到的,接下來要顯示得票數的欄位。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>選區投票結果查詢</title>
<script type="type/javascript" src="../scripts/jquery-1.11.2.min.js"></script>
<sj:head jqueryui="true"/>
</head>
<body>
<s:url var="findElection" action="findElection" />
<s:url var="findCityName" action="findCityName" />
<s:url var="findAreaName" action="findAreaName" />
<s:url var="remoteurl" action="showAreaResult" />
<s:url var="saveurl" action="saveVotes" />
<s:form id="formaAreaResult" theme="xhtml">
<sj:select
label="選擇場次"
        href="%{findElection}"
        id="electionID"
        name="electionID"
        list="electionList"
        emptyOption="false"
        headerKey="-1"
        headerValue="請選擇"
        onChangeTopics="reloadCityName"
    />
<sj:select
label="縣市"         href="%{findCityName}"
        id="cityName"
        name="cityName"
        list="cityNameList"
        emptyOption="false"
        headerKey="-1"
        headerValue="請選擇"
        reloadTopics="reloadCityName"
        onChangeTopics="reloadAreaName"
    /><br/>
     
<sj:select
label="選區"         href="%{findAreaName}"
        id="areaName"
        name="areaName"
        list="areaNameList"
        emptyOption="false"
        headerKey="-1"
        headerValue="請選擇"
        reloadTopics="reloadAreaName"
    />
 
    <sj:textfield label="得票數" id="votes" name="votes" />
</s:form>
     
    <sj:submit
        href="%{remoteurl}"
        targets="showAreaResult"
        value="查詢"
        indicator="indicator"
        button="true"
    />
 
    <sj:submit
        href="%{saveurl}"
        targets="showAreaResult"
        value="儲存"
        indicator="indicator"
        button="true"
    />
<br/><br/>
<sj:div id="showAreaResult" />
</body>
</html>
接下來看一下子網頁要加入那些程式,如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<%@ taglib prefix="sjg" uri="/struts-jquery-grid-tags"%>
<script type="text/javascript">
$.subscribe('rowselect', function(event, data) {
selRowId = event.originalEvent.id;
votes = $('#gridtable').jqGrid ('getCell', selRowId, 'votes');
$('#votes').val(votes);
});
</script>

<s:url var="remoteurl" action="findCandidate" />
<sjg:grid
        id="gridtable"
        caption="候選人得票統計"
        dataType="json"
        href="%{remoteurl}"
        pager="true"
        gridModel="candidateList"
        rowList="10,15,20"
        formIds="formaAreaResult"
        rowNum="15"
        rownumbers="true"
        viewrecords="true"
        shrinkToFit="true"
        onSelectRowTopics="rowselect"
    >
        <sjg:gridColumn name="electionID" index="electionID" title="選舉場次" sortable="false"/>
        <sjg:gridColumn name="cityName" index="cityName" title="縣市" sortable="false"/>
        <sjg:gridColumn name="areaName" index="areaName" title="選區" sortable="true"/>
        <sjg:gridColumn name="votedNo" index="votedNo" title="號次" sortable="true"/>
        <sjg:gridColumn name="name" index="name" title="姓名" sortable="true"/>
        <sjg:gridColumn name="partyName" index="partyName" title="黨籍" sortable="true"/>
        <sjg:gridColumn name="votes" index="votes" title="得票數" sortable="true"/>
        <sjg:gridColumn name="elected" index="elected" title="當選?" sortable="true"/>
    </sjg:grid>
說明一下上面的程式,當使用者按下 grid 中任何一列時,會觸發 onSelectRowTopics 事件 (綠色部份),然後就呼叫 rowselect 這個函式,將 grid 中的 cell 值放入指定的 html 欄位中 (紅色部份)。因為這裡只是要舉例怎麼寫,可以取得 grid 中的 cell 值,所以只抓出一個得票數欄位 (藍色部份)。



沒有留言:

張貼留言