Wijmo 日曆插件

說明:javascript

  由於項目(OA)的須要,我負責開發日程的模塊,相信你們用過谷歌的日曆了吧,是否是以爲挺好用,但又苦於沒法實現?css

  這裏告訴你一個很好的插件,Wijmo,而裏面有一個相似谷歌的日曆事件插件,真的很好很強大,注意,我不是託。html

  當時找到這個插件的時候,真心佩服那些牛逼的外國開發員,能作到這麼厲害,而且還開源了。java

  由於菜鳥,苦苦作了一個多星期才完成,箇中緣由能歸結爲:jquery

一、沒有中文的介紹和幫助,百度谷歌就是找不到很好的例子。正則表達式

二、英文不行,看官網API很吃力,沒有認真看官網的Demo。sql

三、不是很熟悉js。數據庫

技術要點:json

一、基本的js、jQuery使用框架

二、正則表達式的使用(確實很好很強大)

三、wijmo 日曆事件插件的基本使用

四、JSON的基本使用

 

廢話不說,先上幾張效果圖,還在完善中,但願能幫到有須要的人。

個人Demo 圖:

開始上代碼,首先這個日曆中的數據是要存到本地的,因此要建立數據庫。

貼上數據庫代碼:代碼是用SQL 2008的,裏面的註釋很清楚了,僅供參考。

/*********************************************************

說明:日曆事件表:保存日曆事件的信息

做者:Frank

2013-6-17 17:34:05

*********************************************************/

USE HFOA
IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[tsk_calendar_events]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
	DROP TABLE [dbo].[tsk_calendar_events]
GO

CREATE TABLE [dbo].[tsk_calendar_events]
(
--除了id不是插件的關鍵字,全部的都是插件的關鍵字,都要注意轉換,有些不用轉,帶c開頭的都要轉,否則插件會顯示錯誤
	id int identity (1,1) NOT NULL,					--日曆事件編號
	allday VARCHAR(10) NULL,						--是否爲全天事件
	calendar VARCHAR(20) NULL,						--該事件屬於哪一個日程的,有 My 和 Work
	csubject VARCHAR(100) NULL,						--事件主題,顯示時必須轉爲 subject
	color VARCHAR(20) NULL,							--該事件的重要程度,以顏色來區分
	cdescription varchar(250) NULL,					--日程事件的描述,顯示時必須轉爲 description
	cstart VARCHAR(50) NOT NULL,					--開始時間,頁面顯示時必須轉爲 start 格式爲 new Date(2013,5,17,6,0)
	cend VARCHAR(50) NOT NULL,						--結束時間,注意,頁面顯示到頁面的時候必須把字段名改成 end ,不然該日曆插件會報錯 格式爲 new Date(2013,5,17,6,0)
	cid	VARCHAR(50) NOT NULL,						--日曆插件的 id,頁面顯示時必須轉爲 id 
	isNewEvent VARCHAR(10) NULL,					--是否爲新事件
	location VARCHAR(100) NULL,						--事件地點
	recurrenceState VARCHAR(20) NULL,				--當有重複事件的時候,該事件爲主事件仍是派生的 重複事件
	parentRecurrenceId VARCHAR(50) NULL,			--重複事件的主事件 Id	
	
) ON [PRIMARY]

GO


EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'日曆事件編號' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'id'					
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否爲全天事件' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'allday'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'該事件屬於哪一個日程的,有 My 和 Work' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'calendar'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'事件主題,顯示時必須轉爲 subject' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'csubject'				
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'該事件的重要程度,以顏色來區分' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'color'			
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'日程事件的描述,顯示時必須轉爲 description' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'cdescription'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'開始時間,頁面顯示時必須轉爲 start 格式爲 new Date(2013,5,17,6,0)' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'cstart'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'結束時間,注意,頁面顯示到頁面的時候必須把字段名改成 end ,不然該日曆插件會報錯 格式爲 new Date(2013,5,17,6,0)' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'cend'		
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'日曆插件的 id,頁面顯示時必須轉爲 id ' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'cid'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否爲新事件' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'isNewEvent'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'事件地點' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'location'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'當有重複事件的時候,該事件爲主事件仍是派生的 重複事件' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'recurrenceState'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'重複事件的主事件 Id' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_events', @level2type=N'COLUMN', @level2name=N'parentRecurrenceId'
GO




