diff --git a/Doc/GridView改用ObjectDataSource計畫.md b/Doc/GridView改用ObjectDataSource計畫.md index 77e11e0..4fbb4f4 100644 --- a/Doc/GridView改用ObjectDataSource計畫.md +++ b/Doc/GridView改用ObjectDataSource計畫.md @@ -23,7 +23,7 @@ | 5 | forms/customer/fmBpabSmall.ascx | gvBPAB | dsBPABGrid | BPAB | 無→BpabDAC | **完成** | | 6 | forms/customer/fmBpja.ascx | gvBPJA | dsBPJAGrid | BPJA | 無→BpjaDAC | **完成** | | 7 | forms/customer/fmBpjb.ascx | gvBPJB | dsBPJBGrid | BPJB | 無→BpjbDAC | **完成** | -| 8 | forms/customer/fmBprj.ascx | gvBPRJ | dsBPRJGrid | BPRJ | BprjDAC | 待辦 | +| 8 | forms/customer/fmBprj.ascx | gvBPRJ | dsBPRJGrid | BPRJ | BprjDAC(+Select) | **完成** | | 9 | forms/customer/fmBprm.ascx | gvBPRM | dsBPRMGrid | BPRM | BprmDAC | 待辦 | | 10 | forms/customer/fmRasn.ascx | gvRASN_RAENO | dsRASN_RAENO1 | RASN+BPSNView | RasnDAC | 待辦 | | 11 | forms/customer/fmRasn.ascx | gvRASN_RABRH | dsRASN_RABRH1 | RASN+BCLS | RasnDAC | 待辦 | @@ -147,3 +147,4 @@ | 2026-09-10 | 轉換 fmBpab / fmBpabBig / fmBpabSmall(BPAB):新增 BpabDAC(SelectPage/SelectCount,mode 區分科目/大類/小類);三檔 dsBPABGrid 改 ObjectDataSource;編譯通過 | | 2026-09-10 | 轉換 fmBpja(BPJA):新增 BpjaDAC(SelectPage/SelectCount/SelectBPJAIndex);dsBPJAGrid 改 ObjectDataSource;編譯通過 | | 2026-09-10 | 轉換 fmBpjb(BPJB):新增 BpjbDAC(SelectPage/SelectCount);dsBPJBGrid 改 ObjectDataSource;編譯通過 | +| 2026-09-10 | 轉換 fmBprj(BPRJ):BprjDAC 新增 SelectPage/SelectCount/SelectBPRJIndex(含 LAST_YEAR 排序);dsBPRJGrid 改 ObjectDataSource;編譯通過 | diff --git a/Web/App_Code/DAC/BprjDAC.cs b/Web/App_Code/DAC/BprjDAC.cs index f076854..0635acf 100644 --- a/Web/App_Code/DAC/BprjDAC.cs +++ b/Web/App_Code/DAC/BprjDAC.cs @@ -5,12 +5,15 @@ using System.Configuration; using System.Data.Common; using System.Collections; using System.Collections.Generic; +using System.ComponentModel; +using System.Text; using Wellan.Data; using Wellan.Common; /// /// BprjDAC 的摘要描述 /// +[DataObject(true)] public class BprjDAC : Wellan.Data.WDAC { public BprjDAC() @@ -28,4 +31,100 @@ public class BprjDAC : Wellan.Data.WDAC { this._query = query; } + + private const string LastYearExpr = + "(SELECT TOP 1 BPYER FROM BPAA WHERE BPAA.BPPNM = BPRJ.BPPNM ORDER BY BPYER DESC)"; + + /// + /// 客戶專案 Grid 分頁查詢 + /// + [DataObjectMethod(DataObjectMethodType.Select)] + public DataTable SelectPage(int startRowIndex, int maximumRows, string BPNUM, string BPPNM, string BPPME) + { + DbCommand cmd = Query.NewCommand(); + + StringBuilder filter = new StringBuilder(); + BuildFilter(filter, cmd, BPNUM, BPPNM, BPPME); + + cmd.CommandText = String.Format( + @"SELECT * FROM + ( + SELECT X.*, ROW_NUMBER() OVER (ORDER BY LAST_YEAR DESC, BPNUM, BPPNM) AS ROWID + FROM + ( + SELECT *, {0} LAST_YEAR FROM BPRJ WHERE 1=1 {1} + ) X + ) AS TMP + WHERE ROWID BETWEEN @STARTROWINDEX + 1 AND @STARTROWINDEX + @MAXIMUMROWS + ORDER BY ROWID", + LastYearExpr, 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 BPNUM, string BPPNM, string BPPME) + { + DbCommand cmd = Query.NewCommand(); + + StringBuilder filter = new StringBuilder(); + BuildFilter(filter, cmd, BPNUM, BPPNM, BPPME); + + cmd.CommandText = String.Format("SELECT COUNT(*) FROM BPRJ WHERE 1=1 {0}", filter.ToString()); + return WDAC.GetInt32Value(Query.ExecuteScalar(cmd)); + } + + /// + /// 取得指定專案在查詢結果中的序號 (0 起算) + /// + public int SelectBPRJIndex(string targetBPNUM, string targetBPPNM, string BPNUM, string BPPNM, string BPPME) + { + DbCommand cmd = Query.NewCommand(); + + StringBuilder filter = new StringBuilder(); + BuildFilter(filter, cmd, BPNUM, BPPNM, BPPME); + + cmd.CommandText = String.Format( + @"SELECT ROWID - 1 FROM + ( + SELECT X.BPNUM, X.BPPNM, ROW_NUMBER() OVER (ORDER BY X.LAST_YEAR DESC, X.BPNUM, X.BPPNM) AS ROWID + FROM + ( + SELECT BPNUM, BPPNM, {0} LAST_YEAR FROM BPRJ WHERE 1=1 {1} + ) X + ) AS TMP WHERE BPNUM = @TARGET_BPNUM AND BPPNM = @TARGET_BPPNM", + LastYearExpr, filter.ToString()); + cmd.Parameters.Add(Query.NewParameter("TARGET_BPNUM", targetBPNUM)); + cmd.Parameters.Add(Query.NewParameter("TARGET_BPPNM", targetBPPNM)); + + object o = Query.ExecuteScalar(cmd); + return (o is Int32 || o is Int64) ? WDAC.GetInt32Value(o) : -1; + } + + /// + /// 組出客戶專案 Grid 的查詢條件 (與舊 AddSearch 行為一致) + /// + private void BuildFilter(StringBuilder sb, DbCommand cmd, string BPNUM, string BPPNM, string BPPME) + { + if (!string.IsNullOrEmpty(BPNUM)) + { + sb.Append(" AND BPNUM LIKE @BPNUM1 "); + cmd.Parameters.Add(Query.NewParameter("BPNUM1", BPNUM + "%")); + } + if (!string.IsNullOrEmpty(BPPNM)) + { + sb.Append(" AND BPPNM LIKE @BPPNM1 "); + cmd.Parameters.Add(Query.NewParameter("BPPNM1", BPPNM + "%")); + } + if (!string.IsNullOrEmpty(BPPME)) + { + sb.Append(" AND BPPME LIKE @BPPME1 "); + cmd.Parameters.Add(Query.NewParameter("BPPME1", "%" + BPPME + "%")); + } + } } \ No newline at end of file diff --git a/Web/forms/customer/fmBprj.ascx b/Web/forms/customer/fmBprj.ascx index 4f42648..3aa3c62 100644 --- a/Web/forms/customer/fmBprj.ascx +++ b/Web/forms/customer/fmBprj.ascx @@ -57,10 +57,15 @@ - + + + + + + + = 0) + { + gvBPRJ.PageIndex = rowIndex / gvBPRJ.PageSize; + gvBPRJ.SelectedIndex = rowIndex - gvBPRJ.PageIndex * gvBPRJ.PageSize; + } + + ParamList.Remove("BPNUM"); + ParamList.Remove("BPPNM"); + } } protected string GetBtmeName(object bptme) @@ -155,25 +161,6 @@ public partial class forms_customer_fmBprj : Wellan.Web.UI.WUserControlBase if (gvBPRJ.SelectedIndex == -1) gvBPRJ.SelectedIndex = 0; - // 返回時,回到之前選擇的那一筆 - if (ParamList.ContainsKey("BPNUM") && ParamList.ContainsKey("BPPNM")) - { - string bpnum = WDAC.GetStringValue(ParamList["BPNUM"]); - string bppnm = WDAC.GetStringValue(ParamList["BPPNM"]); - - DataView dv = dsBPRJGrid.Select(new DataSourceSelectArguments()) as DataView; - dv.RowFilter = String.Format("BPNUM='{0}' and BPPNM='{1}'", bpnum, bppnm); - if (dv.Count > 0) - { - int rowIndex = dv.Table.Rows.IndexOf(dv[0].Row); - gvBPRJ.PageIndex = (rowIndex / gvBPRJ.PageSize); - gvBPRJ.SelectedIndex = rowIndex - gvBPRJ.PageIndex * gvBPRJ.PageSize; - } - - ParamList.Remove("BPNUM"); - ParamList.Remove("BPPNM"); - } - fvBPRJ.DataBind(); } @@ -185,10 +172,10 @@ public partial class forms_customer_fmBprj : Wellan.Web.UI.WUserControlBase } // 資料擷取完後的事件 - protected void dsBPRJGrid_Selected(object sender, SqlDataSourceStatusEventArgs e) + protected void dsBPRJGrid_Selected(object sender, ObjectDataSourceStatusEventArgs e) { // 沒有資料,回到查詢畫面 - if (e.AffectedRows == 0) + if (e.ReturnValue is Int32 && WDAC.GetInt32Value(e.ReturnValue) == 0) { if (MultiView1.ActiveViewIndex != 0) MultiView1.ActiveViewIndex = 0;