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));
}
}
+18 -28
View File
@@ -53,28 +53,19 @@
</SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="dsRASN_RAENO1" runat="server"
ProviderName="System.Data.SqlClient"
SelectCommand="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">
<asp:ObjectDataSource ID="dsRASN_RAENO1" runat="server"
TypeName="RasnDAC" SelectMethod="SelectRAENO">
<SelectParameters>
<asp:Parameter Name="RAPYN" />
<asp:Parameter Name="RAPYN" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
</asp:ObjectDataSource>
<asp:SqlDataSource ID="dsRASN_RABRH1" runat="server"
ProviderName="System.Data.SqlClient"
SelectCommand="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">
<asp:ObjectDataSource ID="dsRASN_RABRH1" runat="server"
TypeName="RasnDAC" SelectMethod="SelectRABRH">
<SelectParameters>
<asp:Parameter Name="RAPYN" />
<asp:Parameter Name="RAPYN" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
</asp:ObjectDataSource>
<asp:SqlDataSource ID="dsRASN_RAWTZ" runat="server"
ProviderName="System.Data.SqlClient"
@@ -282,17 +273,16 @@
</InsertParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="dsRASNGrid" runat="server"
ConflictDetection="CompareAllValues"
SelectCommand="SELECT A.*, B.BPSRM, B.BPSRD, B.BPP01, B.BPP02, B.BPP03, B.BPP04, B.BPP05
FROM RASN 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=0"
ConnectionString="Data Source=(local);Initial Catalog=THINKYU_WEB;Persist Security Info=True;User ID=sa"
ProviderName="System.Data.SqlClient"
OnSelected="dsRASNGrid_Selected">
</asp:SqlDataSource>
<asp:ObjectDataSource ID="dsRASNGrid" runat="server"
TypeName="RasnDAC" SelectMethod="SelectPage" SelectCountMethod="SelectCount"
EnablePaging="true" OnSelected="dsRASNGrid_Selected">
<SelectParameters>
<asp:Parameter Name="RAPYN" Type="String" />
<asp:Parameter Name="BPENO" Type="String" />
<asp:Parameter Name="BPNME" Type="String" />
<asp:Parameter Name="year" Type="Int32" DefaultValue="0" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:FormView ID="RASNForm" runat="server"
DataSourceID="dsRASNForm"
+8 -39
View File
@@ -53,13 +53,10 @@ public partial class forms_customer_fmRasn : Wellan.Web.UI.WUserControlBase
{
base.OnInit(e);
dsRASNForm.ConnectionString = ConnectionString;
dsRASNGrid.ConnectionString = ConnectionString;
dsRASN_RABRH.ConnectionString = ConnectionString;
dsRASN_RANUM.ConnectionString = ConnectionString;
dsRASN_BPJNO.ConnectionString = ConnectionString;
dsRASN_BPCNO.ConnectionString = ConnectionString;
dsRASN_RAENO1.ConnectionString = ConnectionString;
dsRASN_RABRH1.ConnectionString = ConnectionString;
dsRASN_RAWTZ.ConnectionString = ConnectionString;
_YY = GetIntParam("YY");
@@ -219,44 +216,16 @@ public partial class forms_customer_fmRasn : Wellan.Web.UI.WUserControlBase
// 查詢動作
private new void Search()
{
StringBuilder sql = new StringBuilder();
List<string> HQ_RAPYNS = new List<string>() { "103TYB00001", "103JYB00001" };
String searchOrder1 = String.Empty, searchOrder2 = String.Empty;
if (HQ_RAPYNS.IndexOf(_RAPYN) < 0)
{
searchOrder1 = "RANUM";
searchOrder2 = "RAEDT, RANUM";
}
else
{
searchOrder1 = "RAEDT, RANUM";
searchOrder2 = "RAEDT, RANUM";
}
sql.Append(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
", searchOrder1, searchOrder2));
int year = 0;
if (!string.IsNullOrEmpty(txtYY.Text) && HQ_RAPYNS.IndexOf(_RAPYN) < 0)
{
sql.Append(string.Format(" 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') ) ", WQuery.GetInt32Value(txtYY.Text) + WGuard1.CY11));
}
year = WQuery.GetInt32Value(txtYY.Text) + WGuard1.CY11;
dsRASNGrid.SelectParameters.Clear();
dsRASNGrid.SelectParameters.Add(new Parameter("RAPYN", DbType.String, _RAPYN));
// AddSearch(sql, dsRASNGrid, "RAPYN", _RAPYN, "", true);
AddSearch(sql, dsRASNGrid, "C.BPENO", _BPENO, "", true);
AddSearch(sql, dsRASNGrid, "C.BPNME", _BPNME, "", true);
dsRASNGrid.SelectCommand = sql.ToString();
dsRASNGrid.SelectParameters["RAPYN"].DefaultValue = _RAPYN;
dsRASNGrid.SelectParameters["BPENO"].DefaultValue = _BPENO;
dsRASNGrid.SelectParameters["BPNME"].DefaultValue = _BPNME;
dsRASNGrid.SelectParameters["year"].DefaultValue = year.ToString();
}
// 存檔前的計算動作
@@ -302,9 +271,9 @@ WHERE 1=1
RASNGrid.DataBind();
}
protected void dsRASNGrid_Selected(object sender, SqlDataSourceStatusEventArgs e)
protected void dsRASNGrid_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
if (e.AffectedRows == 0)
if (e.ReturnValue is Int32 && WDAC.GetInt32Value(e.ReturnValue) == 0)
{
if (ForwardSource != "")
RASNForm.ChangeMode(FormViewMode.Insert);