diff --git a/Doc/GridView改用ObjectDataSource計畫.md b/Doc/GridView改用ObjectDataSource計畫.md
index 02b6983..e687108 100644
--- a/Doc/GridView改用ObjectDataSource計畫.md
+++ b/Doc/GridView改用ObjectDataSource計畫.md
@@ -29,8 +29,8 @@
| 11 | forms/customer/fmRasn.ascx | gvRASN_RABRH | dsRASN_RABRH1 | RASN+BCLS | RasnDAC(+Select) | **完成** |
| 12 | forms/customer/fmRasn.ascx | RASNGrid | dsRASNGrid | RASN/BPJB/BPSNView | RasnDAC(+Select) | **完成** |
| 13 | forms/customer/fmRpfe.ascx | RPFEGrid | dsRPFEGrid | RPFE | 無→RpfeDAC | **完成** |
-| 14 | forms/flow/fmSign.ascx | gvRPAB2 | dsRPAB2 | RPAB | RpabDAC | 待辦 |
-| 15 | forms/flow/fmSign.ascx | gvRPAB | dsRPAB | RPAB | RpabDAC | 待辦 |
+| 14 | forms/flow/fmSign.ascx | gvRPAB2 | dsRPAB2 | RPAB | RpabDAC(+Select) | **完成** |
+| 15 | forms/flow/fmSign.ascx | gvRPAB | dsRPAB | RPAB | RpabDAC(+Select) | **完成** |
| 16 | forms/summary/fmSalaryCalc.ascx | GridView1 | dsSACD | SACD | 無 | 待辦 |
| 17 | forms/worker/fmBpsn.ascx | GridView1 | dsBPSNGrid | BPSNView | BpsnDAC | **進行中** |
| 18 | forms/worker/fmRowk.ascx | gvROWK | dsROWKGrid | ROWK | 無 | 待辦 |
@@ -151,3 +151,4 @@
| 2026-09-10 | 轉換 fmBprm(BPRM):BprmDAC 新增 SelectPage/SelectCount;dsBPRMGrid 改 ObjectDataSource;dsBPRM_Selected 拆分為 grid/form 兩個事件;編譯通過 |
| 2026-09-10 | 轉換 fmRasn(RASN,3 個 Grid):RasnDAC 新增 SelectPage/SelectCount 及 SelectRAENO/SelectRABRH;三個 datasource 改 ObjectDataSource;Search/Selected 調整;編譯通過 |
| 2026-09-10 | 轉換 fmRpfe(RPFE):新增 RpfeDAC(SelectPage/SelectCount);dsRPFEGrid 改 ObjectDataSource;編譯通過 |
+| 2026-09-10 | 轉換 fmSign(RPAB):RpabDAC 新增 SelectRPAB;dsRPAB2/dsRPAB 改 ObjectDataSource;dsRPAB2_Selecting 改 ODS 事件;編譯通過 |
diff --git a/Web/App_Code/DAC/RpabDAC.cs b/Web/App_Code/DAC/RpabDAC.cs
index e67f3c5..c24ba6c 100644
--- a/Web/App_Code/DAC/RpabDAC.cs
+++ b/Web/App_Code/DAC/RpabDAC.cs
@@ -12,6 +12,7 @@ using System.ComponentModel;
///
/// 人員差勤簽核檔
///
+[DataObject(true)]
public class RpabDAC : Wellan.Data.WDAC
{
private string _select =
@@ -289,4 +290,18 @@ public class RpabDAC : Wellan.Data.WDAC
AddParam(cmd, "OLD_RPREN", RPREN);
Query.ExecuteNonQuery(tran.Connection, tran, cmd);
}
+
+ ///
+ /// 取得簽核關卡明細 (已簽核)
+ ///
+ [DataObjectMethod(DataObjectMethodType.Select)]
+ public DataTable SelectRPAB(string RPREN)
+ {
+ DbCommand cmd = Query.NewCommand(
+ @"SELECT RPANO, RPAPN, RPENO, RPDAT, RPAPP, RPDOC
+ FROM RPAB
+ WHERE RPREN = @RPREN AND RPDAT IS NOT NULL");
+ cmd.Parameters.Add(Query.NewParameter("RPREN", RPREN));
+ return Query.Select(cmd);
+ }
}
\ No newline at end of file
diff --git a/Web/forms/flow/fmSign.ascx b/Web/forms/flow/fmSign.ascx
index 0aed599..32d3a15 100644
--- a/Web/forms/flow/fmSign.ascx
+++ b/Web/forms/flow/fmSign.ascx
@@ -690,13 +690,13 @@
-
-
+
@@ -2589,13 +2589,13 @@
-
+
-
+
diff --git a/Web/forms/flow/fmSign.ascx.cs b/Web/forms/flow/fmSign.ascx.cs
index 9e86332..224fe1c 100644
--- a/Web/forms/flow/fmSign.ascx.cs
+++ b/Web/forms/flow/fmSign.ascx.cs
@@ -86,10 +86,8 @@ public partial class forms_flow_fmSign : Wellan.Web.UI.WUserControlBase
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
- dsRPAB.ConnectionString = ConnectionString;
dsRPARForm.ConnectionString = ConnectionString;
dsRPAR_RPTYP.ConnectionString = ConnectionString;
- dsRPAB2.ConnectionString = ConnectionString;
rparDao = new RparDAC(Query);
rpabDao = new RpabDAC(Query);
bsgpDao = new BsgpDAC(Query);
@@ -1746,11 +1744,10 @@ public partial class forms_flow_fmSign : Wellan.Web.UI.WUserControlBase
RPARGrid2.DataBind();
}
- protected void dsRPAB2_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
+ protected void dsRPAB2_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
if (RPARGrid2.SelectedValue != null)
- e.Command.Parameters["@RPREN"].Value = RPARGrid2.SelectedValue;
- //(sender as SqlDataSource).SelectParameters["RPREN"].DefaultValue = WDAC.GetStringValue(RPARGrid2.SelectedValue);
+ e.InputParameters["RPREN"] = RPARGrid2.SelectedValue;
}
protected string GetAttachLink(string RPREN)