日曆控制元件(Calendar)

iDotNetSpace發表於2009-01-16

日曆控制元件(Calendar)
為日曆定製樣式,外觀
控制日曆的選擇模式
設定和獲取選中的日期
讓特殊的日期有提示,同時我們模仿部落格園日曆,將頁面導航到有文章的日期去
Calendar事件DayRender在呈現日時激發

protected void Page_Init(object sender, EventArgs e)
{
//只執行一次
 arr = new string[13][];
 
for (int i=0; i<13; i++)
 {
  arr[i] 
= new string[32];
 }
 arr[
1][1= "元旦節";
 arr[
2][14= "情人節";
 arr[
3][8= "婦女節";

 
//填充年、月、日下拉選單
 for(int y = 1980; y < 2050; y++)
 {
  ye.Items.Add(y.ToString() );
 }
 
for(int m = 1;m < 13; m++)
 {
  mo.Items.Add(m.ToString() );
 }
 
for(int d = 1;d < 32; d++)
 {
//有個問題,2月沒有31號!!需要改進
  da.Items.Add(d.ToString() );
 }
}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
 
switch (DropDownList1.SelectedValue)
 {
  
case "None":
   Calendar1.SelectionMode 
= CalendarSelectionMode.None;
   
break;
  
case "DayWeekMonth":
   Calendar1.SelectionMode 
= CalendarSelectionMode.DayWeekMonth;
   
break;
  
case "DayWeek":
   Calendar1.SelectionMode 
= CalendarSelectionMode.DayWeek;
   
break;
  
case "Day":
   Calendar1.SelectionMode 
= CalendarSelectionMode.Day;
   
break;
 }  
}

protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
 Label1.Text 
= Calendar1.SelectedDate.ToShortDateString();
 Label2.Text 
= Calendar1.SelectedDate.Day.ToString();
 Label3.Text 
= Calendar1.SelectedDate.Month.ToString();
 Label4.Text 
= Calendar1.SelectedDate.Year.ToString();
}

protected void Button1_Click(object sender, EventArgs e)
{
 
string y = ye.SelectedValue.ToString();
 
string m = mo.SelectedValue.ToString();
 
string d = da.SelectedValue.ToString();
 Calendar1.VisibleDate 
= Convert.ToDateTime(y + "-" + m + "-" + d);
}

protected static DataTable ds(string day) //using System.Data.SqlClient;
{
 SqlConnection con 
= new SqlConnection(ConfigurationManager.ConnectionStrings["pconn"].ConnectionString);
 SqlDataAdapter sda 
= new SqlDataAdapter();
 sda.SelectCommand 
= new SqlCommand("SELECT [title_id], [pubdate], [title] FROM [titles] WHERE ([pubdate]= '" + day + "' )");
 DataSet ds 
= new DataSet();
 sda.Fill(ds, 
"titles");
 
return ds.Tables["titles"];
}

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)//注意事件名稱是 DayRender
{
 CalendarDay d
= e.Day; //設定當前日期
 TableCell c = e.Cell; //設定當前表格
 if (d.IsOtherMonth )
 { 
//如果是其他月份的話就清除本來的節日
  c.Controls.Clear();
 }
 
else
 {
  
try
  {
   
string txt = arr[d.Date.Month][d.Date.Day]; //得到完整的當前[月][日]
   if (txt != string.Empty )
   {
    
string day = e.Day.Date.ToShortDateString(); //獲取當前日期並轉化為短日期格式
    foreach (DataRow dr in ds(day).Rows) //迴圈資料檢視中的每一行
    {
     c.Controls.Clear(); 
//首先我們要清除表格中所有元素
     c.Controls.Add(new ListeralControl("" + day + "'>" + e.Day.Date.Day + "" ) );
    }

    c.Controls.Add(
new LiteralControl("
" + txt) ); //如果有的話,就在日期數字後面換行顯示出來
   }
  }
  
catch (Exception exe)
  {
   Response.Write(exe.ToString() );
  }
 }
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-539839/,如需轉載,請註明出處,否則將追究法律責任。

相關文章