extjs 在 2.0 之後針對資料擷取的部份,做了大幅度的改善
透過很直覺的定義方式,可以很快的建構出以Grid為base的資料呈現方式
底下要示範的是,如何透過.Net的Web Service以及Ext.data.JsonStore將資料庫中的已完成簽核紀錄快速讀取出來
首先我們先建構.Net的Web Service
qryfinished.asmx 他會在 App_Code下產生一個 qryfinished.aspx
在這邊我們還會需要使用一個 Audits class 來建構我們所需的 Json Array
Imports Microsoft.VisualBasic Public Class Audits |
上述的class就是我們要產生的Json Array的格式
Imports System.Web <WebService(Namespace:="http://xxx/webservices> _ <WebMethod()> _ ReDim oAudits(0) Try strSQL = "select distinct SLIP_NO from CELL_TMP_TB where status='C' order by SLIP_NO" If connWMS Is Nothing Then If connWorkFlow Is Nothing Then If connWMS.State <> Data.ConnectionState.Open Then cmdWMS = New System.Data.SqlClient.SqlCommand(strSQL, connWMS) drWMS = cmdWMS.ExecuteReader() Do While drWMS.Read() If connWorkFlow.State <> Data.ConnectionState.Open Then sqlCommand = New System.Data.SqlClient.SqlCommand(strSQL, connWorkFlow) drWorkflow = sqlCommand.ExecuteReader() starttime = drWorkflow.GetDateTime(drWorkflow.GetOrdinal("StartTime")).ToString() oAudits(iCount - 1) = New Audits() GetERP(oAudits(iCount - 1), pb_no) strSQL = "select top 1 * from Audits NOLOCK where ReferenceNo='" + pb_no + "' order by SignTime desc" connWorkFlow1 = getSqlConnection("cnnWorkFlow") drWorkflow1 = sqlCommand1.ExecuteReader() oAudits(iCount - 1).Diff = getSignTime(CDate(starttime), CDate(signtime)) drWMS.Close() End Class |
回傳的 Json String
{"totalCount":1,"data":[{"sno":1,"InstanceID":"7C038193C70EBC50482573C500328A3B","ReferenceNo":"XX -7C0358","Version":null,"FTime":null,"StartTime":"2008/1/3 下午 05:12:02","SignTime":"2008/1/3 下午 05:52:00","UserID":"nnnnnn","UserName":"AAA","ApproverID":null,"ApproverName":null,"Actions":"確認","Diff":"39分58秒","vendor":"XXXX","dept":"XXX"}]} |
由於JasonStore要回傳的是一個格式化過的Json Array資料
所以我們要另外建構一個qryfinished2.aspx透過它來呼叫qryfinished這個Web Service
並透過Web Service中的ToJSONString將Json Array以序列化的方式回傳到前端網頁中
Partial Class qryfinished2 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load JSONString = myJSONObject.ToJSONString(uid) |
qryfinished2.aspx, 只呈現 Json String
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="qryfinished2.aspx.vb" Inherits="qryfinished2" %> |
建構好Web Service及呈現Json String的網頁後,接下來我們要建構 extjs 的UI部分
/* Ext.onReady(function(){ Ext.QuickTips.init(); // turn on validation errors beside the field globally // create the Data Store fs.render('form-ct'); // 將 FormPanel render 在 "form-ct" 這個 div tag 中 store.load(); // 讀取資料 fs.getTopToolbar().add('->', { |
在給前端查詢的頁面中,我們只要將 define 好的 pgfinished.js include 進來即可
<%@ Page Language="VB" MasterPageFile="~/qryMasterPage.master" AutoEventWireup="false" CodeFile="dc_finished.aspx.vb" Inherits="dc_finished" %> |
部份程式在Master Page 中
<%@ Master CodeFile="qryMasterPage.master.vb" Inherits="qryMasterPage" Language="VB" %> <script src="js/ext-2.0/ext-all.js" type="text/javascript"></script> <link href="menus.css" rel="stylesheet" type="text/css" /> <script type="text/javascript"> </script> </head> <script src="js/ext-2.0/examples/examples.js" type="text/javascript"></script> <br /> |
完成圖
建構 extjs 的 Application 也是符合 MVC 的規範
Model: Web Service
View: HTML
Controller: extjs
以這樣的方式去思考,就比較容易清楚掌握該如何撰寫 extjs 的 Application 了
2 意見
路過看到你也是ExtJs的同好!
Reply你使用Audits當中介再將它轉成json,
其實我都用LINQ+ LINQ to JSON的.net 元件
從db直接取資料轉成json可以省去不少功夫
http://james.newtonking.com/archive/2008/02/11/linq-to-json-beta.aspx
這種ExtJs宣告方式很方便
Reply張貼留言