/*********************************************************

說明:日曆事件重複表:保存日曆事件重複的信息

做者:Frank

2013-6-17 17:34:05

*********************************************************/

USE HFOA
IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[tsk_calendar_recu]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
	DROP TABLE [dbo].[tsk_calendar_recu]
GO

CREATE TABLE [dbo].[tsk_calendar_recu]
(
	id int identity (1,1) NOT NULL,					--重複事件的id
	startTime VARCHAR(50) NULL,						--開始時間 格式爲 Date(2013,5,17,6,0)
	endTime VARCHAR(50) NULL,						--結束時間 格式爲 Date(2013,5,17,6,0)
	parentRecurrenceId VARCHAR(50) NULL,			--重複事件的主事件 Id
	recurrenceType VARCHAR(20) NULL,				--事件重複的類型,有天天、每週等
	patternStartDate VARCHAR(50) NULL,				--主事件的開始時間 格式爲 new Date(2013,5,17,6,0)	
	event_id int NOT NULL,							--日曆主表主鍵 Id	
	
) ON [PRIMARY]

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'重複事件的id' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_recu', @level2type=N'COLUMN', @level2name=N'id'					
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'開始時間 格式爲 Wed Jun 19 2013 20:30:00' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_recu', @level2type=N'COLUMN', @level2name=N'startTime'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'結束時間 格式爲 Wed Jun 19 2013 20:30:00' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_recu', @level2type=N'COLUMN', @level2name=N'endTime'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'重複事件的主事件 Id' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_recu', @level2type=N'COLUMN', @level2name=N'parentRecurrenceId'				
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'事件重複的類型,有天天、每週等' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_recu', @level2type=N'COLUMN', @level2name=N'recurrenceType'			
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主事件的開始時間 格式爲 Wed Jun 19 2013 20:30:00' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_recu', @level2type=N'COLUMN', @level2name=N'patternStartDate'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'日曆主表主鍵 Id' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'tsk_calendar_recu', @level2type=N'COLUMN', @level2name=N'event_id'
GO

  好了,最重要的數據庫我們已經設計好了,如今就來執行代碼實施吧!

注意,涉及到2個表,一個是日曆主事件表,一個是用來記錄重複事件的表。

代碼實施:

頁面有2個:

1. tsk_EventsCalendar.aspx

2. tsk_EventsCalendar.aspx.cs

沒錯,就是用C#來寫的,哈哈,被你發現了!不過原理都差很少的,我以前搞SSH,無奈公司不用Java開發,只好學學 ASP.NET 了。

1. tsk_EventsCalendar.aspx

  1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="tsk_EventsCalendar.aspx.cs"
  2     Inherits="Web.General.tsk.tsk_EventsCalendar" %>
  3 
  4 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5 <html xmlns="http://www.w3.org/1999/xhtml">
  6 <head runat="server">
  7     <title>日曆控件</title>
  8     <!-- Theme -->
  9     <link href="../../js/Wijmo/Theme/cobalt/jquery-wijmo.css" rel="stylesheet" type="text/css" />
 10     <style type="text/css">
 11         #eventscalendar
 12         {
 13             width: 750px;
 14         }
 15     </style>
 16 </head>
 17 <body>
 18     <form id="form1" runat="server">
 19     <span id="strjson">
 20         <%=GetStringJSON()%>
 21         <!--  style="display: none;" -->
 22     </span>
 23     <div id="eventscalendar">
 24     </div>
 25     </form>
 26 </body>
 27 </html>
 28 <!-- External dependencies -->
 29 <script src="../../js/Wijmo/External/jquery-1.9.1.min.js" type="text/javascript"></script>
 30 <script src="../../js/Wijmo/External/jquery-ui-1.10.1.custom.min.js" type="text/javascript"></script>
 31 <script src="../../js/Wijmo/External/globalize.min.js" type="text/javascript"></script>
 32 <!--這個加載太大了,看看不要行不行
 33     <script src="Wijmo/External/globalize.cultures.js" type="text/javascript"></script>-->
 34 <script src="../../js/Wijmo/External/jquery.mousewheel.min.js" type="text/javascript"></script>
 35 <!-- Enable built-in datastorage -->
 36 <script src="../../js/Wijmo/datastorage/amplify.core.min.js" type="text/javascript"></script>
 37 <script src="../../js/Wijmo/datastorage/amplify.request.min.js" type="text/javascript"></script>
 38 <script src="../../js/Wijmo/datastorage/amplify.store.min.js" type="text/javascript"></script>
 39 <!-- Wijmo-Open dependencies -->
 40 <script src="../../js/Wijmo/Open/jquery.wijmo.wijutil.min.js" type="text/javascript"></script>
 41 <link href="../../js/Wijmo/Open/jquery.wijmo.wijutil.css" rel="stylesheet" type="text/css" />
 42 <script src="../../js/Wijmo/Open/jquery.wijmo.widget.min.js" type="text/javascript"></script>
 43 <script src="../../js/Wijmo/Open/jquery.wijmo.wijtouchutil.min.js" type="text/javascript"></script>
 44 <script src="../../js/Wijmo/Open/jquery.wijmo.wijcalendar.min.js" type="text/javascript"></script>
 45 <link href="../../js/Wijmo/Open/jquery.wijmo.wijcalendar.css" rel="stylesheet" type="text/css" />
 46 <script src="../../js/Wijmo/Open/jquery.wijmo.wijdropdown.min.js" type="text/javascript"></script>
 47 <link href="../../js/Wijmo/Open/jquery.wijmo.wijdropdown.css" rel="stylesheet" type="text/css" />
 48 <script src="../../js/Wijmo/Open/jquery.wijmo.wijdialog.min.js" type="text/javascript"></script>
 49 <link href="../../js/Wijmo/Open/jquery.wijmo.wijdialog.css" rel="stylesheet" type="text/css" />
 50 <script src="../../js/Wijmo/Open/jquery.wijmo.wijtextbox.min.js" type="text/javascript"></script>
 51 <link href="../../js/Wijmo/Open/jquery.wijmo.wijtextbox.css" rel="stylesheet" type="text/css" />
 52 <script src="../../js/Wijmo/Open/jquery.wijmo.wijcheckbox.min.js" type="text/javascript"></script>
 53 <link href="../../js/Wijmo/Open/jquery.wijmo.wijcheckbox.css" rel="stylesheet" type="text/css" />
 54 <script src="../../js/Wijmo/Open/jquery.wijmo.wijpopup.min.js" type="text/javascript"></script>
 55 <script src="../../js/Wijmo/Open/jquery.wijmo.wijsuperpanel.min.js" type="text/javascript"></script>
 56 <link href="../../js/Wijmo/Open/jquery.wijmo.wijsuperpanel.css" rel="stylesheet"
 57     type="text/css" />
 58 <!-- Wijmo-Pro dependencies -->
 59 <script src="../../js/Wijmo/Pro/jquery.plugin.wijtextselection.min.js" type="text/javascript"></script>
 60 <script src="../../js/Wijmo/Pro/jquery.wijmo.wijinputcore.min.js" type="text/javascript"></script>
 61 <link href="../../js/Wijmo/Pro/jquery.wijmo.wijinput.css" rel="stylesheet" type="text/css" />
 62 <script src="../../js/Wijmo/Pro/jquery.wijmo.wijinputdate.min.js" type="text/javascript"></script>
 63 <script src="../../js/Wijmo/Pro/jquery.wijmo.wijdatepager.min.js" type="text/javascript"></script>
 64 <link href="../../js/Wijmo/Pro/jquery.wijmo.wijdatepager.css" rel="stylesheet" type="text/css" />
 65 <script src="../../js/Wijmo/Pro/jquery.wijmo.wijevcal.min.js" type="text/javascript"></script>
 66 <link href="../../js/Wijmo/Pro/jquery.wijmo.wijevcal.css" rel="stylesheet" type="text/css" />
 67 <script src="../../js/Wijmo/json.js" type="text/javascript"></script>
 68 <script type="text/javascript">
 69     $(document).ready(function () {
 70 
 71         var b = eval($("#strjson").text());
 72 
 73         //獲取日曆插件裏的屬性
 74         function getData2(obj) {
 75             //取得日曆的開始和結束的時間變量傳到後臺,添加操做            
 76             var stime = "new Date(" + obj.start.getFullYear() + "," + obj.start.getMonth() + "," + obj.start.getDate() + "," + obj.start.getHours() + "," + obj.start.getMinutes() + ")";
 77             var etime = "new Date(" + obj.end.getFullYear() + "," + obj.end.getMonth() + "," + obj.end.getDate() + "," + obj.end.getHours() + "," + obj.end.getMinutes() + ")";
 78             //沒有重複事件時的屬性值 
 79             var strGet1 = "&strId=" + obj.id + "&strDes=" + obj.description + "&strEnd=" + etime + "&strLocation=" + obj.location + "&strStart=" + stime + "&strSubject=" + obj.subject + "&strColor=" + obj.color + "&strAllday=" + obj.allday + "&strCalendar=" + obj.calendar + "&strisNewEvent=" + obj.isNewEvent;
 80 
 81             if (obj.recurrencePattern != null) {
 82                 alert(obj.recurrencePattern.endTime + "結束");
 83                 var strGet2 = "&strrecurrenceState=" + obj.recurrenceState + "&strendTime=" + obj.recurrencePattern.endTime + "&strpatternStartDate=" + obj.recurrencePattern.patternStartDate + "&strRecurrenceId=" + obj.recurrencePattern.parentRecurrenceId + "&strrecurrenceType=" + obj.recurrencePattern.recurrenceType + "&strstartTime=" + obj.recurrencePattern.startTime;
 84                 return strGet2 + strGet1;
 85             } else {
 86                 return strGet1;
 87             }
 88         };
 89         $("#eventscalendar").wijevcal({
 90 
 91             visibleCalendars: ["My", "Work"],
 92             dataStorage: {
 93                 addEvent: function (obj, successCallback, errorCallback) {//添加事件
 94                     var strData = getData2(obj);
 95                     //若是是重複事件則把重複事件加進來
 96                     if (obj.recurrencePattern != null) {
 97                         $.post("tsk_EventsCalendar.aspx?dol=addmore" + strData);
 98                     }
 99                     else {
100                         $.post("tsk_EventsCalendar.aspx?dol=add" + strData);
101                     }
102                     successCallback();
103                 },
104                 updateEvent: function (obj, successCallback, errorCallback) {
105                     var strData = getData2(obj);
106                     $.post("tsk_EventsCalendar.aspx?dol=update" + strData);                
107                     successCallback();
108                 },
109                 deleteEvent: function (obj, successCallback, errorCallback) {
110                     //刪除操做
111                     $.post("tsk_EventsCalendar.aspx?dol=del" + "&strId=" + obj.id);
112                     successCallback();
113                 },
114                 loadEvents: function (visibleCalendars, successCallback, errorCallback) {
115 
116 
117                     successCallback(b);
118                 
119                 }
120             }
121         });
122 
123 
124     });
125 
126 
127 </script>
View Code

 

 

2. tsk_EventsCalendar.aspx.cs

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Configuration;
  4 using System.Collections;
  5 using System.Web;
  6 using System.Web.Security;
  7 using System.Web.UI;
  8 using System.Web.UI.WebControls;
  9 using System.Web.UI.WebControls.WebParts;
 10 using System.Web.UI.HtmlControls;
 11 using DBUtility;
 12 using Tools;
 13 using Entity;
 14 using System.Data;
 15 using Newtonsoft.Json;
 16 using System.Text.RegularExpressions;
 17 
 18 namespace Web.General.tsk
 19 {
 20     public partial class tsk_EventsCalendar : BLL.BasePage
 21     {
 22         //建立一個日曆對象
 23         tsk_calendar_eventsBean entity = new tsk_calendar_eventsBean();
 24         protected int id;
 25         protected void Page_Load(object sender, EventArgs e)
 26         {
 27             if (!Page.IsPostBack)
 28             {
 29                 string ss = Get<string>("dol");
 30                 entity.cid = Get<string>("strId");
 31                 entity.cdescription = Get<string>("strDes");
 32                 entity.cend = Get<string>("strEnd");
 33                 entity.location = Get<string>("strLocation");
 34                 entity.cstart = Get<string>("strStart");
 35                 entity.csubject = Get<string>("strSubject");
 36                 entity.cdescription = Get<string>("strDes");
 37                 entity.color = Get<string>("strColor");
 38                 entity.allday = Get<string>("strAllday");
 39                 entity.calendar = Get<string>("strCalendar");
 40                 entity.isNewEvent = Get<string>("strisNewEvent");
 41 
 42                 if (ss == "add")
 43                 {
 44                     addEvents();
 45                 }
 46                 if (ss == "addmore")
 47                 {
 48                     addEventsMore();
 49                 }
 50                 if (ss == "del")
 51                 {
 52                     deleteEvents();
 53                 }
 54                 if (ss == "update")
 55                 {
 56                     updateEvents();
 57                 }
 58             }
 59         }
 60 
 61         //添加數據,沒有重複的事件
 62         protected void addEvents()
 63         {
 64             Factory<tsk_calendar_eventsBean>.Instance.Insert(entity);
 65         }
 66 
 67         //添加數據,日曆被定爲重複的事件
 68         protected void addEventsMore()
 69         {
 70             //該事件的姿態,主 或 從
 71             entity.recurrenceState = Get<string>("strrecurrenceState");
 72             //重複事件的對象
 73             tsk_calendar_recuBean entity2 = new tsk_calendar_recuBean();
 74             entity2.endTime = Get<string>("strendTime");
 75             entity2.patternStartDate = Get<string>("strpatternStartDate");
 76             entity2.parentRecurrenceId = Get<string>("strRecurrenceId");
 77             entity2.recurrenceType = Get<string>("strrecurrenceType");
 78             entity2.startTime = Get<string>("strstartTime");
 79             Factory<tsk_calendar_eventsBean>.Instance.Insert(entity);
 80             //把主表的 id 設置爲重複表的 外鍵 id
 81             entity2.event_id = entity.id;
 82             Factory<tsk_calendar_recuBean>.Instance.Insert(entity2);
 83         }
 84 
 85         //刪除數據
 86         protected void deleteEvents()
 87         {
 88             string strd = Get<string>("strId");
 89 
 90             if (strd.Length >= 35)
 91             {
 92                 entity.cid = Get<string>("strId");
 93                 entity = Factory<tsk_calendar_eventsBean>.Instance.Select("cid='" + strd + "'");
 94             }
 95             else
 96             {
 97                 entity.id = Convert.ToInt32(strd);
 98             }
 99             Factory<tsk_calendar_eventsBean>.Instance.Delete(entity.id);
100         }
101 
102         //修改數據
103         protected void updateEvents()
104         {
105             string strd = Get<string>("strId");
106 
107             if (strd.Length >= 35)
108             {
109                 entity.cid = Get<string>("strId");
110                 entity = Factory<tsk_calendar_eventsBean>.Instance.Select("cid='" + strd + "'");
111             }
112             else
113             {
114                 entity.id = Convert.ToInt32(strd);
115             }
116             Factory<tsk_calendar_eventsBean>.Instance.Update(entity);
117         }
118 
119         protected string GetStringJSON()
120         {
121             int count;
122             DataTable table = Factory<vw_tsk_calendar_eventsBean>.Instance.SelectDataTable(0, 0, GetSearchWhere() + "order by id desc", out count);
123             string strJSON = JsonConvert.SerializeObject(table);
124 
125             //先去掉空的重複事件
126             string strReg = ",\"recurrenceState\":null,\"endTime\":null,\"event_id\":null,\"cuId\":null,\"parentRecurrenceId\":null,\"patternStartDate\":null,\"recurrenceType\":null,\"startTime\":null";
127             Regex rx = new Regex(strReg);
128             strJSON = rx.Replace(strJSON, "");
129 
130             ////去掉關鍵字前的c 和 時間的引號和 GMT 0800
131             strReg = "(\\w)(description)|(\\w)(start)|(\\w)(subject)|(\")(\\w)(end)(\")|\"(new [^\"]*)\"| GMT 0800";
132             rx = new Regex(strReg);
133             strJSON = rx.Replace(strJSON, @"$2$4$6$9$11");
134 
135             strReg = "(\"startTime\":\"[^\"]*\")";
136             rx = new Regex(strReg);
137             strJSON = rx.Replace(strJSON, "$1}");
138 
139             //////把重複事件的對象加上去
140             strReg = "\"endTime";
141             rx = new Regex(strReg);
142             strJSON = rx.Replace(strJSON, "\"recurrencePattern\":{\"endTime");
143             return strJSON;
144         }
145     }
146 
147 }
View Code

 

