数据库里有个日期表spdate,字段为date,
我要把这个表里的数据显示在日历控件里,
具体的做法就是:表里有数据的那些天在日历控件对应的那些天显示为指定的颜色或标记,
然后在日历控件里点击哪一天,哪一天就变为指定的颜色,同时那天就存入数据库,在点击下就取消,就跟单选按钮一样,
该怎么实现呢,怎么绑定日历控件呢
我要把这个表里的数据显示在日历控件里,
具体的做法就是:表里有数据的那些天在日历控件对应的那些天显示为指定的颜色或标记,
然后在日历控件里点击哪一天,哪一天就变为指定的颜色,同时那天就存入数据库,在点击下就取消,就跟单选按钮一样,
该怎么实现呢,怎么绑定日历控件呢
解决方案 »
- 怎么获取DataList中的列表对象???
- JavaScript选中GridView控件中的CheckBox控件?
- Repeater1中的DataTable 判断值重复
- 编程回忆录站长——编程教父的真人教学视频!
- 请问这个flash源文件在哪可下载到?能不能给个具体的下载网址?谢谢!
- 页面跳转,session失效的问题
- 用RadioButtonList控件出错,实在不知道怎么弄了,请朋友帮忙,急~
- delphi能调用asp.net的bin目录底下生成的dll吗?
- 怎样在一个事件处理涵数中激发另一个事件。在线等。
- 如何用REPEATER实现分页显示技术?
- 一个很简单的问题
- 大家是怎么对asp.net中的模块进行单元测试的?
Inherits="TestCalendarDatasource" %><%@ Assembly Name="System.Collections.Generic" %><script runat="server">
List<DateTime> _ds = null; List<DateTime> ds
{
get
{
if (_ds == null)
_ds = 读取数据库获得相应月份的日期列表(this.Calendar1.SelectedDate.Year, this.Calendar1.SelectedDate.Month);
return _ds;
}
} protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
if (ds.Contains(e.Day.Date))
e.Cell.BackColor = System.Drawing.Color.Blue;
} protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
DateTime d = Calendar1.SelectedDate;
更新数据库中的日期的选择状态(d);
_ds = null; //这使得再读取ds时重新访问数据库
} private List<DateTime> 读取数据库获得相应月份的日期列表(int year, int month)
{
throw new NotImplementedException();
} private void 更新数据库中的日期的选择状态(DateTime d)
{
throw new NotImplementedException();
}
</script><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Calendar ID="Calendar1" runat="server" OnDayRender="Calendar1_DayRender" OnSelectionChanged="Calendar1_SelectionChanged">
</asp:Calendar>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
{
if (ds.Contains(e.Day.Date))
{
Control c=动态创建我自己的控件例如状态用户控件(e.Day.Date);
c.ID="日期旁边的扩展内容";
e.Cell.Add(c);
}
}这样,在日期旁边就可以出现你自己定义的任何控件。
如果在OnSelectChanged()中实现,当连续点击相同的日期时,系统是不会调用这个事件。
那如何准确取得点取的日期?
namespace SRS.Calendar {
[Guid ( "9c7c129b-9442-4d16-a30f-c1d43c35c0e3" )]
public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart {
public WebPart1 () {
}
System.Web.UI.WebControls.Calendar cal;
string url;
Literal redire = new Literal (); private string _eventName = "SRS.Events";
[Personalizable ( PersonalizationScope.Shared ), WebBrowsable ( true ), WebDisplayName ( "Event name" ), WebDescription ( "Input event name" )]
public string eventName {
get { return _eventName; }
set { _eventName = value; }
}
protected override void OnInit ( EventArgs e ) {
this.EnsureChildControls ();
this.Load += new EventHandler (Calendar_Load);
base.OnInit ( e );
}
void Calendar_Load ( object sender, EventArgs e ) {
if ( string.IsNullOrEmpty ( Page.Request.Url.ToString() ) ) {
return;
}
} protected override void CreateChildControls () {
cal = new System.Web.UI.WebControls.Calendar ();
this.cal.ID = "Calendar";
this.cal.BorderColor = System.Drawing.ColorTranslator.FromHtml ( "#f1f9e2" );
this.cal.BorderStyle = BorderStyle.Solid;
this.cal.BorderColor = System.Drawing.ColorTranslator.FromHtml ( "#f1f9e2" );
this.cal.BorderWidth = 0;
this.cal.SelectorStyle.Font.Bold = true;
this.cal.CellPadding = 4;
this.cal.CellSpacing = 4;
this.cal.TitleStyle.CssClass = "ms-menutoolbar";
this.cal.DayHeaderStyle.ForeColor = System.Drawing.ColorTranslator.FromHtml ( "#818080" );
this.cal.OtherMonthDayStyle.ForeColor = System.Drawing.ColorTranslator.FromHtml ( "#f1f9e2" );
this.cal.OtherMonthDayStyle.BackColor = System.Drawing.ColorTranslator.FromHtml ( "#f1f9e2" );
this.cal.OtherMonthDayStyle.Font.Bold = false;
this.cal.SelectedDayStyle.ForeColor = System.Drawing.ColorTranslator.FromHtml ( "#818080" );
this.cal.SelectedDayStyle.BackColor = System.Drawing.ColorTranslator.FromHtml ( "#ffffff" );
this.cal.DayRender += new System.Web.UI.WebControls.DayRenderEventHandler ( OnDayRender );
this.cal.SelectionChanged += new EventHandler ( this.cal_SelectionChanged );
this.Controls.Add ( cal );
this.Controls.Add ( redire ); }
protected void cal_SelectionChanged ( object sender, EventArgs e ) {
System.Web.UI.WebControls.Calendar sendCal = ( System.Web.UI.WebControls.Calendar ) sender;
RenderEventsByDate ( sendCal.SelectedDate );
} private void RenderEventsByDate ( DateTime selectedDate ) {
if ( !string.IsNullOrEmpty ( eventName ) ) {
SPSecurity.RunWithElevatedPrivileges ( delegate () {
using ( SPSite site = new SPSite ( SPContext.Current.Site.ID ) ) {
try {
using ( SPWeb web = site.RootWeb ) {
try {
SPList calendarList = web.Lists [eventName];
SPQuery query = new SPQuery ();
query.Query = string.Format ( "<Where><Eq><FieldRef Name='EventDate'/><Value Type='DateTime'>{0}</Value></Eq></Where>", SPUtility.CreateISO8601DateTimeFromSystemDateTime ( selectedDate ) );
SPListItemCollection calendarItems = calendarList.GetItems ( query );
url = SPContext.Current.Web.Url + "/Lists/" + eventName.Replace ( ".", "" ) + "/calendar.aspx?CalendarDate=" +
selectedDate.Month.ToString () + "/" + selectedDate.Day.ToString () + "/" +
selectedDate.Year.ToString () + "&CalendarPeriod=month";
redire.Text = "<script language='javascript'>window.location='" + url + "'</script>"; } catch ( Exception ee ) {
web.Dispose ();
string error = ee.ToString ();
}
}
} catch ( Exception ee ) {
site.Dispose ();
string error = ee.ToString ();
}
}
} );
}
} protected void OnDayRender ( object sender, DayRenderEventArgs e ) {
CalendarDay day = ( ( DayRenderEventArgs ) e ).Day;
TableCell cell = ( ( DayRenderEventArgs ) e ).Cell;
cell.Style.Add ( "color", "#818080" );
if ( day.IsToday ) {
cell.Font.Bold = true;
} else if ( day.IsOtherMonth ) {
cell.Style.Add ( "color", "#f1f9e2" );
} if ( !string.IsNullOrEmpty ( eventName ) ) {
SPSecurity.RunWithElevatedPrivileges ( delegate () {
using ( SPSite site = new SPSite ( SPContext.Current.Site.ID ) ) {
try {
using ( SPWeb web = site.RootWeb ) {
try {
SPQuery query = new SPQuery ();
query.Query = string.Format ( "<Where><Eq><FieldRef Name='EventDate'/><Value Type='DateTime'>{0}</Value></Eq></Where>", SPUtility.CreateISO8601DateTimeFromSystemDateTime ( day.Date ) );
SPListItemCollection calendarItems = web.Lists [eventName].GetItems ( query );
if ( calendarItems.Count > 0 ) {
cell.BackColor = System.Drawing.Color.Khaki;
}
} catch ( Exception ee ) {
web.Dispose ();
string error = ee.ToString ();
}
}
} catch ( Exception ee ) {
site.Dispose ();
string error = ee.ToString ();
}
}
} );
} }
protected override void Render ( HtmlTextWriter writer ) {
EnsureChildControls ();
redire.RenderControl ( writer );
cal.RenderControl ( writer );
}
}
}
这是之前 写sharepoint的一个webpart 可以照思路写 ,都是重写那几个函数的...