1.使用連接到資料庫,然後查詢要顯示的日期。

2.需有資料表 Holidays SQL Server 資料庫。 這個資料表具有資料行 HolidayDate

3.連接到資料庫所需的連接字串 (Connection String) 則儲存在web.config檔的名稱 ConnectionString1 之下。

4.匯入命名空間 (Namespace) System.DataSystem.Data.SqlClient

 

// OnDayRender 屬性加入至 Calendar 控制項標記,以使用 DayRender 事件。 程式碼如下: 

<asp:Calendar runat="server" OnDayRender=" Calendar1_DayRender"></asp:Calendar>

 

protected DataSet dsHolidays;

protected void Page_Load(object sender, EventArgs e)

{

    if(!IsPostBack)

    {

        //VisibleDate屬性,傳回當天日期

        Calendar1.VisibleDate = DateTime.Today;

        FillHolidayDataset();

    }

}

 

protected void FillHolidayDataset()

{

    DateTime firstDate = new DateTime(Calendar1.VisibleDate.Year,

                         Calendar1.VisibleDate.Month, 1);

    DateTime lastDate = GetFirstDayOfNextMonth();

    dsHolidays = GetCurrentMonthData(firstDate, lastDate);

}

 

protected DateTime GetFirstDayOfNextMonth()

{

    int monthNumber, yearNumber;

    if(Calendar1.VisibleDate.Month == 12)

    {

        monthNumber = 1;

        yearNumber = Calendar1.VisibleDate.Year + 1;

    }

    else

    {

        monthNumber = Calendar1.VisibleDate.Month + 1;

        yearNumber = Calendar1.VisibleDate.Year;

    }

    DateTime lastDate = new DateTime(yearNumber, monthNumber, 1);

    return lastDate;

}

 

protected DataSet GetCurrentMonthData(DateTime firstDate,DateTime lastDate)

{

    DataSet dsMonth = new DataSet();

    ConnectionStringSettings cs;

    cs = ConfigurationManager.ConnectionStrings["ConnectionString1"];

    String connString = cs.ConnectionString;

    SqlConnection dbConnection = new SqlConnection(connString);

    String query;

    query = "select * from V_TF_VOC WHERE (firstDate LIKE @ firstDate " +

"OR lastDate LIKE @ lastDate)";

SqlCommand dbCommand = new SqlCommand(query, dbConnection);

    dbCommand.Parameters.Add(new SqlParameter("@firstDate ", firstDate));

    dbCommand.Parameters.Add(new SqlParameter("@lastDate", lastDate));

    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(dbCommand);

    try

    {

        sqlDataAdapter.Fill(dsMonth);

    }

    catch {}

    return dsMonth;

}

 

//將目前呈現的日期和取自資料來源的資料進行比較。 如果有相符項目,則自訂該日的顯示方式。

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)

{

    DateTime nextDate;

    if(dsHolidays != null)

    {

     foreach(DataRow dr in dsHolidays.Tables[0].Rows)

     {

            nextDate = (DateTime) dr["HolidayDate"];

            if(nextDate == e.Day.Date)

            {

                e.Cell.BackColor = System.Drawing.Color.Pink;

            }

     }

    }

}

protected void Calendar1_VisibleMonthChanged(object sender,

MonthChangedEventArgs e)

{

    FillHolidayDataset();

}

arrow
arrow
    全站熱搜

    Chang Sunkist 發表在 痞客邦 留言(0) 人氣()