頁面代碼說明:

一、首先我知道js樣式調用那樣寫是不符合規範的,不建議你們像我這樣,我這樣寫是由於框架(整個OA)的框架搭建問題,只有這樣寫才能生效,就整個問題我也糾結了好一會。

二、代碼不是很規範,效率有點低,但願各位看官將就着看。

入題:

一、初始化日曆控件:

  a:引包,注意順着不能亂(頁面加載順序有關),否則,出事你負責。。。。。。我已經深受其害了。

  b:初始化靜態的日曆控件(很差意思啊,最近在作 ASP.NET ,常常控件控件這樣叫的,望你們理解理解。。。)

 放置一個div,用來初始化日曆的   

<div id="eventscalendar">

</div>

用js來添加日曆

 1 <script type="text/javascript">
 2     $(document).ready(function () {
 3         $("#eventscalendar").wijevcal({
 4             visibleCalendars: ["My", "Work"],
 5             dataStorage: {
 6                 addEvent: function (obj, successCallback, errorCallback) {
 7                     successCallback();
 8                 },
 9                 updateEvent: function (obj, successCallback, errorCallback) {                              
10                     successCallback();
11                 },
12                 deleteEvent: function (obj, successCallback, errorCallback) {
13                     successCallback();
14                 },
15                 loadEvents: function (visibleCalendars, successCallback, errorCallback) {
16                     successCallback();
17                 
18                 }
19             }
20         });
21     });
22 </script>
View Code

 

