📄 submitotreq.aspx.cs
字号:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using DBUtils;
namespace BlueHill.SubmitOvertime
{
/// <summary>
/// SubmitOTReq 的摘要说明。
/// </summary>
public class SubmitOTReq : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label lblName;
protected System.Web.UI.WebControls.RadioButtonList rdoOptionList;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.DropDownList cmbApproverList;
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.Calendar cldStartDate;
protected System.Web.UI.WebControls.Label Label4;
protected System.Web.UI.WebControls.Calendar cldEndDate;
protected System.Web.UI.WebControls.DropDownList cmbStartTime;
protected System.Web.UI.WebControls.DropDownList cmbEndTime;
protected System.Web.UI.WebControls.Label Label7;
protected System.Web.UI.WebControls.TextBox txtReason;
protected System.Web.UI.WebControls.Label lblTotalHours;
protected System.Web.UI.WebControls.Label lblTest;
protected System.Web.UI.WebControls.Button btnCalculate;
protected System.Web.UI.WebControls.Button btnSubmit;
protected System.Web.UI.WebControls.Label lblErrorMsg;
//声明 alHolidayL 数组,该数组保存“开始时间”日历控件对应月份所包含的国定假日。
private ArrayList alHolidayL = new ArrayList(10);
//声明 alHolidayR 数组,该数组保存“结束时间”日历控件对应月份所包含的国定假日。
private ArrayList alHolidayR = new ArrayList(10);
/// <summary>
/// 网页初始化时执行该方法。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
lblTest.Visible = false;
if ( !IsPostBack )
{
//如果网页是第一次生成时,执行如下操作:
Employee emp = new Employee();
int iEmpID;
//检查员工的登录信息是否丢失,是则显示出错信息。
if ( Session["EmployeeID"] == null )
{
lblErrorMsg.Text = "登录信息丢失,请重新登录!";
return;
}
//获取保存在 Session 中的员工编号信息。
iEmpID = int.Parse ((string)(Session["EmployeeID"]));
//从数据库中获取员工的其他信息。
Employee.GetEmployeeInfo(iEmpID, emp);
//显示登录者的姓名。
lblName.Text = emp.Name;
//设定“开始时间”日历控件的显示时间为第二天。
cldStartDate.SelectedDate = DateTime.Now.AddDays(1.0);
//设定“结束时间”日历控件的显示时间为第二天。
cldEndDate.SelectedDate = DateTime.Now.AddDays(1.0);
//显示审批者的名称,即部门经理,如果登录者为部门经理,则无需添加。
if ( !emp.IsManager )
{
cmbApproverList.Items.Add(emp.ManagerName);
cmbApproverList.Items[0].Value = emp.ManagerID.ToString();
}
//从数据库中获取总经理的员工编号。
int iCEOID = 0;
Employee.GetCEOInfo(ref iCEOID);
//从数据库中获取总经理的其他信息。
Employee empCEO = new Employee();
Employee.GetEmployeeInfo(iCEOID, empCEO);
//在审批者下拉框中添加总经理的姓名。
cmbApproverList.Items.Add(empCEO.Name);
cmbApproverList.Items[cmbApproverList.Items.Count - 1].Value = empCEO.EmployeeID.ToString();
//审批者下拉框默认选中第一项。
cmbApproverList.SelectedIndex = 0;
//填充可加班的小时字段
FillHourList(cmbStartTime, DateTime.Now, 0);
FillHourList(cmbEndTime, DateTime.Now, 1);
//计算日历控件当月所包含的国定假日。
ReCalculateHoliday();
}
}
/// <summary>
/// 该方法计算指定月份所包含的国定假日。
/// </summary>
/// <param name="e"></param>
void ReCalculateHoliday()
{
//清空 alHolidayL 数组,该数组保存“开始时间”日历控件对应月份所包含的国定假日。
alHolidayL.Clear();
//在数据库中检索该月的国定假日,并将其保存在 alHolidayL 数组中。
DBUtils.SubmitLvReq.GetHoliday(cldStartDate.SelectedDate, alHolidayL);
//清空 alHolidayR 数组,该数组保存“结束时间”日历控件对应月份所包含的国定假日。
alHolidayR.Clear();
//在数据库中检索该月的国定假日,并将其保存在 alHolidayL 数组中。
DBUtils.SubmitLvReq.GetHoliday(cldEndDate.SelectedDate, alHolidayR);
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.cldStartDate.DayRender += new System.Web.UI.WebControls.DayRenderEventHandler(this.cldStartDate_DayRender);
this.cldStartDate.VisibleMonthChanged += new System.Web.UI.WebControls.MonthChangedEventHandler(this.cldStartDate_VisibleMonthChanged);
this.cldStartDate.SelectionChanged += new System.EventHandler(this.cldStartDate_SelectionChanged);
this.cldEndDate.DayRender += new System.Web.UI.WebControls.DayRenderEventHandler(this.cldEndDate_DayRender);
this.cldEndDate.VisibleMonthChanged += new System.Web.UI.WebControls.MonthChangedEventHandler(this.cldEndDate_VisibleMonthChanged);
this.cldEndDate.SelectionChanged += new System.EventHandler(this.cldEndDate_SelectionChanged);
this.btnCalculate.Click += new System.EventHandler(this.btnCalculate_Click);
this.btnSubmit.Click += new System.EventHandler(this.btnSubmit_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/// <summary>
/// 该方法当网页生成“开始时间”日历控件的每一个单元格时自动调用。
/// </summary>
/// <param name="e"></param>
private void cldStartDate_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
{
int iCount;
//遍历 alHolidayL 数组中保存的每一个国定假日。
for ( iCount = 0; iCount <= alHolidayL.Count - 1; iCount++)
{
if (e.Day.Date.ToString("MM/dd") == ((DateTime)(alHolidayL[iCount])).ToString("MM/dd") )
{
//如果当前单元格所对应的日期为国定假日,则以绿色粗体显示。
e.Cell.BackColor = System.Drawing.Color.Green;
e.Cell.Font.Bold = true;
}
}
}
/// <summary>
/// 该方法当网页生成“结束时间”日历控件的每一个单元格时自动调用。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cldEndDate_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
{
int iCount;
//遍历 alHolidayR 数组中保存的每一个国定假日。
for ( iCount = 0; iCount<= alHolidayR.Count - 1; iCount++ )
{
if ( e.Day.Date.ToString("MM/dd") == ((DateTime)(alHolidayR[iCount])).ToString("MM/dd") )
{
//如果当前单元格所对应的日期为国定假日,则以绿色粗体显示。
e.Cell.BackColor = System.Drawing.Color.Green;
e.Cell.Font.Bold = true;
}
}
}
/// <summary>
/// 当用户改变“结束时间”日历控件的当前月份时,该方法将重新设定日历控件的选中日期,并重新计算当前月份的国定假日。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cldEndDate_VisibleMonthChanged(object sender, System.Web.UI.WebControls.MonthChangedEventArgs e)
{
//重设“结束时间”日历控件的选中日期。
cldEndDate.SelectedDate = e.NewDate;
//如果月份为本月,则选中日期为第二天。
if ( e.NewDate.Month == DateTime.Now.Month )
{
cldEndDate.SelectedDate = DateTime.Now.AddDays(1.0);
}
//计算日历控件当月所包含的国定假日。
ReCalculateHoliday();
}
/// <summary>
/// 当用户改变“开始时间”日历控件的当前月份时,该方法将重新设定日历控件的选中日期,并重新计算当前月份的国定假日。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cldStartDate_VisibleMonthChanged(object sender, System.Web.UI.WebControls.MonthChangedEventArgs e)
{
//重设“开始时间”日历控件的选中日期。
cldStartDate.SelectedDate = e.NewDate;
//如果月份为本月,则选中日期为第二天。
if ( e.NewDate.Month == DateTime.Now.Month )
{
cldStartDate.SelectedDate = DateTime.Now.AddDays(1.0);
}
//计算日历控件当月所包含的国定假日。
ReCalculateHoliday();
}
/// <summary>
/// 当用户单击“计算时间”按钮时,该方法计算并显示用户加班的总小时数。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCalculate_Click(object sender, System.EventArgs e)
{
int iTotalHours;
//调用函数 CalculateHours,计算用户加班的总小时数。
iTotalHours = CalculateHours();
if ( iTotalHours <= 0 )
{
//加班时间不正确,则显示出错信息并退出。
lblTotalHours.Text = "";
lblErrorMsg.Text = "请检查输入日期的正确性";
return;
}
else
{
lblErrorMsg.Text = "";
}
//在界面上显示加班的总小时数。
lblTotalHours.Text = iTotalHours.ToString() + "小时";
}
/// <summary>
/// 该函数根据用户选定的加班日期,返回加班的总小时数,如果加班时间不正确,则返回 0。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
int CalculateHours()
{
//计算日历控件当月所包含的国定假日。
ReCalculateHoliday();
string strStartDate, strEndDate;
//拼接得到用户加班的起始时间字符串(日期+小时)。
strStartDate = cldStartDate.SelectedDate.ToString("yyyy-MM-dd ") + cmbStartTime.SelectedItem.ToString();
//拼接得到用户加班的结束时间字符串(日期+小时)。
strEndDate = cldEndDate.SelectedDate.ToString("yyyy-MM-dd ") + cmbEndTime.SelectedItem.ToString();
//将时间字符串转换成日期数据类型。
DateTime dtStart = DateTime.Parse(strStartDate);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -