日曆插件FullCalendar應用:(二)數據增刪改

来源:http://www.cnblogs.com/crayoncode/archive/2016/01/04/5072552.html
-Advertisement-
Play Games

接上一篇日曆插件FullCalendar應用:(一)數據展現。這一篇主要講使用fullcalendar插件如何做數據的增刪改,用到了art.dialog web對話框組件,上一篇用到的webForm來展現數據,這一篇使用mvc模式來對數據進行增刪改查。1、準備工作本人用的SQLServer2012,...


接上一篇 日曆插件FullCalendar應用:(一)數據展現

這一篇主要講使用fullcalendar插件如何做數據的增刪改,用到了art.dialog web對話框組件,上一篇用到的webForm來展現數據,這一篇使用mvc模式來對數據進行增刪改查。

1、準備工作

本人用的SQLServer2012,首先創建任務資料庫 Task 

USE [TestDemo]
GO


SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Task](
    [ID] [nvarchar](50) NOT NULL,
    [Name] [nvarchar](50) NULL,
    [Contents] [nvarchar](max) NULL,
    [StartDate] [datetime] NULL,
    [EndDate] [datetime] NULL,
 CONSTRAINT [PK_Task] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

 創建MVC解決方案,此時mvc模式不再贅述,相信大家都會如何運用,然後把上篇文章用到的css以及js文件添加到本解決方案中。

在首頁Index頁面中引入文件以及添加div:(日曆展現方式與之前相同) 

    <link href="../../Content/css/fullcalendar.css" rel="stylesheet" />
    <link href="../../Content/css/jquery.ui.css" rel="stylesheet" />
    <link href="../../Content/css/style.default.css" rel="stylesheet" />

    <script src="../../Scripts/Plugins/jquery-1.7.min.js"></script>
    <script src="../../Scripts/Plugins/jquery-ui-1.8.16.custom.min.js"></script>
    <script src="../../Scripts/Plugins/fullcalendar.min.js"></script>
    <script src="../../Scripts/Plugins/fullcalendar.js"></script>   

<div id='calendar' style="margin-top:10px;margin-left:5px">
</div> 

 創建任務類:

/// <summary>
    /// 任務類
    /// </summary>
    public  class Task
    {
        public string ID { get; set; }
        /// <summary>
        /// 任務名稱
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 內容
        /// </summary>
        public string Contents { get; set; } 
        /// <summary>
        /// 開始時間
        /// </summary>
        public DateTime? StartDate { get; set; }
        /// <summary>
        /// 結束時間
        /// </summary>
        public DateTime? EndDate { get; set; }
    } 

2、任務查看

任務查看上篇已經介紹,不再過多的講述,由於實現方式發生了改變所以簡單的提一下,把數據表中的數據查詢出來然後展現在fullcalendar上,我用ado.net來對數據進行操作,首先創建CommonDbHelper類: 

public class CommonDbHelper
    {
        #region 屬性
        /// <summary>
        /// 資料庫連接字元串
        /// </summary>
        private string connectionString;
        public string ConntionString
        {
            get
            {
                return connectionString;
            }
            set
            {
                connectionString = value;
            }
        }
       
        #endregion

        #region 構造方法
        /// <summary>
        /// 從配置中自動讀取資料庫類型及連接字元串
        /// </summary>
        public CommonDbHelper()
        {
            this.connectionString = ConfigurationManager.AppSettings["ConnectionString"];           
        }
        #endregion

       
        /// <summary>
        /// 執行查詢語句
        /// </summary>
        /// <param name="SqlString">查詢語句</param>
        /// <returns>DataTable </returns>
        public DataTable ExecuteQuery(string sqlString)
        {
            using (IDbConnection iConn = new SqlConnection(this.ConntionString))
            {
             
                DataSet ds = new DataSet();
                try
                {
                    System.Data.IDataAdapter iAdapter = new SqlDataAdapter(sqlString, (SqlConnection)iConn);
                    iAdapter.Fill(ds);
                }
                catch (System.Exception e)
                {
                    throw new Exception(e.Message);
                }
                finally
                {
                    if (iConn.State != ConnectionState.Closed)
                    {
                        iConn.Close();
                    }
                }
                return ds.Tables[0];
            }
        }
    }
View Code

 然後添加泛型類SQLHelper通過反射把查詢出來的DataTable轉換為list:

 public class SQLHelper<Tentity> where Tentity : class,new()
    {
        /// <summary>
        /// 獲取所有數據
        /// </summary>
        /// <returns></returns>
        public IList<Tentity> GetData(string statement)
        {           
              
                var dt = new CommonDbHelper().ExecuteQuery(statement);               
                if (dt == null || dt.Rows.Count == 0){
                    return null;
                }                      
                IList<Tentity> list = new List<Tentity>(dt.Rows.Count);
                // 獲得此模型的類型  
                Type type = typeof(Tentity);
                string tempName = "";
                foreach (DataRow dr in dt.Rows)
                {
                    Tentity t = new Tentity();
                    // 獲得此模型的公共屬性     
                    PropertyInfo[] propertys = t.GetType().GetProperties();
                    foreach (PropertyInfo pi in propertys)
                    {
                        // 檢查DataTable是否包含此列   
                        tempName = pi.Name;  
                        if (dt.Columns.Contains(tempName))
                        {                             
                            if (!pi.CanWrite) continue;
                            object value = dr[tempName];
                            if (value != DBNull.Value)
                                pi.SetValue(t, value, null);
                        }
                    }
                    list.Add(t);
                }               

                return list;
           
        }
        
    }

在查詢所有數據時只需要這樣寫然後foreach迴圈就可以了:

 SQLHelper<Task> dataHelper = new SQLHelper<Task>();
 string strcom = "SELECT * FROM Task";
 IList<Task> tasks = dataHelper.GetData(strcom);

  

3、任務的添加操作

添加頁面信息,新增Edit界面: 

@model MvcApplication1.Models.Task
<script type="text/javascript">
        $(function () {
            $("#start").datetimepicker({
                hour: 5,
                minute: 20
            });
            $("#end").datetimepicker({
                hour: 13,
                minute: 15
            });
        });
     </script>
    <div>
    <form id="myForm" method="post" action="">
    <div class="aboxmanageform">                
            <table  style="width:650px">
                <tr>
                    <td class="item_title">
                        任務名稱:
                    </td>
                    <td colspan="3">
                       <input id="Name"  name="Name" type="text" style="width:516px"  value="@Model.Name" class="longinput" />
                    </td>                                
                </tr>
                <tr>
                    <td class="item_title">
                        任務內容:
                    </td>
                    <td colspan="3">
                       <textarea cols="80" name="Contents" id="Contents" rows="10" style="width:516px" class="longinput">@Model.Contents</textarea>
                    </td>
                </tr>
                <tr>
                    <td class="item_title">
                        開始時間:
                    </td>
                    <td>
                        <input id="start" name="StartDate" type="text" value="@Model.StartDate" class="longinput" />
                    </td>     
                     <td class="item_title">
                        結束時間:
                    </td>
                    <td>
                        <input id="end" name="EndDate" type="text" value="@Model.EndDate" class="longinput"  />
                    </td>               
                </tr>               
            </table>
          
          <input type="hidden" name="ID" value="@Model.ID" />  
    </div>
    </form>
</div>

     在fullcalendar.js文件里 初始化calendar的方法中有dayClick方法,此方法在點擊日曆的時可進行自己想要的操作。我希望在點擊日曆的時候彈出可添加任務的對話框,在填寫信息之後點擊保存,把信息保存到資料庫,此刻就用到了art.dialog組件(具體的API以及如何使用可登陸官網自己學習http://lab.seaning.com/很容易掌握) 

添加art.dialog的css、js 引用:

<link href="../../Content/css/default.css" rel="stylesheet" />
<script type="text/javascript" src="../../Scripts/Plugins/artDialog.js"></script>

        在添加任務的時候需要有開始時間,結束時間。時間的選擇用到的是jqueryui的日期datepicker,但是在官網提供的資料中只能選擇日期,不能選擇小時,分等信息,然後在網上找到了一個插件可以選擇小時,分。在起始頁引入文件:

 <script src="../../Scripts/Plugins/jquery-ui-timepicker-addon.js"></script>

 在點擊日曆界面時彈出任務添加界面效果如下圖:

 在選擇日期時是這樣顯示的:

 是不是感覺很彆扭?首先日期的月,星期都是英文展現,並且input中的格式為月、日、年顯示很彆扭,所以對其進行漢化處理以及格式年月日的展現我把它放到了ui.datepicker.js文件中:

jQuery(function($){
    $.datepicker.regional['zh-CN'] = {
        closeText: '關閉',
        prevText: '&#x3c;上月',
        nextText: '下月&#x3e;',
        currentText: '今天',
        monthNames: ['一月','二月','三月','四月','五月','六月',
        '七月','八月','九月','十月','十一月','十二月'],
        monthNamesShort: ['一','二','三','四','五','六',
        '七','八','九','十','十一','十二'],
        dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
        dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
        dayNamesMin: ['日','一','二','三','四','五','六'],
        dateFormat: 'yy-mm-dd', firstDay: 1,
        isRTL: false};
    $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
});

     在填寫完信息保存時用ajax,POST方法訪問InsertData.ashx一般處理程式通過ado.net方式來對數據進行插入:

 var SaveDatas = function () {
        var name = $("#Name").val();
        var contents = $("#Contents").val();
        var startdatestr = $("#start").val(); 
        var enddatestr = $("#end").val(); 
        var mainid; //數據主鍵
        var taskdata = { name: name, contents: contents, confshortname: 'M1', start: startdatestr, end: enddatestr };
        $.ajax({
            type: "POST", 
            url: "../DateHandle/InsertData.ashx",
            data: taskdata, //要發送的數據
            success: function (data) {
                //對話框裡面的數據提交完成,data為操作結果
                //data為主鍵ID                                       
                mainid = data;
                var schdata2 = { title: name, fullname: name, confshortname: 'M1', start: startdatestr, end: enddatestr, id: mainid };
                $('#calendar').fullCalendar('renderEvent', schdata2, true);
                $("#start").val(''); //開始時間
                $("#end").val(''); //結束時間
                $("#Name").val(''); //標題  
               
            }
        });
    }

可能有人註意到了紅色部分,在保存成功後界面不會展現新添加的任務,所以要對其進行渲染操作。

4、任務的編輯操作

      在fullcalendar.js文件里 初始化calendar的方法中有eventClick方法,此方法的用處就在於點擊日曆上的信息時執行自己想要的操作,在此無疑我們想要點擊某個任務來進行修改,fullcalendar屬性中有一個id(事件的唯一標識),在上面添加的操作中我們已經把insert後返回的主鍵賦值給id,所以在點擊每個任務時,可以把id傳遞過去進行修改操作。

    上面的編輯界面中我用到的實體對數據進行展現,所以在請求到Edit的Action時如果是新建操作則new 一個Task返回到界面,如果是編輯則查詢資料庫是否存在,如果存在則返回,Controller里的Edit方法: 

        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Edit(string id)
        {
            if (!string.IsNullOrEmpty(id))
            {
                SQLHelper<Task> dataHelper = new SQLHelper<Task>();
                string str = string.Format("SELECT * FROM Task where ID ='{0}'", id);
                IList<Task> task = dataHelper.GetData(str);
                return PartialView(task[0]);
            }
            else            
                return PartialView(Create());
        }
        /// <summary>
        /// 創建初始化數據
        /// </summary>
        /// <returns></returns>
        private static Task Create()
        {
            Task task = new Task();
            task.Name = "";
            task.Contents = "";
            task.StartDate = null;
            task.EndDate = null;
            task.ID = null;
            return task;
 
        }

編輯界面:

在編輯完信息保存時用ajax,POST方法訪問UpdateData.ashx一般處理程式通過ado.net方式來對數據進行更新: 

 var SaveEditDatas = function (event) {
        var startdatestr = $("#start").val(); //開始時間
        var enddatestr = $("#end").val(); //結束時間
        var name = $("#Name").val();
        var contents = $("#Contents").val();
        event.fullname = name;
        event.start = startdatestr;
        event.end = enddatestr;      
        var schdata = { name: name, contents: contents, start: startdatestr, end: enddatestr, id: event.id };
        $.ajax({
            type: "POST", 
            url: "../DateHandle/UpdateData.ashx",
            data: schdata, //要發送的數據
            success: function (data) {               
                $('#calendar').fullCalendar('updateEvent', event);
            }
        });
    }

同樣的,紅色部分也需要註意在修改完之後要通過updateEvent進行更新

4、任務的刪除操作

在上面的編輯操作中有一個刪除按鈕,在點開任務時,點擊此按鈕進行刪除。同樣的,把主鍵ID傳遞給DeleteData.ashx一般處理程式通過ado.net方式對數據進行刪除。

 $.ajax({
      type: "POST", 
      url: "../DateHandle/DeleteData.ashx", 
      data: para, 
      success: function (data) {                           
      $('#calendar').fullCalendar('removeEvents', event.id);
        }
   });

刪除完之後要通過removeEvents進行刪除。

     好了,以上就是本文章的主要內容,本文其實上周就應該寫完發佈的,最近有點兒忙,元旦回來後趕緊把這篇補上,這個插件就講到這裡,文章中很多代碼都沒有過多的處理,簡單的把增刪改查寫了寫,提供一個小小的思路,可能在您以後的工作中會用到此插件,如果能幫助到您,我將倍感榮幸,如有不足,請多多指正,在下感激不盡。。。

最後一定要分享源碼:https://yunpan.cn/cu8Fn5CV3VsRD 訪問密碼 163b


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文翻譯自http://developer.android.com/intl/zh-cn/tools/building/multidex.html#about。主要介紹當我們Android App中函數超過65536時構建失敗的原因及解決辦法! ------------------------...
  • 1.前言 隨著移動支付時代的到來,TouchID 指紋驗證迅速被支付寶,微信錢包普及,相信各位朋友使用後也大呼方便。之前寫了篇關於iOS9的3D Touch的集成使用,有朋友在我博客下提到,讓我寫一篇關於指紋解鎖的blog,元旦結束後,立馬前來向大家分享我的一點點拙見。關於3D Touch 感興趣....
  • 大家都知道,WKWebview是沒有查看大圖的屬性或者方法的,所以只能通過js與之交互來實現這一功能,原理:通過js獲取頁面的圖片,把它存放到數組,給圖片添加點擊事件,通過index顯示大圖就行了其實很簡單,給WKWebview寫個類別,添加兩個方法就行了,然後在WKWebview的兩個協議中調用下...
  • 自定義UICollectionView,主要會用到以下幾個方法:- (void)prepareLayout; 第一次載入layout、刷新layout、以及- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds;這個方法返回ye...
  • <font color=" ff0000" <strong 以下內容為原創,歡迎轉載,轉載請註明來自天天博客:<http://www.cnblogs.com/tiantianbyconan/p/5098943.html </strong </font 使用Dagger 2依賴註入 圖表創建的性能 ....
  • 1. 位元組碼文件轉java文件 smali2java是一個將smali代碼反編譯成java代碼的工具。什麼是smali?smali是將Android位元組碼用可閱讀的字元串形式表現出來的一種語言,可以稱之為Android位元組碼的反彙編語言。使用baksmali或apktool可以將Android應用程...
  • 在iphone裡面,應用都會在“設置”裡面有個專屬的應用設置,選擇該菜單界面,用戶便可以在其中輸入和更改各種選項,協助用戶更便捷設置個人喜好與習慣。在這一節中,希望能通過對捆綁包(bundle)的介紹以及plist文件等的運用,探討用戶預設機制中,應用設置的開發與調用。【本次開發環境: Xco...
  • /* 圖層關係 子視圖 - 嵌套在父視圖之上的視圖 父視圖 - 被嵌套的視圖 視圖和視圖之間可以層層嵌套 */ UIView *red = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 100, 100)]; red.backgr...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...