feat: fmRpar GridView 改用 ObjectDataSource
- RparDAC 新增 SelectPage/SelectCount - dsRPARGrid 改 ObjectDataSource;Search/Selected 調整 - fmRowk 保留(框架限制,文檔記錄)
This commit is contained in:
@@ -33,8 +33,8 @@
|
|||||||
| 15 | forms/flow/fmSign.ascx | gvRPAB | dsRPAB | RPAB | RpabDAC(+Select) | **完成** |
|
| 15 | forms/flow/fmSign.ascx | gvRPAB | dsRPAB | RPAB | RpabDAC(+Select) | **完成** |
|
||||||
| 16 | forms/summary/fmSalaryCalc.ascx | GridView1 | dsSACD | SACD | 無→SacdDAC | **完成** |
|
| 16 | forms/summary/fmSalaryCalc.ascx | GridView1 | dsSACD | SACD | 無→SacdDAC | **完成** |
|
||||||
| 17 | forms/worker/fmBpsn.ascx | GridView1 | dsBPSNGrid | BPSNView | BpsnDAC | **進行中** |
|
| 17 | forms/worker/fmBpsn.ascx | GridView1 | dsBPSNGrid | BPSNView | BpsnDAC | **進行中** |
|
||||||
| 18 | forms/worker/fmRowk.ascx | gvROWK | dsROWKGrid | ROWK | 無 | 待辦 |
|
| 18 | forms/worker/fmRowk.ascx | gvROWK | dsROWKGrid | ROWK | 無 | **保留**(使用 WUserControlBase 的 SqlDataSource 框架,需另案) |
|
||||||
| 19 | forms/worker/fmRpar.ascx | RPARGrid | dsRPARGrid | RPAR | RparDAC | 待辦 |
|
| 19 | forms/worker/fmRpar.ascx | RPARGrid | dsRPARGrid | RPAR | RparDAC(+Select) | **完成** |
|
||||||
| 20 | forms/worker/fmRparWorker.ascx | RPABGrid | dsRPAB | RPAB | RpabDAC | 待辦 |
|
| 20 | forms/worker/fmRparWorker.ascx | RPABGrid | dsRPAB | RPAB | RpabDAC | 待辦 |
|
||||||
| 21 | forms/worker/fmRparWorker.ascx | RPARGrid | dsRPARGrid | RPAR | RparDAC | 待辦 |
|
| 21 | forms/worker/fmRparWorker.ascx | RPARGrid | dsRPARGrid | RPAR | RparDAC | 待辦 |
|
||||||
| 22 | forms/worker/fmRsaj.ascx | RSAJGrid | dsRSAJGrid | RSAJ | RsajDAC | 待辦 |
|
| 22 | forms/worker/fmRsaj.ascx | RSAJGrid | dsRSAJGrid | RSAJ | RsajDAC | 待辦 |
|
||||||
@@ -153,3 +153,5 @@
|
|||||||
| 2026-09-10 | 轉換 fmRpfe(RPFE):新增 RpfeDAC(SelectPage/SelectCount);dsRPFEGrid 改 ObjectDataSource;編譯通過 |
|
| 2026-09-10 | 轉換 fmRpfe(RPFE):新增 RpfeDAC(SelectPage/SelectCount);dsRPFEGrid 改 ObjectDataSource;編譯通過 |
|
||||||
| 2026-09-10 | 轉換 fmSign(RPAB):RpabDAC 新增 SelectRPAB;dsRPAB2/dsRPAB 改 ObjectDataSource;dsRPAB2_Selecting 改 ODS 事件;編譯通過 |
|
| 2026-09-10 | 轉換 fmSign(RPAB):RpabDAC 新增 SelectRPAB;dsRPAB2/dsRPAB 改 ObjectDataSource;dsRPAB2_Selecting 改 ODS 事件;編譯通過 |
|
||||||
| 2026-09-10 | 轉換 fmSalaryCalc(SACD):新增 SacdDAC(SelectByProject);dsSACD 改 ObjectDataSource;編譯通過 |
|
| 2026-09-10 | 轉換 fmSalaryCalc(SACD):新增 SacdDAC(SelectByProject);dsSACD 改 ObjectDataSource;編譯通過 |
|
||||||
|
| 2026-09-10 | 轉換 fmRpar(RPAR):RparDAC 新增 SelectPage/SelectCount;dsRPARGrid 改 ObjectDataSource;Search/Selected 調整;編譯通過 |
|
||||||
|
| 2026-09-10 | fmRowk(ROWK)保留未轉換:其 Grid 綁定使用 WUserControlBase 的 Grid_View/GridView_DataSource(SqlDataSource)框架與 override Search,無法直接改用 ObjectDataSource,需另案重構 |
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ using Wellan.Data;
|
|||||||
using Wellan.Common;
|
using Wellan.Common;
|
||||||
using System.Transactions;
|
using System.Transactions;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Text;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -1856,6 +1857,124 @@ public class RparDAC : Wellan.Data.WDAC
|
|||||||
|
|
||||||
return new 打卡檢查Item();
|
return new 打卡檢查Item();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private const string RparGridColumns =
|
||||||
|
@"TRDAT, TRMOD, TRUSR, RPREN, RPNUM, RAITM, RPCNM, RPPYN, RPRDT, RPEDT, RPTYP, FLOOR(RPTCT / 60) AS RPTCT, RPFTR, RPDOC,
|
||||||
|
APPNO, RPAPP, RPAPD, RPAPU, RPADT, RPAPN, RPANO, RPAGT, RPRTM, RPETM, RPUST, RPTC1, RPTC2, RPTC3,
|
||||||
|
RPRSN, RPAGM, ISNULL(RPTCT - FLOOR(RPTCT / 60) * 60, 0) AS RPTMT";
|
||||||
|
|
||||||
|
private const string RparGridWhere = " WHERE ((RPAPN IS NULL) OR ((RPAPN<>'D') AND (RPAPN=RPANO))) ";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 差勤紀錄 Grid 分頁查詢
|
||||||
|
/// </summary>
|
||||||
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||||
|
public DataTable SelectPage(int startRowIndex, int maximumRows, string RPPYN, string RPNUM1, string RPNUM2, string RPRDT1, string RPRDT2, string rparType)
|
||||||
|
{
|
||||||
|
DbCommand cmd = Query.NewCommand();
|
||||||
|
|
||||||
|
StringBuilder filter = new StringBuilder();
|
||||||
|
BuildRparGridFilter(filter, cmd, RPPYN, RPNUM1, RPNUM2, RPRDT1, RPRDT2, rparType);
|
||||||
|
|
||||||
|
cmd.CommandText = String.Format(
|
||||||
|
@"SELECT * FROM
|
||||||
|
(
|
||||||
|
SELECT {0}, ROW_NUMBER() OVER (ORDER BY RPREN) AS ROWID
|
||||||
|
FROM RPAR {1} {2}
|
||||||
|
) AS TMP
|
||||||
|
WHERE ROWID BETWEEN @STARTROWINDEX + 1 AND @STARTROWINDEX + @MAXIMUMROWS
|
||||||
|
ORDER BY ROWID",
|
||||||
|
RparGridColumns, RparGridWhere, filter.ToString());
|
||||||
|
cmd.Parameters.Add(Query.NewParameter("STARTROWINDEX", startRowIndex));
|
||||||
|
cmd.Parameters.Add(Query.NewParameter("MAXIMUMROWS", maximumRows));
|
||||||
|
|
||||||
|
return Query.Select(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 差勤紀錄 Grid 查詢筆數
|
||||||
|
/// </summary>
|
||||||
|
[DataObjectMethod(DataObjectMethodType.Select)]
|
||||||
|
public int SelectCount(string RPPYN, string RPNUM1, string RPNUM2, string RPRDT1, string RPRDT2, string rparType)
|
||||||
|
{
|
||||||
|
DbCommand cmd = Query.NewCommand();
|
||||||
|
|
||||||
|
StringBuilder filter = new StringBuilder();
|
||||||
|
BuildRparGridFilter(filter, cmd, RPPYN, RPNUM1, RPNUM2, RPRDT1, RPRDT2, rparType);
|
||||||
|
|
||||||
|
cmd.CommandText = String.Format("SELECT COUNT(*) FROM RPAR {0} {1}", RparGridWhere, filter.ToString());
|
||||||
|
return WDAC.GetInt32Value(Query.ExecuteScalar(cmd));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BuildRparGridFilter(StringBuilder sb, DbCommand cmd, string RPPYN, string RPNUM1, string RPNUM2, string RPRDT1, string RPRDT2, string rparType)
|
||||||
|
{
|
||||||
|
switch (rparType)
|
||||||
|
{
|
||||||
|
case "0":
|
||||||
|
sb.Append(" AND RPTYP LIKE '0%' ");
|
||||||
|
break;
|
||||||
|
case "1":
|
||||||
|
sb.Append(" AND RPTYP LIKE '1%' ");
|
||||||
|
break;
|
||||||
|
case "21":
|
||||||
|
sb.Append(" AND RPTYP = '21' ");
|
||||||
|
break;
|
||||||
|
case "22":
|
||||||
|
sb.Append(" AND RPTYP = '22' ");
|
||||||
|
break;
|
||||||
|
case "3":
|
||||||
|
sb.Append(" AND RPTYP LIKE '3%' ");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(RPPYN))
|
||||||
|
{
|
||||||
|
sb.Append(" AND RPPYN = @RPPYN1 ");
|
||||||
|
cmd.Parameters.Add(Query.NewParameter("RPPYN1", RPPYN));
|
||||||
|
}
|
||||||
|
|
||||||
|
AppendRparRange(sb, cmd, "RPNUM", RPNUM1, RPNUM2, true);
|
||||||
|
AppendRparRange(sb, cmd, "RPRDT", RPRDT1, RPRDT2, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AppendRparRange(StringBuilder sb, DbCommand cmd, string field, string value1, string value2, bool like)
|
||||||
|
{
|
||||||
|
bool has1 = !string.IsNullOrEmpty(value1);
|
||||||
|
bool has2 = !string.IsNullOrEmpty(value2);
|
||||||
|
|
||||||
|
if (has1 && has2)
|
||||||
|
{
|
||||||
|
sb.AppendFormat(" AND {0} >= @{0}1 AND {0} <= @{0}2 ", field);
|
||||||
|
cmd.Parameters.Add(Query.NewParameter(field + "1", value1));
|
||||||
|
cmd.Parameters.Add(Query.NewParameter(field + "2", value2));
|
||||||
|
}
|
||||||
|
else if (has1)
|
||||||
|
{
|
||||||
|
if (like)
|
||||||
|
{
|
||||||
|
sb.AppendFormat(" AND {0} LIKE @{0}1 ", field);
|
||||||
|
cmd.Parameters.Add(Query.NewParameter(field + "1", value1 + "%"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sb.AppendFormat(" AND {0} >= @{0}1 ", field);
|
||||||
|
cmd.Parameters.Add(Query.NewParameter(field + "1", value1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (has2)
|
||||||
|
{
|
||||||
|
if (like)
|
||||||
|
{
|
||||||
|
sb.AppendFormat(" AND {0} LIKE @{0}2 ", field);
|
||||||
|
cmd.Parameters.Add(Query.NewParameter(field + "2", value2 + "%"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sb.AppendFormat(" AND {0} <= @{0}2 ", field);
|
||||||
|
cmd.Parameters.Add(Query.NewParameter(field + "2", value2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,19 @@
|
|||||||
CssClass="pageTitle"></cc1:WLabel>
|
CssClass="pageTitle"></cc1:WLabel>
|
||||||
<asp:CustomValidator ID="cvMessage"
|
<asp:CustomValidator ID="cvMessage"
|
||||||
runat="server" Display="None"></asp:CustomValidator>
|
runat="server" Display="None"></asp:CustomValidator>
|
||||||
<asp:SqlDataSource ID="dsRPARGrid"
|
<asp:ObjectDataSource ID="dsRPARGrid"
|
||||||
runat="server" ConflictDetection="CompareAllValues"
|
runat="server" TypeName="RparDAC"
|
||||||
SelectCommand="SELECT * FROM RPAR WHERE (1 = 0)"
|
SelectMethod="SelectPage" SelectCountMethod="SelectCount"
|
||||||
ConnectionString="Data Source=(local);Initial Catalog=THINKYU_WEB;Persist Security Info=True;User ID=sa"
|
EnablePaging="true" OnSelected="dsRPARGrid_Selected">
|
||||||
ProviderName="System.Data.SqlClient"
|
<SelectParameters>
|
||||||
OnSelected="dsRPARGrid_Selected"></asp:SqlDataSource>
|
<asp:Parameter Name="RPPYN" Type="String" />
|
||||||
|
<asp:Parameter Name="RPNUM1" Type="String" />
|
||||||
|
<asp:Parameter Name="RPNUM2" Type="String" />
|
||||||
|
<asp:Parameter Name="RPRDT1" Type="String" />
|
||||||
|
<asp:Parameter Name="RPRDT2" Type="String" />
|
||||||
|
<asp:Parameter Name="rparType" Type="String" />
|
||||||
|
</SelectParameters>
|
||||||
|
</asp:ObjectDataSource>
|
||||||
<asp:SqlDataSource ID="dsRPARForm"
|
<asp:SqlDataSource ID="dsRPARForm"
|
||||||
runat="server" InsertCommand="INSERT INTO RPAR
|
runat="server" InsertCommand="INSERT INTO RPAR
|
||||||
(RPREN, RPNUM, RAITM, RPCNM, RPPYN, RPRDT, RPEDT, RPTYP, RPTCT,
|
(RPREN, RPNUM, RAITM, RPCNM, RPPYN, RPRDT, RPEDT, RPTYP, RPTCT,
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ public partial class forms_worker_fmRpar : Wellan.Web.UI.WUserControlBase
|
|||||||
RPRSN, RPAGM, ISNULL(RPTCT - FLOOR(RPTCT / 60) * 60, 0) AS RPTMT";
|
RPRSN, RPAGM, ISNULL(RPTCT - FLOOR(RPTCT / 60) * 60, 0) AS RPTMT";
|
||||||
private string from = " FROM RPAR ";
|
private string from = " FROM RPAR ";
|
||||||
private string where = " WHERE 1=1 ";
|
private string where = " WHERE 1=1 ";
|
||||||
private string order = " ORDER BY RPREN";
|
|
||||||
private FormView RPARForm;
|
private FormView RPARForm;
|
||||||
private Panel RPARPanel;
|
private Panel RPARPanel;
|
||||||
protected string rparType;
|
protected string rparType;
|
||||||
@@ -71,7 +70,6 @@ public partial class forms_worker_fmRpar : Wellan.Web.UI.WUserControlBase
|
|||||||
{
|
{
|
||||||
base.OnInit(e);
|
base.OnInit(e);
|
||||||
dsRPARForm.ConnectionString = ConnectionString;
|
dsRPARForm.ConnectionString = ConnectionString;
|
||||||
dsRPARGrid.ConnectionString = ConnectionString;
|
|
||||||
dsRPAR_RPTYP.ConnectionString = ConnectionString;
|
dsRPAR_RPTYP.ConnectionString = ConnectionString;
|
||||||
|
|
||||||
rparDao = new RparDAC(Query);
|
rparDao = new RparDAC(Query);
|
||||||
@@ -282,21 +280,16 @@ public partial class forms_worker_fmRpar : Wellan.Web.UI.WUserControlBase
|
|||||||
// RPARForm.Visible = true;
|
// RPARForm.Visible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder sql = new StringBuilder();
|
|
||||||
sql.Append(select);
|
|
||||||
sql.Append(from);
|
|
||||||
sql.Append(where);
|
|
||||||
dsRPARGrid.SelectParameters.Clear();
|
|
||||||
|
|
||||||
DateTime RPRDT1, RPRDT2;
|
DateTime RPRDT1, RPRDT2;
|
||||||
CheckDate(_RPRDT1, out RPRDT1);
|
CheckDate(_RPRDT1, out RPRDT1);
|
||||||
CheckDate(_RPRDT2, out RPRDT2);
|
CheckDate(_RPRDT2, out RPRDT2);
|
||||||
|
|
||||||
AddSearch(sql, dsRPARGrid, "RPPYN", _RPPYN, "", false);
|
dsRPARGrid.SelectParameters["RPPYN"].DefaultValue = _RPPYN;
|
||||||
AddSearch(sql, dsRPARGrid, "RPNUM", _RPNUM1, _RPNUM2, true);
|
dsRPARGrid.SelectParameters["RPNUM1"].DefaultValue = _RPNUM1;
|
||||||
AddSearch(sql, dsRPARGrid, "RPRDT", RPRDT1, RPRDT2, true);
|
dsRPARGrid.SelectParameters["RPNUM2"].DefaultValue = _RPNUM2;
|
||||||
sql.Append(order);
|
dsRPARGrid.SelectParameters["RPRDT1"].DefaultValue = RPRDT1.Ticks > 0 ? RPRDT1.ToString("yyyy-MM-dd") : "";
|
||||||
dsRPARGrid.SelectCommand = sql.ToString();
|
dsRPARGrid.SelectParameters["RPRDT2"].DefaultValue = RPRDT2.Ticks > 0 ? RPRDT2.ToString("yyyy-MM-dd") : "";
|
||||||
|
dsRPARGrid.SelectParameters["rparType"].DefaultValue = rparType;
|
||||||
|
|
||||||
dsRPARForm.SelectCommand = select + from + " WHERE RPREN=@RPREN ";
|
dsRPARForm.SelectCommand = select + from + " WHERE RPREN=@RPREN ";
|
||||||
}
|
}
|
||||||
@@ -625,9 +618,9 @@ public partial class forms_worker_fmRpar : Wellan.Web.UI.WUserControlBase
|
|||||||
RPARGrid.DataBind();
|
RPARGrid.DataBind();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void dsRPARGrid_Selected(object sender, SqlDataSourceStatusEventArgs e)
|
protected void dsRPARGrid_Selected(object sender, ObjectDataSourceStatusEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.AffectedRows == 0)
|
if (e.ReturnValue is Int32 && WDAC.GetInt32Value(e.ReturnValue) == 0)
|
||||||
{
|
{
|
||||||
switch (MultiView1.ActiveViewIndex)
|
switch (MultiView1.ActiveViewIndex)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user