From b66279e5fa71beb10a7bbb1ac270d1693b6bee9f Mon Sep 17 00:00:00 2001 From: Neo Yang Date: Thu, 10 Sep 2026 11:00:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20fmRsaj=20GridView=20=E6=94=B9=E7=94=A8?= =?UTF-8?q?=20ObjectDataSource?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - RsajDAC 新增 SelectPage/SelectCount - dsRSAJGrid 改 ObjectDataSource;Search/Selected 調整 --- Doc/GridView改用ObjectDataSource計畫.md | 3 +- Web/App_Code/DAC/RsajDAC.cs | 61 +++++++++++++++++++++++++ Web/forms/worker/fmRsaj.ascx | 12 +++-- Web/forms/worker/fmRsaj.ascx.cs | 21 ++------- 4 files changed, 75 insertions(+), 22 deletions(-) diff --git a/Doc/GridView改用ObjectDataSource計畫.md b/Doc/GridView改用ObjectDataSource計畫.md index 82f492d..348d027 100644 --- a/Doc/GridView改用ObjectDataSource計畫.md +++ b/Doc/GridView改用ObjectDataSource計畫.md @@ -37,7 +37,7 @@ | 19 | forms/worker/fmRpar.ascx | RPARGrid | dsRPARGrid | RPAR | RparDAC(+Select) | **完成** | | 20 | forms/worker/fmRparWorker.ascx | RPABGrid | dsRPAB | RPAB | RpabDAC(+Select) | **完成** | | 21 | forms/worker/fmRparWorker.ascx | RPARGrid | dsRPARGrid | RPAR | RparDAC(+Select) | **完成** | -| 22 | forms/worker/fmRsaj.ascx | RSAJGrid | dsRSAJGrid | RSAJ | RsajDAC | 待辦 | +| 22 | forms/worker/fmRsaj.ascx | RSAJGrid | dsRSAJGrid | RSAJ | RsajDAC(+Select) | **完成** | | 23 | forms/worker/fmSendSalaryStrip.ascx | gvSSMS | dsSSMS | SSMS | SsmsDAC | 待辦 | | 24 | forms/worker/fmSendSalaryStrip.ascx | gvSSMSSum | dsSSMSSum | SSMS | SsmsDAC | 待辦 | @@ -155,4 +155,5 @@ | 2026-09-10 | 轉換 fmSalaryCalc(SACD):新增 SacdDAC(SelectByProject);dsSACD 改 ObjectDataSource;編譯通過 | | 2026-09-10 | 轉換 fmRpar(RPAR):RparDAC 新增 SelectPage/SelectCount;dsRPARGrid 改 ObjectDataSource;Search/Selected 調整;編譯通過 | | 2026-09-10 | 轉換 fmRparWorker(RPAR/RPAB):RparDAC 新增 SelectWorkerPage/SelectWorkerCount;RpabDAC 新增 SelectRPABByRPREN;dsRPARGrid/dsRPAB 改 ObjectDataSource;編譯通過 | +| 2026-09-10 | 轉換 fmRsaj(RSAJ):RsajDAC 新增 SelectPage/SelectCount;dsRSAJGrid 改 ObjectDataSource;編譯通過 | | 2026-09-10 | fmRowk(ROWK)保留未轉換:其 Grid 綁定使用 WUserControlBase 的 Grid_View/GridView_DataSource(SqlDataSource)框架與 override Search,無法直接改用 ObjectDataSource,需另案重構 | diff --git a/Web/App_Code/DAC/RsajDAC.cs b/Web/App_Code/DAC/RsajDAC.cs index adfe749..37175f3 100644 --- a/Web/App_Code/DAC/RsajDAC.cs +++ b/Web/App_Code/DAC/RsajDAC.cs @@ -1,12 +1,15 @@ using System; using System.Data; using System.Data.Common; +using System.ComponentModel; +using System.Text; using Wellan.Data; using Wellan.Common; /// /// 薪資加減項資料處理類別 /// +[DataObject(true)] public class RsajDAC : Wellan.Data.WDAC { public RsajDAC() @@ -127,4 +130,62 @@ public class RsajDAC : Wellan.Data.WDAC cmd.Parameters.Add(Query.NewParameter("RSYMM", yymm)); return GetStringValue(Query.ExecuteScalar(cmd)); } + + /// + /// 薪資加減項 Grid 分頁查詢 + /// + [DataObjectMethod(DataObjectMethodType.Select)] + public DataTable SelectPage(int startRowIndex, int maximumRows, string RSENO, string RSPYN) + { + DbCommand cmd = Query.NewCommand(); + + StringBuilder filter = new StringBuilder(); + BuildFilter(filter, cmd, RSENO, RSPYN); + + cmd.CommandText = String.Format( + @"SELECT * FROM + ( + SELECT *, ROW_NUMBER() OVER (ORDER BY RSYMM DESC, RSREN DESC) AS ROWID + FROM RSAJ WHERE 1=1 {0} + ) AS TMP + WHERE ROWID BETWEEN @STARTROWINDEX + 1 AND @STARTROWINDEX + @MAXIMUMROWS + ORDER BY ROWID", + filter.ToString()); + cmd.Parameters.Add(Query.NewParameter("STARTROWINDEX", startRowIndex)); + cmd.Parameters.Add(Query.NewParameter("MAXIMUMROWS", maximumRows)); + + return Query.Select(cmd); + } + + /// + /// 薪資加減項 Grid 查詢筆數 + /// + [DataObjectMethod(DataObjectMethodType.Select)] + public int SelectCount(string RSENO, string RSPYN) + { + DbCommand cmd = Query.NewCommand(); + + StringBuilder filter = new StringBuilder(); + BuildFilter(filter, cmd, RSENO, RSPYN); + + cmd.CommandText = String.Format("SELECT COUNT(*) FROM RSAJ WHERE 1=1 {0}", filter.ToString()); + return WDAC.GetInt32Value(Query.ExecuteScalar(cmd)); + } + + /// + /// 組出薪資加減項 Grid 的查詢條件 (與舊 AddSearch 行為一致) + /// + private void BuildFilter(StringBuilder sb, DbCommand cmd, string RSENO, string RSPYN) + { + if (!string.IsNullOrEmpty(RSENO)) + { + sb.Append(" AND RSENO LIKE @RSENO1 "); + cmd.Parameters.Add(Query.NewParameter("RSENO1", RSENO + "%")); + } + if (!string.IsNullOrEmpty(RSPYN)) + { + sb.Append(" AND RSPYN LIKE @RSPYN1 "); + cmd.Parameters.Add(Query.NewParameter("RSPYN1", RSPYN + "%")); + } + } } \ No newline at end of file diff --git a/Web/forms/worker/fmRsaj.ascx b/Web/forms/worker/fmRsaj.ascx index 5d428a9..0d0e95c 100644 --- a/Web/forms/worker/fmRsaj.ascx +++ b/Web/forms/worker/fmRsaj.ascx @@ -6,10 +6,14 @@ TextMessageId="FMRSAJ.NAME"> - + + + + + +