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">
-
+
+
+
+
+
+