feat: fmRasn GridView 改用 ObjectDataSource

- RasnDAC 新增 SelectPage/SelectCount 及 SelectRAENO/SelectRABRH

- dsRASNGrid 改 ObjectDataSource(EnablePaging);dsRASN_RAENO1/dsRASN_RABRH1 改 ObjectDataSource

- Search/Selected 調整
This commit is contained in:
2026-09-10 10:46:11 +08:00
parent dd8a26206f
commit fca50b7715
4 changed files with 149 additions and 70 deletions
+119
View File
@@ -12,6 +12,7 @@ using Wellan.Data;
/// <summary>
/// 人員派遣資料的資料處理類別
/// </summary>
[DataObject(true)]
public class RasnDAC : Wellan.Data.WDAC
{
private DbCommand cmdSelectRasnRapyn = null;
@@ -582,6 +583,124 @@ public class RasnDAC : Wellan.Data.WDAC
}
*/
/// <summary>
/// 派遣人員清單 (未結束,供挑選人員用)
/// </summary>
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable SelectRAENO(string RAPYN)
{
DbCommand cmd = Query.NewCommand(
@"SELECT A.RANUM, B.BPNME
FROM RASN AS A
INNER JOIN BPSNView AS B ON A.RANUM = B.BPENO
WHERE (A.RAPYN = @RAPYN) AND A.RAEDT IS NULL");
cmd.Parameters.Add(Query.NewParameter("RAPYN", RAPYN));
return Query.Select(cmd);
}
/// <summary>
/// 站別統計 (未結束,供挑選站別用)
/// </summary>
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable SelectRABRH(string RAPYN)
{
DbCommand cmd = Query.NewCommand(
@"SELECT A.RABRH, B.BSSCR, COUNT(1) AS RABRH_COUNT
FROM RASN AS A
INNER JOIN BCLS AS B ON A.RABRH = B.BSCLS AND B.BSPAR = 'BPSNBRH'
WHERE (A.RAPYN = @RAPYN) AND A.RAEDT IS NULL
GROUP BY A.RABRH, B.BSSCR");
cmd.Parameters.Add(Query.NewParameter("RAPYN", RAPYN));
return Query.Select(cmd);
}
private static readonly List<string> HQ_RAPYNS = new List<string>() { "103TYB00001", "103JYB00001" };
private string BuildRasnGridSql(string RAPYN, string BPENO, string BPNME, int year, StringBuilder filter, DbCommand cmd)
{
string order1, order2;
if (HQ_RAPYNS.IndexOf(RAPYN) < 0)
{
order1 = "RANUM";
order2 = "RAEDT, RANUM";
}
else
{
order1 = "RAEDT, RANUM";
order2 = "RAEDT, RANUM";
}
if (year > 0 && HQ_RAPYNS.IndexOf(RAPYN) < 0)
{
filter.AppendFormat(
" AND ((RASDT >= '{0}/01/01' AND RASDT <= '{0}/12/31') OR (RAEDT >= '{0}/01/01' AND RAEDT <= '{0}/12/31') OR (RASDT <= '{0}/01/01' AND RAEDT >= '{0}/12/31') ) ",
year);
}
if (!string.IsNullOrEmpty(BPENO))
{
filter.Append(" AND C.BPENO LIKE @BPENO1 ");
cmd.Parameters.Add(Query.NewParameter("BPENO1", BPENO + "%"));
}
if (!string.IsNullOrEmpty(BPNME))
{
filter.Append(" AND C.BPNME LIKE @BPNME1 ");
cmd.Parameters.Add(Query.NewParameter("BPNME1", BPNME + "%"));
}
return String.Format(@"
SELECT A.*, B.BPSRM, B.BPSRD, B.BPP01, B.BPP02, B.BPP03, B.BPP04, B.BPP05
FROM
(
SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY {0}) ROWNUM FROM RASN WHERE RAPYN=@RAPYN AND RAEDT IS NULL) T1
UNION ALL
SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY {1}) ROWNUM FROM RASN WHERE RAPYN=@RAPYN AND RAEDT IS NOT NULL) T2
) A
LEFT OUTER JOIN BPJB B ON A.RAPYN=B.BPPYN AND A.RAJNO=B.BPJNO AND A.RACNO=B.BPCNO
LEFT OUTER JOIN BPSNView C ON A.RANUM=C.BPENO
WHERE 1=1 {2}", order1, order2, filter.ToString());
}
/// <summary>
/// 派遣紀錄 Grid 分頁查詢
/// </summary>
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable SelectPage(int startRowIndex, int maximumRows, string RAPYN, string BPENO, string BPNME, int year)
{
DbCommand cmd = Query.NewCommand();
StringBuilder filter = new StringBuilder();
string inner = BuildRasnGridSql(RAPYN, BPENO, BPNME, year, filter, cmd);
cmd.CommandText = String.Format(
@"SELECT * FROM
(
SELECT Q.*, ROW_NUMBER() OVER (ORDER BY CASE WHEN Q.RAEDT IS NULL THEN 0 ELSE 1 END, Q.ROWNUM) AS ROWID
FROM ( {0} ) Q
) AS TMP
WHERE ROWID BETWEEN @STARTROWINDEX + 1 AND @STARTROWINDEX + @MAXIMUMROWS
ORDER BY ROWID", inner);
cmd.Parameters.Add(Query.NewParameter("RAPYN", RAPYN));
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 RAPYN, string BPENO, string BPNME, int year)
{
DbCommand cmd = Query.NewCommand();
StringBuilder filter = new StringBuilder();
string inner = BuildRasnGridSql(RAPYN, BPENO, BPNME, year, filter, cmd);
cmd.CommandText = String.Format("SELECT COUNT(*) FROM ( {0} ) Q", inner);
cmd.Parameters.Add(Query.NewParameter("RAPYN", RAPYN));
return WDAC.GetInt32Value(Query.ExecuteScalar(cmd));
}
}