好了,一個靜態的頁面已經弄好了,這裏爲了你們能看到效果,給你們一個靜態數據的 Demo,你們在頁面中下載吧。

二、獲取數據,並把數據提交到數據庫。

封裝一個獲取數據的方法:

 1  //獲取日曆插件裏的屬性
 2         function getData2(obj) {
 3             //取得日曆的開始和結束的時間變量傳到後臺,添加操做            
 4             var stime = "new Date(" + obj.start.getFullYear() + "," + obj.start.getMonth() + "," + obj.start.getDate() + "," + obj.start.getHours() + "," + obj.start.getMinutes() + ")";
 5             var etime = "new Date(" + obj.end.getFullYear() + "," + obj.end.getMonth() + "," + obj.end.getDate() + "," + obj.end.getHours() + "," + obj.end.getMinutes() + ")";
 6             //沒有重複事件時的屬性值 
 7             var strGet1 = "&strId=" + obj.id + "&strDes=" + obj.description + "&strEnd=" + etime + "&strLocation=" + obj.location + "&strStart=" + stime + "&strSubject=" + obj.subject + "&strColor=" + obj.color + "&strAllday=" + obj.allday + "&strCalendar=" + obj.calendar + "&strisNewEvent=" + obj.isNewEvent;
 8 
 9             if (obj.recurrencePattern != null) {
10                 alert(obj.recurrencePattern.endTime + "結束");
11                 var strGet2 = "&strrecurrenceState=" + obj.recurrenceState + "&strendTime=" + obj.recurrencePattern.endTime + "&strpatternStartDate=" + obj.recurrencePattern.patternStartDate + "&strRecurrenceId=" + obj.recurrencePattern.parentRecurrenceId + "&strrecurrenceType=" + obj.recurrencePattern.recurrenceType + "&strstartTime=" + obj.recurrencePattern.startTime;
12                 return strGet2 + strGet1;
13             } else {
14                 return strGet1;
15             }
16         };
View Code

