Files
sryang e8fb81958e feat: fmRpfe GridView 改用 ObjectDataSource
- 新增 RpfeDAC(SelectPage/SelectCount)

- dsRPFEGrid 改 ObjectDataSource;Search/Selected 調整
2026-09-10 10:47:19 +08:00

612 lines
20 KiB
C#

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.Common;
using Wellan.Data;
using Wellan.Common;
using System.Text;
using System.IO;
using System.Drawing;
using CRAX;
/// <summary>
/// 專案憑證處理
/// </summary>
public partial class forms_customer_fmRpfe : Wellan.Web.UI.WUserControlBase
{
private string _RPPYN = "";
private int _YY = 0;
private TextBox[] RPDATs = new TextBox[10];
private DropDownList[] RPACCs = new DropDownList[10];
private TextBox[] RPAMTs = new TextBox[10];
private TextBox[] RPDOCs = new TextBox[10];
private DateTime[] RPDATValues = new DateTime[10];
private int[] RPAMTValues = new int[10];
DataTable reportData;
protected void Page_Load(object sender, EventArgs e)
{
//ddlBPPNM.DataSource = new BpaaDAC().GetBpaa();
//ddlBPPNM.DataBind();
//if (IsPostBack)
// RPFEGrid.DataBind();
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
dsRPFEForm.ConnectionString = ConnectionString;
dsRPFE_RPACC.ConnectionString = ConnectionString;
dsRPFE_RPENO.ConnectionString = ConnectionString;
_RPPYN = GetStringParam("RPPYN");
_YY = GetIntParam("YY");
if (_YY > 0)
{
txtYY.Text = _YY.ToString();
ddlBPPNM.DataSource = new BpaaDAC().GetBpaa(_YY + WGuard1.CY11);
ddlBPPNM.DataBind();
ListItem item = ddlBPPNM.Items.FindByValue(_RPPYN);
if (item != null)
item.Selected = true;
}
else
{
txtYY.Focus();
}
MultiView1.Visible = _RPPYN != "";
dsRPFE_RPACC.SelectParameters["RPPYN"].DefaultValue = _RPPYN;
dsRPFE_RPENO.SelectParameters["RPPYN"].DefaultValue = _RPPYN;
RPDATs[0] = txtRPFE_RPDAT_01;
RPDATs[1] = txtRPFE_RPDAT_02;
RPDATs[2] = txtRPFE_RPDAT_03;
RPDATs[3] = txtRPFE_RPDAT_04;
RPDATs[4] = txtRPFE_RPDAT_05;
RPDATs[5] = txtRPFE_RPDAT_06;
RPDATs[6] = txtRPFE_RPDAT_07;
RPDATs[7] = txtRPFE_RPDAT_08;
RPDATs[8] = txtRPFE_RPDAT_09;
RPDATs[9] = txtRPFE_RPDAT_10;
RPACCs[0] = ddlRPFE_RPACC_01;
RPACCs[1] = ddlRPFE_RPACC_02;
RPACCs[2] = ddlRPFE_RPACC_03;
RPACCs[3] = ddlRPFE_RPACC_04;
RPACCs[4] = ddlRPFE_RPACC_05;
RPACCs[5] = ddlRPFE_RPACC_06;
RPACCs[6] = ddlRPFE_RPACC_07;
RPACCs[7] = ddlRPFE_RPACC_08;
RPACCs[8] = ddlRPFE_RPACC_09;
RPACCs[9] = ddlRPFE_RPACC_10;
RPAMTs[0] = txtRPFE_RPAMT_01;
RPAMTs[1] = txtRPFE_RPAMT_02;
RPAMTs[2] = txtRPFE_RPAMT_03;
RPAMTs[3] = txtRPFE_RPAMT_04;
RPAMTs[4] = txtRPFE_RPAMT_05;
RPAMTs[5] = txtRPFE_RPAMT_06;
RPAMTs[6] = txtRPFE_RPAMT_07;
RPAMTs[7] = txtRPFE_RPAMT_08;
RPAMTs[8] = txtRPFE_RPAMT_09;
RPAMTs[9] = txtRPFE_RPAMT_10;
RPDOCs[0] = txtRPFE_RPDOC_01;
RPDOCs[1] = txtRPFE_RPDOC_02;
RPDOCs[2] = txtRPFE_RPDOC_03;
RPDOCs[3] = txtRPFE_RPDOC_04;
RPDOCs[4] = txtRPFE_RPDOC_05;
RPDOCs[5] = txtRPFE_RPDOC_06;
RPDOCs[6] = txtRPFE_RPDOC_07;
RPDOCs[7] = txtRPFE_RPDOC_08;
RPDOCs[8] = txtRPFE_RPDOC_09;
RPDOCs[9] = txtRPFE_RPDOC_10;
//_RPPYN = ViewState["RPNUM"] != null ? ViewState["RPNUM"].ToString() : "";
//_RPRDT1 = ViewState["RPRDT1"] != null ? ViewState["RPRDT1"].ToString() : "";
//_RPRDT2 = ViewState["RPRDT2"] != null ? ViewState["RPRDT2"].ToString() : "";
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
StringBuilder sb3 = new StringBuilder();
for (int i = 0; i < 10; i++)
{
sb1.Append(String.Format("\"{0}\"", RPDATs[i].ClientID) + (i < 9 ? "," : ""));
sb2.Append(String.Format("\"{0}\"", RPAMTs[i].ClientID) + (i < 9 ? "," : ""));
sb3.Append(String.Format("\"{0}\"", RPDOCs[i].ClientID) + (i < 9 ? "," : ""));
}
Page.ClientScript.RegisterArrayDeclaration("RPDATIds", sb1.ToString());
Page.ClientScript.RegisterArrayDeclaration("RPAMTIds", sb2.ToString());
Page.ClientScript.RegisterArrayDeclaration("RPDOCIds", sb3.ToString());
GetGridViewRowColor(RPFEGrid);
reportData = new DataTable();
reportData.Columns.Add("RPREN", typeof(String));
reportData.Columns.Add("RPPYN", typeof(String));
reportData.Columns.Add("ProjectName", typeof(String));
reportData.Columns.Add("Amount", typeof(Int32));
reportData.Columns.Add("Document", typeof(String));
if (MultiView1.ActiveViewIndex == 0)
SetClientFocus(txtRPFE_RPDAT_01);
Search();
}
// 查詢動作
private new void Search()
{
dsRPFEGrid.SelectParameters["RPPYN"].DefaultValue = _RPPYN;
}
private int CheckInsertInput(int index)
{
RPDATs[index].Text = RPDATs[index].Text.Trim();
RPAMTs[index].Text = RPAMTs[index].Text.Trim();
RPDOCs[index].Text = RPDOCs[index].Text.Trim();
// 有輸入的條件為:日期有輸入且合理,金額大於0,備註無所謂
bool rpdatValid = false;
bool rpamtValid = false;
rpdatValid = CheckDate(RPDATs[index].Text + "01", out RPDATValues[index]);
rpamtValid = Int32.TryParse(RPAMTs[index].Text, out RPAMTValues[index]);
if (RPDATs[index].Text != "" && rpdatValid &&
RPAMTs[index].Text != "" && rpamtValid && RPAMTValues[index] > 0)
{
return 0;
}
if (RPDATs[index].Text == "" && RPAMTs[index].Text == "")
{
return 1;
}
int returnValue = 0;
if (RPDATs[index].Text != "" && !rpdatValid)
{
returnValue -= 1;
}
if (RPAMTs[index].Text != "" && !rpamtValid)
{
returnValue -= 2;
}
return returnValue;
}
private new void CalcFields(SqlDataSourceCommandEventArgs e)
{
}
protected void dsRPFEForm_Inserting(object sender, SqlDataSourceCommandEventArgs e)
{
CalcFields(e);
}
protected void dsRPFEForm_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
CalcFields(e);
}
protected void RPFEGrid_DataBound(object sender, EventArgs e)
{
GridView_DataBound(sender, e);
if (RPFEGrid.Rows.Count > 0)
{
if (RPFEGrid.SelectedIndex == -1)
RPFEGrid.SelectedIndex = 0;
if (RPFEGrid.SelectedIndex > RPFEGrid.Rows.Count - 1)
RPFEGrid.SelectedIndex = RPFEGrid.Rows.Count - 1;
RPFEForm.DataBind();
}
}
protected void RPFEGrid_PageIndexChanged(object sender, EventArgs e)
{
Search();
RPFEGrid.SelectedIndex = 0;
RPFEGrid.DataBind();
}
protected void dsRPFEGrid_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
if (e.ReturnValue is Int32 && WDAC.GetInt32Value(e.ReturnValue) == 0)
{
//RPFEForm.ChangeMode(FormViewMode.Insert);
//RPFEForm_ModeChanged(sender, e);
}
}
protected void RPFEForm_ItemCommand(object sender, FormViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "APPEND":
MultiView1.ActiveViewIndex = 0;
break;
case "Print":
RPFEForm.DataBind();
if (RPFEForm.DataItem != null)
{
DataRowView rv = RPFEForm.DataItem as DataRowView;
AddReportData(rv["RPREN"].ToString(),
rv["RPPYN"].ToString(),
GetLookup("BPAA", rv["RPPYN"].ToString(), "BPPYM", ""),
Convert.ToInt32(rv["RPAMT"]),
rv["RPACC"].ToString(),
Convert.ToDateTime(rv["RPDAT"]),
rv["RPDOC"].ToString());
PrintReport();
}
break;
case "Cancel":
Search();
RPFEForm.ChangeMode(FormViewMode.ReadOnly);
RPFEForm_ModeChanged(sender, e);
break;
}
}
protected void RPFEForm_ItemDeleted(object sender, FormViewDeletedEventArgs e)
{
Search();
RPFEGrid.DataBind();
if (RPFEGrid.SelectedIndex > RPFEGrid.Rows.Count - 1)
{
RPFEGrid.SelectedIndex = RPFEGrid.Rows.Count - 1;
RPFEGrid.DataBind();
}
RPFEForm.DataBind();
}
protected void RPFEForm_ItemInserted(object sender, FormViewInsertedEventArgs e)
{
Search();
}
protected void RPFEForm_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
{
Search();
}
protected void RPFEForm_ModeChanged(object sender, EventArgs e)
{
switch (RPFEForm.CurrentMode)
{
case FormViewMode.ReadOnly:
RPFEGrid.Visible = true;
RPFEGrid.DataBind();
if (RPFEGrid.Rows.Count > 0)
{
if (RPFEGrid.SelectedIndex == -1)
{
RPFEGrid.SelectedIndex = 0;
}
if (OldMode == FormViewMode.Insert)
{
RPFEGrid.PageIndex = RPFEGrid.PageCount - 1;
RPFEGrid.DataBind();
RPFEGrid.SelectedIndex = RPFEGrid.Rows.Count - 1;
}
RPFEGrid.DataBind();
RPFEForm.DataBind();
}
break;
case FormViewMode.Edit:
RPFEGrid.Visible = false;
break;
case FormViewMode.Insert:
RPFEGrid.Visible = false;
break;
}
}
protected void RPFEForm_ModeChanging(object sender, FormViewModeEventArgs e)
{
OldMode = (sender as FormView).CurrentMode;
}
protected void RPFEForm_DataBound(object sender, EventArgs e)
{
switch (RPFEForm.CurrentMode)
{
case FormViewMode.Edit:
SetClientFocus(RPFEForm, "txtRPFE_RPDAT");
break;
}
}
protected void RPFEGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
SetGridViewMouseBehavier(RPFEGrid, e.Row);
//GridView_RowDataBound_Shrink_ViewState(sender, e);
}
protected void RPFEGrid_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (GridViewRow row in RPFEGrid.Rows)
SetGridViewMouseBehavier(RPFEGrid, row);
}
protected void RPFEForm_ItemDeleting(object sender, FormViewDeleteEventArgs e)
{
// 刪除前檢查
// TODO: 檢查關帳日
}
protected new bool CheckInput(System.Collections.Specialized.IOrderedDictionary values)
{
cvMessage.ErrorMessage = "";
cvMessage.IsValid = true;
bool result = true;
values["RPDAT"] = CheckDate(values["RPDAT"].ToString() + "01", "請輸入正確的日期", ref result, cvMessage);
ProcessCustomValidatorMessage(cvMessage);
return result;
}
protected void RPFEForm_ItemInserting(object sender, FormViewInsertEventArgs e)
{
//e.Values["RPTYP"] = (RPFEForm.FindControl("ddlRPFE_RPTYP") as DropDownList).SelectedValue;
//e.Cancel = !CheckInput(e.Values);
}
protected void RPFEForm_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
e.Cancel = !CheckInput(e.NewValues);
}
protected void cvRPTCT_ServerValidate(object source, ServerValidateEventArgs args)
{
int i;
args.IsValid = args.Value != "" && Int32.TryParse(args.Value, out i);
}
// 新增畫面之存檔按鈕
protected void btnSave1_Click(object sender, EventArgs e)
{
// 存檔
// 1. 檢查各組輸入
int[] hasInput = new int[10];
bool valid = true;
bool saveOk = false;
bool needSave = false;
cvMessage.ErrorMessage = "";
cvMessage.IsValid = true;
for (int i = 0; i < RPACCs.Length; i++)
{
hasInput[i] = CheckInsertInput(i);
switch (hasInput[i])
{
case 0:
needSave = true;
break;
case -1:
valid = false;
cvMessage.ErrorMessage += String.Format("第{0}組輸入月份不合理<br/>", i + 1);
break;
case -2:
valid = false;
cvMessage.ErrorMessage += String.Format("第{0}組輸入金額不合理<br/>", i + 1);
break;
case -3:
valid = false;
cvMessage.ErrorMessage += String.Format("第{0}組輸入月份與金額不合理<br/>", i + 1);
break;
}
}
if (!valid)
{
cvMessage.IsValid = false;
ProcessCustomValidatorMessage(cvMessage);
return;
}
if (!needSave)
return;
// 2. 各組輸入存檔
DbCommand cmd1 = Query.NewCommand(
@"INSERT INTO RPFE
(RPREN, RPPYN, RPDAT, RPACC, RPAMT, RPDOC,
APPNO, TRDAT, TRMOD, TRUSR)
VALUES
(@RPREN, @RPPYN, @RPDAT, @RPACC, @RPAMT, @RPDOC,
1, GETDATE(), 'INSERT', @TRUSR)");
cmd1.Parameters.Add(Query.NewParameter("RPREN", DbType.String));
cmd1.Parameters.Add(Query.NewParameter("RPPYN", _RPPYN));
cmd1.Parameters.Add(Query.NewParameter("RPDAT", DbType.DateTime));
cmd1.Parameters.Add(Query.NewParameter("RPACC", DbType.String));
cmd1.Parameters.Add(Query.NewParameter("RPAMT", DbType.Int32));
cmd1.Parameters.Add(Query.NewParameter("RPDOC", DbType.String));
cmd1.Parameters.Add(Query.NewParameter("TRUSR", UserId));
// 取得專案年度名稱
string bppym = GetLookup("BPAA", _RPPYN, "BPPYM", "");
if (bppym == "")
{
string[] tmp = ddlBPPNM.SelectedItem.Text.Split('】');
bppym = tmp.Length > 1 ? tmp[1] : ddlBPPNM.SelectedItem.Text;
}
DbConnection conn = Query.NewConnection(ConnectionString);
cmd1.Connection = conn;
conn.Open();
DbTransaction tran = conn.BeginTransaction();
cmd1.Transaction = tran;
try
{
for (int i = 0; i < RPACCs.Length; i++)
{
if (hasInput[i] == 0)
{
string rpren = WGuard1.WNextRen(RPDATValues[i], "RPFE", "RPREN", "YYYYMM<999999>", "", tran);
cmd1.Parameters["RPREN"].Value = rpren;
cmd1.Parameters["RPDAT"].Value = RPDATValues[i];
cmd1.Parameters["RPACC"].Value = RPACCs[i].SelectedValue;
cmd1.Parameters["RPAMT"].Value = RPAMTValues[i];
cmd1.Parameters["RPDOC"].Value = RPDOCs[i].Text;
cmd1.ExecuteNonQuery();
// 將資料放進報表要用的 DataTable
AddReportData(rpren, _RPPYN, bppym, RPAMTValues[i], RPACCs[i].Text, RPDATValues[i], RPDOCs[i].Text);
}
}
tran.Commit();
saveOk = true;
// 清除畫面資料
for (int i = 0; i < RPDATs.Length; i++)
{
RPDATs[i].Text = "";
RPAMTs[i].Text = "";
RPDOCs[i].Text = "";
}
}
catch (Exception ex)
{
tran.Rollback();
cvMessage.ErrorMessage = ex.Message;
cvMessage.IsValid = false;
}
finally
{
conn.Close();
}
// 3. 是否要列印單據黏貼條
if (saveOk && cbWantPrint.Checked)
{
PrintReport();
}
}
// 將資料加入報表資料中
protected void AddReportData(string rpren, string rppyn, string projectName, int amount, string rpacc, DateTime rpdat, string rpdoc)
{
reportData.Rows.Add(rpren, rppyn, projectName, amount, rpdat.ToString("yyyy\"年\"MM\"月\"") + GetBPACC(rpacc) + (rpdoc != "" ? "(" + rpdoc + ")" : ""));
}
// 列印報表
protected void PrintReport()
{
WTableTr tableTr = new WTableTr();
string realFileName = tableTr.ExportToMDB(reportData, ReportDataPath + "RPFE_01.mdb", "RPFE_01", true, true, false);
realFileName = "reportData/" + Path.GetFileName(realFileName);
reportData.Dispose();
tableTr = null;
//WCrExport crex = new WCrExport();
//crex.LoadReport(ReportDataPath + "RPFE_01.rpt", realFileName);
//crex.WebExportAsPdf(Response);
//crex.CloseReport();
//RegisterStartupScript("REPORT_OBJECT", CRAXHelper.GetCRAXViewerDeclaration());
ReportParameter rp = new ReportParameter();
rp.Add("公司名稱", GetString("COMPANY.NAME"));
string realParamFileName = "reportData/" + Path.GetFileName(rp.Save(ReportDataPath + "RPFE_01.rpp", true));
RegisterStartupScript("REPORT_JS",
CRAXHelper.GetReportScript(Context,
GetWebRootUrl() + "CRAX/",
"../report/RPFE_01.rpt",
"../" + realFileName,
"../" + realParamFileName,
"",
"RPFE_01.rpt",
"RPFE_01.mdb",
"RPFE_01.rpp",
"",
"",
"",
"",
"",
0,
0));
}
// 新增畫面之取消按鈕
protected void btnCancel1_Click(object sender, EventArgs e)
{
// 回到處理畫面
MultiView1.ActiveViewIndex = 1;
}
protected string GetBPACC(string bpacc)
{
DbCommand cmd = Query.NewCommand("SELECT BPAME FROM BPAB WHERE BPPYN=@BPPYN AND BPACC=@BPACC");
cmd.Parameters.Add(Query.NewParameter("BPPYN", _RPPYN));
cmd.Parameters.Add(Query.NewParameter("BPACC", bpacc));
object o = Query.ExecuteScalar(cmd);
if (o == null || o == DBNull.Value)
return "";
else
return o.ToString();
}
protected void cvRPAMT_ServerValidate(object source, ServerValidateEventArgs args)
{
int i;
args.IsValid = args.Value != "" && Int32.TryParse(args.Value, out i) && i > 0;
}
protected void Next_Click(object sender, EventArgs e)
{
string rppyn = ddlBPPNM.SelectedValue;
// 檢查此使用者是否有權限處理這個專案
BprmDAC bprm = new BprmDAC(Query);
if (!bprm.GetRight(rppyn, UserId))
{
MultiView1.Visible = false;
cvMessage.ErrorMessage = "對不起,你沒有處理這個專案的權限!";
cvMessage.IsValid = false;
return;
}
// 檢查科目是否有設定
dsRPFE_RPACC.SelectParameters["RPPYN"].DefaultValue = rppyn;
DataView dv = dsRPFE_RPACC.Select(new DataSourceSelectArguments()) as DataView;
if (dv.Count == 0)
{
MultiView1.Visible = false;
cvMessage.ErrorMessage = "此專案年度接單尚未設定科目";
cvMessage.IsValid = false;
return;
}
ParamList["RPPYN"] = rppyn;
DoAfterCommand("RPFE");
}
protected void btnYY_Click(object sender, EventArgs e)
{
int year;
if (!Int32.TryParse(txtYY.Text.Trim(), out year))
{
cvMessage.IsValid = false;
cvMessage.ErrorMessage = "請輸入正確的年度";
return;
}
MultiView1.Visible = false;
ParamList["YY"] = year;
ParamList["RPPYN"] = "";
DoAfterCommand("RPFE");
}
}