日历周数计算

 public partial class WebUserControl : System.Web.UI.UserControl
{
    public DateTime CurDate
    {
        get
        {
            if (this.ViewState["CurDate"] == null)
            {
                this.ViewState["CurDate"] = DateTime.Now;
                return DateTime.Now;
            }

            DateTime dt = (DateTime)this.ViewState["CurDate"];
            return dt;
        }
        set
        {
            this.ViewState["CurDate"] = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void GridView1_Load(object sender, EventArgs e)
    {
        GridView2.DataSource = GetDataTable(CurDate.Year, CurDate.Month);
        GridView2.DataBind();

        this.lbMonth.Text = CurDate.ToShortDateString().ToString();

        SetColor();

    }

    private void SetColor()
    {
        for (int i = 0; i < 6; i++)
        {
            GridView2.Rows[i].Cells[0].ForeColor = Color.Blue;
            for (int j = 1; j < 8; j++)
            {     
                if (j == 1 || j == 7)
                {
                    GridView2.Rows[i].Cells[j].ForeColor = Color.Red;
                }
                if(int.Parse(GridView2.Rows[0].Cells[j].Text.ToString())>20)
                {
                    GridView2.Rows[0].Cells[j].ForeColor = Color.Brown;
                }
                if (i > 3 && int.Parse(GridView2.Rows[i].Cells[j].Text.ToString()) < 14)
                {
                    GridView2.Rows[i].Cells[j].ForeColor = Color.Brown;
                }
            }
        }
    }

    DataTable GetDataTable(int year,int month)
    {
        DataTable dt = new DataTable("Calendar");

        DataColumn dc1 = new DataColumn("Week", Type.GetType("System.String"));
        DataColumn dc2 = new DataColumn("Sunday", Type.GetType("System.Int16"));
        DataColumn dc3 = new DataColumn("Monday", Type.GetType("System.Int16"));
        DataColumn dc4 = new DataColumn("Tuesday", Type.GetType("System.Int16"));
        DataColumn dc5 = new DataColumn("Wednesday", Type.GetType("System.Int16"));
        DataColumn dc6 = new DataColumn("Thursday", Type.GetType("System.Int16"));
        DataColumn dc7 = new DataColumn("Friday", Type.GetType("System.Int16"));
        DataColumn dc8 = new DataColumn("Saturday", Type.GetType("System.Int16"));
       
        dt.Columns.Add(dc1);
        dt.Columns.Add(dc2);
        dt.Columns.Add(dc3);
        dt.Columns.Add(dc4);
        dt.Columns.Add(dc5);
        dt.Columns.Add(dc6);
        dt.Columns.Add(dc7);
        dt.Columns.Add(dc8);

        //以上代码完成了DataTable的构架,但是里面是没有任何数据的

        int nulldate = 0;

        DateTime nowtime = new DateTime(CurDate.Year,CurDate.Month,1);
 
        //年月的第一天是星期几

        string week = nowtime.DayOfWeek.ToString();

        for (int i = 1; i <= 7; i++)
        {
            //星期相同
            if (dt.Columns[i].ColumnName.Equals(week))
            {
                nowtime = nowtime.AddDays(nulldate);

                for (int rows = 0; rows < 6; rows++)
                {
                    DataRow dr = dt.NewRow();

                    DateTime start = new DateTime(nowtime.AddDays(6).Year, 1, 1);
                   
                    dr["Week"] = "第"+(WeekNumber(start) + nowtime.AddDays(6).DayOfYear)/7+"周";

                    dr["Sunday"] = nowtime.Day;

                    dr["Monday"] = nowtime.AddDays(1).Day;
                    dr["Tuesday"] = nowtime.AddDays(2).Day;
                    dr["Wednesday"] = nowtime.AddDays(3).Day;
                    dr["Thursday"] = nowtime.AddDays(4).Day;
                    dr["Friday"] = nowtime.AddDays(5).Day;

                    dr["Saturday"] = nowtime.AddDays(6).Day;

                    nowtime = nowtime.AddDays(7);

                    dt.Rows.Add(dr);
                }
            }
            nulldate--;
        }
        return dt;

    }

    private int WeekNumber(DateTime month)
    {
        DateTime dtime = new DateTime(month.Year, 01, 01);
        int num = 0;
        switch (dtime.DayOfWeek.ToString())
        {
            case "Monday":
                num = 7;
                break;
            case "Tuesday":
                num = 8;
                break;
            case "Wednesday":
                num = 9;
                break;
            case "Thursday":
                num = 10;
                break;
            case "Friday":
                num = 11;
                break;
            case "Saturday":
                num = 12;
                break;
            case "Sunday":
                num = 6;
                break;
        }

        return num;
    }

 


    /// <summary>
    /// 上个月
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Button1_Click(object sender, EventArgs e)
    {
        this.CurDate = this.CurDate.AddMonths(-1);
        this.ViewState["CurDate"] = CurDate;

        this.lbMonth.Text = CurDate.ToShortDateString().ToString();

        GridView2.DataSource = GetDataTable(CurDate.Year, CurDate.Month);
        GridView2.DataBind();

        SetColor();
    }

    /// <summary>
    /// 下个月
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Button2_Click(object sender, EventArgs e)
    {
        this.CurDate = this.CurDate.AddMonths(1);
        this.ViewState["CurDate"] = CurDate;

        this.lbMonth.Text = CurDate.ToShortDateString().ToString();

        GridView2.DataSource = GetDataTable(CurDate.Year, CurDate.Month);
        GridView2.DataBind();

        SetColor();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值