日历控件(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() );
}
}
}
{ // 只运行一次
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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12639172/viewspace-539839/