feat: fmRpar GridView 改用 ObjectDataSource

- RparDAC 新增 SelectPage/SelectCount

- dsRPARGrid 改 ObjectDataSource;Search/Selected 調整

- fmRowk 保留(框架限制,文檔記錄)
This commit is contained in:
2026-09-10 10:53:54 +08:00
parent 6d6f18e2ef
commit 3cb2c0d97c
4 changed files with 144 additions and 23 deletions
+119
View File
@@ -8,6 +8,7 @@ using Wellan.Data;
using Wellan.Common;
using System.Transactions;
using System.ComponentModel;
using System.Text;
using System.IO;
using System.Web;
using System.Linq;
@@ -1856,6 +1857,124 @@ public class RparDAC : Wellan.Data.WDAC
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));
}
}
}
}