到此,可以獲取到數據,相信你應該知道怎麼作了吧。。。。哈哈我就很少說了,你們看後臺代碼吧,

不過有些方法你不能直接寫的,好比:Factory<tsk_calendar_eventsBean>.Instance.Update(entity);

由於這些是咱們框架封裝好的方法,^_^,是否是羨慕嫉妒恨?。。。 --!

 

注:

一、Newtonsoft.Json.Net20.dll 爲引用,能夠轉換 JSON格式。

二、善用正則表達式,提升效率,把數據轉爲日曆所需的格式。

三、注意有了重複事件(數據表2)的處理,這個表是日曆主表的附屬表,是 obj裏的子對象。 obj.recurrencePattern,若是沒有建立重複事件,是沒有 recurrencePattern的對象的。

四、別把這個東西看太難了,我當時百度谷歌找不到教程,這不,一個星期也研究些皮毛了,你們加油啊!

五、數據庫設計,由於這個日曆有他的 Id,可是咱們能夠用自增的Id,只作一些處理就行了。

六、字段設計最好跟日曆的屬性對應,個別的處理一下,在顯示的時候用 正則表達式處理就能夠了。

七、學會用火狐調試,斷點調試,能夠看出有什麼對象,有什麼屬性。

 

最後幾點建議:

一、有官網API,即便是英文的,也儘可能去看,由於官網是最全面的,誰叫他是開發者,難道官網會比一個通過本身學習後翻譯出來的差嗎?

二、多看官網的Demo ,對了 Wijmo 還有不少 jQuery 特效,都不錯的。

三、學會用狐火的FireBug,這樣才能調試程序,知道有什麼對象,有什麼屬性!

四、多寫博客,多與人分享交流,那麼這個世界就會更加美好了!

五、代碼注意註釋和風格,最好一屏能讀完,提升可讀性,方便維護!

六、多上博客園(沒有打廣告的嫌疑),真的,即便你不是學習,也能瞭解到不少東西,最重要的是有不少妹子圖 ^.^!

 

 

如下附上源代碼,你們快來拍磚!。。。

下載地址:http://download.csdn.net/detail/hyd8480188/5614657

要一分,給我掙掙分好嗎,沒有分了。

若是你也沒有分,給我郵箱我給你發。

相關文章
相關標籤/搜索