加班调休报表

 做一个如图所示的加班调休报表,Y轴为一年的十二个月,横轴为一个月的31天以及余数,加班,调休,可调情况,其中第一个月的余数要单独计算(余数=前一年的总加班数-总调休数),然后余数和可调为递推数值,这一个月的余数=上一个月的可调

 

//源代码

DataTable dt;//dt是存放某员工某日期加班调休数 格式为 工号 日期flowyear(20110902) 加班数 调休数

DataTable dt1;//dt1存放请事假调休和加班的员工 格式为 工号 日期(20110902)日期类型(上/下/全半天) 流程类型(事假。调休。加班。。。)

String result;//余数

 //新建一个DataTable,存放一个员工当年每月的余数,加班,调休,可调的数值
                DataTable dtThisYear = new DataTable();
                dtThisYear.Columns.Add("Month", typeof(string));    //6位
                dtThisYear.Columns.Add("YuShu", typeof(string));
                dtThisYear.Columns.Add("OvertimeDay", typeof(string));
                dtThisYear.Columns.Add("ExchangeDay", typeof(string));
                dtThisYear.Columns.Add("RemainDay", typeof(string));
                for (int i = 1; i <= 12; i++)  //遍历1~12月
                {
                    //判断dt中有无此月份。如果有,则取其中的值,否则,插入一条初始化的记录
                    DataRow[] arrDR = dt.Select("FlowYear = " + flowYear + i.ToString().PadLeft(2, '0'));

                    DataRow drThisYear = dtThisYear.NewRow();
                    drThisYear["Month"] = flowYear + i.ToString().PadLeft(2, '0');
                    if (i == 1)
                    {
                        drThisYear["YuShu"] = result;
                    }
                    else
                    {
                        drThisYear["YuShu"] = dtThisYear.Rows[i - 2]["RemainDay"].ToString();
                    }

                    if (arrDR != null && arrDR.Length > 0)
                    {
                        drThisYear["OvertimeDay"] = arrDR[0]["OvertimeDay"].ToString();
                        drThisYear["ExchangeDay"] = arrDR[0]["ExchangeDay"].ToString();
                    }
                    else
                    {
                        drThisYear["OvertimeDay"] = "0";
                        drThisYear["ExchangeDay"] = "0";
                    }
                    drThisYear["RemainDay"] = (Convert.ToDecimal(drThisYear["YuShu"])
                            - Convert.ToDecimal(drThisYear["ExchangeDay"])
                            + Convert.ToDecimal(drThisYear["OvertimeDay"])).ToString();
                    dtThisYear.Rows.Add(drThisYear);
                }

 

 string[] sArray = null;
                string s = " |1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|余数|加班|调休|可调";
                sArray = s.Split('|');

                StringBuilder builder = new StringBuilder();

                #region Table
                builder.AppendLine("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">");

                builder.AppendLine("<thead><tr><th>" + "加班调休报表" + "</th></td></thead>");

 builder.AppendLine(@"<tbody><tr><td colspan='2'>姓名:</td>
<td colspan='4'>" + dt.Rows[0]["ChineseName"].ToString() + "</td><td colspan='26'></td><td>年份:</td><td colspan='3'>" + flowYear + "</td></tr></tbody>");
                builder.AppendLine("<tr style=\"font-weight: bold; white-space: nowrap;\">");
                foreach (string item in sArray)
                {
                    if (item.Equals("Opertion") || item.Equals("PageDisplaySequence"))
                    {
                        continue;
                    }
                    builder.AppendLine("<td>" + item.ToString() + "</td>");//0

                }
                builder.AppendLine("</tr>");

       Dictionary<string, string> dic = new Dictionary<string, string>();

                #region//把日期和相应的符号标识添加到Dictionary key-value 日期-符号
                for (int d = 0; d < dt1.Rows.Count; d++)
                {

              判断如果是上半天加班/事假/调休分别是用什么符号表示,

             把结果以日期和符号的形式添加到dic中
                   }

 

 for (int i = 1; i < 13; i++)
                {
                    builder.AppendLine("<tr>");
                    builder.AppendLine("<Td>" + i.ToString() + "</td>");
                    for (int j = 1; j < 32; j++)
                    {

#region  判断I J 根据在dic中是否包含该日期,把相应的符号填充上去
                        if (i < 10 && j < 10)
                        {
                            if (dic.ContainsKey(flowYear + "0" + i.ToString() + "0" + j.ToString()))
                            {

                                builder.AppendLine("<td>" + dic[flowYear + "0" + i.ToString() + "0" + j.ToString()] + "</td>");
                            }
                            else
                            {

                                builder.AppendLine("<td>&nbsp;</td>");
                            }
                        }
                        else if (i < 10 && j >= 10)
                        {
                            if (dic.ContainsKey(flowYear + "0" + i.ToString() + j.ToString()))
                            {

                                builder.AppendLine("<td>" + dic[flowYear + "0" + i.ToString() + j.ToString()] + "</td>");
                            }
                            else
                            {

                                builder.AppendLine("<td>&nbsp;</td>");
                            }
                        }
                        else if (i >= 10 && j < 10)
                        {
                            if (dic.ContainsKey(flowYear + i.ToString() + "0" + j.ToString()))
                            {

                                builder.AppendLine("<td>" + dic[flowYear + i.ToString() + "0" + j.ToString()] + "</td>");
                            }
                            else
                            {

                                builder.AppendLine("<td>&nbsp;</td>");
                            }
                        }
                        else
                        {
                            if (dic.ContainsKey(flowYear + i.ToString() + j.ToString()))
                            {

                                builder.AppendLine("<td>" + dic[flowYear + i.ToString() + j.ToString()] + "</td>");
                            }
                            else
                            {

                                builder.AppendLine("<td>&nbsp;</td>");
                            }
                        }

}

                  //余数
                    builder.AppendLine("<Td>" + dtThisYear.Rows[i-1]["YuShu"].ToString() + "</td>");
                    //加班
                    builder.AppendLine("<Td>" + dtThisYear.Rows[i - 1]["OvertimeDay"].ToString() + "</td>");
                    //调休
                    builder.AppendLine("<Td>" + dtThisYear.Rows[i - 1]["ExchangeDay"].ToString() + "</td>");
                    //可调
                    builder.AppendLine("<Td>" + dtThisYear.Rows[i - 1]["RemainDay"].ToString() + "</td>");

                    builder.AppendLine("</tr>");

}

 builder.AppendLine("</table>"); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值