ASP.NET学习之万年历

1.关于万年历

这是一个非常简陋的万年历,C#的DateTime类提供了DayOfWeek属性,星期计算变得非常简单

ASP.NET学习之万年历_第1张图片

2.ASP代码部分

BODY标签内代码

<body>
    <form id="form1" runat="server">
        <div>
            <h3>ASP学习:万年历</h3>
            世纪:
            <select id ="Century" runat="server">
                <option value="1400">15世纪</option>
                <option value="1500">16世纪</option>
                <option value="1600">17世纪</option>
                <option value="1700">18世纪</option>
                <option value="1800">19世纪</option>
                <option value="1900">20世纪</option>
                <option value="2000" selected="selected">21世纪</option> 
                <option value="2100">22世纪</option>
                <option value="2200">23世纪</option>
                <option value="2300">24世纪</option>
                <option value="2400">25世纪</option>
            </select>
            年代:
            <select id ="Decade" runat="server">
                <option value="00">00年代</option>
                <option value="10" selected="selected">10年代</option>
                <option value="20">20年代</option>
                <option value="30">30年代</option>
                <option value="40">40年代</option>
                <option value="50">50年代</option>
                <option value="60">60年代</option>
                <option value="70">70年代</option>
                <option value="80">80年代</option>
                <option value="90">90年代</option>
            </select>
            年:
            <select id ="Year" runat="server">
                <option value="0">0</option>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4" selected="selected">4</option>
                <option value="5">5</option>
                <option value="6">6</option>
                <option value="7">7</option>
                <option value="8">8</option>
                <option value="9">9</option>
            </select>
            月:
            <select id ="Month" runat="server">
                <option value="1">一月(January)</option>
                <option value="2">二月(February)</option>
                <option value="3">三月(March)</option>
                <option value="4" selected="selected">四月(April)</option>
                <option value="5">五月(May)</option>
                <option value="6">六月(June)</option>
                <option value="7">七月(July)</option>
                <option value="8">八月(August)</option>
                <option value="9">九月(September)</option>
                <option value="10">十月(October)</option>
                <option value="11">十一月(November)</option>
                <option value="12">十二月(December)</option>
            </select>&nbsp;
            <asp:Button ID="btnSubmit" runat="server" 
                OnClick="btnSubmit_Click" Text="提交" />
            <hr/>
        </div>
    </form>
    <table id="tbCalendar" border='1' runat="server" 
     style='border-collapse:collapse;width:100%;table-layout:fixed;word-wrap:break-word;'>
    </table>
</body>

3.C#代码部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    /// <summary>
    /// 提交
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        int iYearPart1 = int.Parse(Century.Value);
        int iYearPart2 = int.Parse(Decade.Value);
        int iYearPart3 = int.Parse(Year.Value);

        int iYear = iYearPart1 + iYearPart2 + iYearPart3;
        int iMonth = int.Parse(Month.Value);

        //类似MessageBox的效果
        //注意:1.不要使用 ButtonXXX.Attributes.Add("onclick","XXX") 重复添加按钮事件
        //      2.Page.RegisterStartupScript被标注为:“已过时”
        ClientScript.RegisterStartupScript(this.GetType(), "",
            string.Format("<script>alert('日历:{0}年{1}月 已生成完毕');</script>",
            iYear.ToString(), iMonth.ToString()));


        //
        string[][] calendar = new string[][] 
        { 
            new string[7] { "-", "-", "-", "-", "-", "-", "-" },
            new string[7] { "-", "-", "-", "-", "-", "-", "-" },
            new string[7] { "-", "-", "-", "-", "-", "-", "-" },
            new string[7] { "-", "-", "-", "-", "-", "-", "-" },
            new string[7] { "-", "-", "-", "-", "-", "-", "-" },
            new string[7] { "-", "-", "-", "-", "-", "-", "-" }
        };

        DateTime dtFirst = new DateTime(iYear, iMonth, 1);
        int x = 0, y = 0;
        string s = dtFirst.DayOfWeek.ToString();
        switch (dtFirst.DayOfWeek.ToString())
        {
            case "Sunday": y = 0; break;
            case "Monday": y = 1; break;
            case "Tuesday": y = 2; break;
            case "Wednesday": y = 3; break;
            case "Thursday": y = 4; break;
            case "Friday": y = 5; break;
            case "Saturday": y = 6; break;
        }

        //计算指定月份的日期
        DateTime dt = dtFirst;
        while(true)
        {
            calendar[x][y] = dt.Day.ToString();
            dt = dt.AddDays(1);
            if (dt.Month == iMonth)
            {
                if (++y > 6)
                {
                    x++;
                    y = 0;
                }
            }
            else
            {
                break;
            }
        }

        //HtmlTableRow 和 HtmlTableCell 需要 System.Web.UI.HtmlControls

        //上部:标题
        HtmlTableRow r1 = new HtmlTableRow();
        HtmlTableCell c1 = new HtmlTableCell();
        c1.Controls.Add(new LiteralControl("万年历"));
        c1.ColSpan = 7; //合并单元格,colspan属性可以实现单元格跨越多列
        c1.Align = "Center"; //单元格内文字居中
        r1.Cells.Add(c1);
        tbCalendar.Rows.Add(r1);

        //中部:日历表
        int row = 0;
        int numrows = x + 1;  //日历最多有六行
        int numcells = 7; //每周有七天
        for (int i = 0; i < numrows; i++)
        {
            HtmlTableRow r = new HtmlTableRow();
            r.Height = "70";
            row++;
            for (int j = 0; j < numcells; j++)
            {
                HtmlTableCell c = new HtmlTableCell(); //创建单元格对象
                c.Controls.Add(new LiteralControl(
                    calendar[i][j] != "-" ? calendar[i][j] : ""));
                if (calendar[i][j] == "-")
                {
                    c.BgColor = "Gainsboro";
                }
                else
                {
                    c.BgColor = "LawnGreen";
                }
                c.Align = "Center";
                r.Cells.Add(c); //添加该单元格对象
            }
            tbCalendar.Rows.Add(r);//添加行对
        }

        //底部:其他信息
        HtmlTableRow r2 = new HtmlTableRow();
        HtmlTableCell c2 = new HtmlTableCell();
        c2.Controls.Add(new LiteralControl("生成于:" + DateTime.Now.ToString()));
        c2.ColSpan = 7; //合并单元格,colspan属性可以实现单元格跨越多列
        c2.Align = "Center";
        r2.Cells.Add(c2);
        tbCalendar.Rows.Add(r2);
    }
}


你可能感兴趣的:(ASP.NET学习之万年历)