feat: fmBPSN GridView 改用 ObjectDataSource 並採 KEYSET 分頁
- BpsnDAC 新增 SelectPage/SelectCount/SelectBPENOIndex - SelectPage 採 KEYSET:先在窄集合 BPSNView 算 ROWID,再 join 該頁明細 - SelectCount/SelectBPENOIndex 改用窄集合(免 join) - fmBpsn.ascx dsBPSNGrid 改 ObjectDataSource(EnablePaging) - fmBpsn.ascx.cs 調整 Search/Selected/OnInit - 修復 BpsnDAC.cs 亂碼註解並改存 UTF-8 BOM - 新增 Doc/GridView改用ObjectDataSource計畫.md(盤點、計畫、效能比較)
This commit is contained in:
@@ -24,23 +24,6 @@ public partial class forms_worker_fmBpsn : Wellan.Web.UI.WUserControlBase
|
||||
private string _BPEDY1 = "";
|
||||
private string _BPEDY2 = "";
|
||||
|
||||
private string select =
|
||||
@" SELECT
|
||||
A.*
|
||||
, B.RAPYN, C.BPPYM RAPYNX, B.RABRH, D.BSSCR RABRHX, B.RAJNO, E.BPJME RAJNOX, B.RACNO
|
||||
, F.BPCME RACNOX, ISNULL(H.RPCPY, G.RPCPY) AS RPCPY
|
||||
, ROW_NUMBER() OVER (ORDER BY A.BPENO) ROWID ";
|
||||
private string from =
|
||||
@" FROM BPSNView A
|
||||
LEFT OUTER JOIN RASN B ON A.BPENO=B.RANUM AND (B.RAEDT IS NULL OR (B.RASDT <= @TODAY AND B.RAEDT >= @TODAY))
|
||||
LEFT OUTER JOIN BPAA C ON B.RAPYN=C.BPPYN
|
||||
LEFT OUTER JOIN BCLS D ON D.BSCLS=B.RABRH AND D.BSPAR='BPSNBRH'
|
||||
LEFT OUTER JOIN BPJA E ON E.BPPYN=B.RAPYN AND E.BPJNO=B.RAJNO
|
||||
LEFT OUTER JOIN BPJB F ON F.BPPYN=B.RAPYN AND F.BPJNO=B.RAJNO AND F.BPCNO=B.RACNO
|
||||
LEFT OUTER JOIN RPIR G ON A.BPENO=G.RPENO AND G.RPREN=(SELECT MAX(RPREN) FROM RPIR WHERE RPENO=A.BPENO)
|
||||
LEFT OUTER JOIN RPIB H ON G.RPREN=H.RPREN AND H.RPITM=(SELECT MAX(RPITM) FROM RPIB WHERE RPREN=H.RPREN) ";
|
||||
private string where = " WHERE 1=1 ";
|
||||
// private string order = " ORDER BY BPENO ";
|
||||
private bool fileOK = false;
|
||||
|
||||
internal BprmDAC bprmDAC;
|
||||
@@ -163,7 +146,6 @@ public partial class forms_worker_fmBpsn : Wellan.Web.UI.WUserControlBase
|
||||
dsBPSNForm.DeleteCommand = @"DELETE BPSN WHERE BPENO = @OLD_BPENO AND APPNO = @OLD_APPNO";
|
||||
|
||||
dsBPSNForm.ConnectionString = ConnectionString;
|
||||
dsBPSNGrid.ConnectionString = ConnectionString;
|
||||
dsBPSN_BPTYP.ConnectionString = ConnectionString;
|
||||
dsBPSN_BPGNR.ConnectionString = ConnectionString;
|
||||
dsBPSN_BPSGR.ConnectionString = ConnectionString;
|
||||
@@ -298,70 +280,27 @@ public partial class forms_worker_fmBpsn : Wellan.Web.UI.WUserControlBase
|
||||
_BPEDY_TYPE = ddlBPEDY.SelectedValue;
|
||||
_BPDPT_TYPE = ddlBPDPT.SelectedValue;
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.Append(select);
|
||||
sql.Append(from);
|
||||
sql.Append(where);
|
||||
dsBPSNGrid.SelectParameters.Clear();
|
||||
dsBPSNGrid.SelectParameters.Add("TODAY", String.Format(WGuard1.InvariantCulture, "{0:yyyy-MM-dd}", DateTime.UtcNow.AddHours(8).Date));
|
||||
if (canSearch)
|
||||
{
|
||||
AddSearch(sql, dsBPSNGrid, "BPENO", _BPENO, "", true);
|
||||
AddSearch(sql, dsBPSNGrid, "BPNME", _BPNME, "", true);
|
||||
AddSearch(sql, dsBPSNGrid, "BPENM", _BPENM, "", true);
|
||||
AddSearch(sql, dsBPSNGrid, "BPIDN", _BPIDN, "", true);
|
||||
switch (_BPEDY_TYPE)
|
||||
{
|
||||
case "1":
|
||||
sql.Append(" AND (BPEDY IS NULL OR BPEDY >= @TODAY) ");
|
||||
break;
|
||||
case "2":
|
||||
sql.Append(" AND (BPEDY < @TODAY)");
|
||||
break;
|
||||
}
|
||||
switch (_BPDPT_TYPE)
|
||||
{
|
||||
case "1":
|
||||
sql.Append(String.Format(" AND BPDPT IN {0} ", PublicVariable.InnerDepartment));
|
||||
break;
|
||||
case "2":
|
||||
sql.Append(String.Format(" AND BPDPT NOT IN {0} ", PublicVariable.InnerDepartment));
|
||||
break;
|
||||
}
|
||||
AddSearch(sql, dsBPSNGrid, "BPSDY", _BPSDY1, _BPSDY2, true);
|
||||
AddSearch(sql, dsBPSNGrid, "BPEDY", _BPEDY1, _BPEDY2, true);
|
||||
|
||||
if (!BpsnDAC.IsManager(UserId))
|
||||
{
|
||||
sql.Append(" AND BPENO NOT IN ('00001','00002','00003') ");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AddSearch(sql, dsBPSNGrid, "BPENO", UserId, "", true);
|
||||
}
|
||||
// sql.Append(order);
|
||||
dsBPSNGrid.SelectCommand = sql.ToString();
|
||||
dsBPSNGrid.SelectParameters["BPENO"].DefaultValue = _BPENO;
|
||||
dsBPSNGrid.SelectParameters["BPNME"].DefaultValue = _BPNME;
|
||||
dsBPSNGrid.SelectParameters["BPENM"].DefaultValue = _BPENM;
|
||||
dsBPSNGrid.SelectParameters["BPIDN"].DefaultValue = _BPIDN;
|
||||
dsBPSNGrid.SelectParameters["BPEDY_TYPE"].DefaultValue = _BPEDY_TYPE;
|
||||
dsBPSNGrid.SelectParameters["BPDPT_TYPE"].DefaultValue = _BPDPT_TYPE;
|
||||
dsBPSNGrid.SelectParameters["BPSDY1"].DefaultValue = _BPSDY1;
|
||||
dsBPSNGrid.SelectParameters["BPSDY2"].DefaultValue = _BPSDY2;
|
||||
dsBPSNGrid.SelectParameters["BPEDY1"].DefaultValue = _BPEDY1;
|
||||
dsBPSNGrid.SelectParameters["BPEDY2"].DefaultValue = _BPEDY2;
|
||||
dsBPSNGrid.SelectParameters["canSearch"].DefaultValue = canSearch.ToString();
|
||||
dsBPSNGrid.SelectParameters["userId"].DefaultValue = UserId;
|
||||
|
||||
if (!string.IsNullOrEmpty(GetStringParam("BPENO")) || !string.IsNullOrEmpty(WDAC.GetStringValue(ViewState["RPENO"])))
|
||||
{
|
||||
string bpeno = "";
|
||||
if (!string.IsNullOrEmpty(GetStringParam("BPENO"))) bpeno = GetStringParam("BPENO");
|
||||
if (!string.IsNullOrEmpty(WDAC.GetStringValue(ViewState["RPENO"]))) bpeno = WDAC.GetStringValue(ViewState["RPENO"]);
|
||||
var cmdIndex = Query.NewCommand();
|
||||
cmdIndex.CommandText = string.Format("SELECT ROWID - 1 FROM ( {0} ) T WHERE BPENO = @TARGET", dsBPSNGrid.SelectCommand);
|
||||
Query.AddParam(cmdIndex, "TODAY", DateTime.UtcNow.AddHours(8).Date);
|
||||
Query.AddParam(cmdIndex, "BPENO1", _BPENO);
|
||||
Query.AddParam(cmdIndex, "BPNME1", _BPNME);
|
||||
Query.AddParam(cmdIndex, "BPENM1", _BPENM);
|
||||
Query.AddParam(cmdIndex, "BPIDN1", _BPIDN);
|
||||
Query.AddParam(cmdIndex, "BPSDY1", _BPSDY1);
|
||||
Query.AddParam(cmdIndex, "BPSDY2", _BPSDY2);
|
||||
Query.AddParam(cmdIndex, "BPEDY1", _BPEDY1);
|
||||
Query.AddParam(cmdIndex, "BPEDY2", _BPEDY2);
|
||||
Query.AddParam(cmdIndex, "TARGET", bpeno);
|
||||
var o = Query.ExecuteScalar(cmdIndex);
|
||||
int idx = (o is Int32 || o is Int64) ? WDAC.GetInt32Value(o) : -1;
|
||||
|
||||
int idx = new BpsnDAC(Query).SelectBPENOIndex(
|
||||
bpeno, _BPENO, _BPNME, _BPENM, _BPIDN, _BPEDY_TYPE, _BPDPT_TYPE, _BPSDY1, _BPSDY2, _BPEDY1, _BPEDY2, canSearch, UserId);
|
||||
|
||||
if (idx >= 0)
|
||||
{
|
||||
@@ -455,9 +394,9 @@ public partial class forms_worker_fmBpsn : Wellan.Web.UI.WUserControlBase
|
||||
GridView1.DataBind();
|
||||
}
|
||||
|
||||
protected void dsBPSNGrid_Selected(object sender, SqlDataSourceStatusEventArgs e)
|
||||
protected void dsBPSNGrid_Selected(object sender, ObjectDataSourceStatusEventArgs e)
|
||||
{
|
||||
if (e.AffectedRows == 0)
|
||||
if (e.ReturnValue is Int32 && WDAC.GetInt32Value(e.ReturnValue) == 0)
|
||||
{
|
||||
if (MultiView1.ActiveViewIndex == 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user