FullCalendarDemo5 控件的实例讲解—拖拽实现值班排班(三)

FullCalendarDemo5 控件的实例讲解—拖拽实现值班排班

(三)c# asp.net 操作FullCalendarDemo5 拖拽排班

通过指定拖拽事件的方法,来实现用户外部关联数据拖拽,通过ajax来实现异步数据保存,从而不刷新页面,满足用户体验。

在index.aspx代码页,页面<body>部分不变,对<script>部分进行更新。老版本中,直接指定drop:function(event){}即可,但新版的事件调用方法变化很大。FullCalendar v5.11.2 版本的调用方法如下:

document.addEventListener('DOMContentLoaded', function () {

            var Calendar = FullCalendar.Calendar;

            var Draggable = FullCalendar.Draggable;

            var containerEl = document.getElementById('external-events');

            var calendarEl = document.getElementById('calendar');

            //var checkbox = document.getElementById('drop-remove');

            // 初始化 external events

           new Draggable(containerEl, {

                itemSelector: '.fc-event',

                eventData: function (eventEl) {

                    return {

                        title: eventEl.innerText

                    };

                }

            });

            // 初始化 the calendar

           

            var calendar = new Calendar(calendarEl, {

                headerToolbar: {

                    left: 'prev,next today',

                    center: 'title',

                    right: 'dayGridMonth,timeGridWeek,timeGridDay'

                },

                locale: 'zh-cn',//指定中文

                editable: true,

                eventOrder: 'order',//排序

                droppable: true, // 允许拖拽

                drop: function (info) {

                    //是否 "拖拽后删除" ,当checkbox 选定后?

                    //if (checkbox.checked) {

                    //    // if so, remove the element from the "Draggable Events" list

                    //    info.draggedEl.parentNode.removeChild(info.draggedEl);

                    //}

                 

                    var start_day = info.dateStr;        //取用户拖拽到位的日期         

                    var title = info.draggedEl.innerText; //取拖拽对象的文本

                   

                    var eventData;

                    if (title) {

                        eventData = {

                            title: title,

                            start: start_day

                        };

                        var str = JSON.stringify(eventData);//将eventData对象转json字符串

                        $.ajax({

                            contentType: "application/json",

                            type: "post",

                            datatype: "json",

                            url: "index.aspx/DropSave",  //异步执行的方法

                            data: "{'datastr':'" + str + "'}",  //post请求传递的数据

                            success: function (msg) {

                                 alert("拖拽保存成功");//可以注释掉

                            },

                            error: function (x) {

                                alert("失败" + x);

                            }

                        });

                    }

                }, 

events: [<%=jsonstr_start %>]   //显示的值班表数据

            });

            calendar.render();

        });

页面首先还是要先显示已经排好的值班表,只是增加了drop事件。

在index.aspx.cs代码页,

[WebMethod]

        public static bool DropSave(string datastr)

        {

            JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();

            Dutydata _jsondutydata = jsonSerializer.Deserialize<Dutydata>(datastr);

            DateTime start = _jsondutydata.start;

            string personname = _jsondutydata.title;//用户名后面跟了一个\n

            personname = personname.Substring(0, personname.Length - 1);

            string tmp_sql = @"select UserID from Users where Username='" + personname + "'";

            DBHelp db = new DBHelp();

            DataSet ds = db.GetDataSetSql(tmp_sql);

            int userid = int.Parse(ds.Tables[0].Rows[0][0].ToString());

            string sqlstr = string.Format("INSERT INTO dutyplay(dutydate,userid,personname,duty_time) VALUES ('{0}','{1}','{2}','{3}')", start, userid, personname, DateTime.Now);           

            int i = DBHelp.ExecuteCommand(sqlstr);

           

            if (i > 0)

            {

                return  true;

            }

            else

            {

                return  false;

            }

        }

       代码很简单,使用了json数据类型,Dutydata对象包含start和title两个属性,start记录值班日期,title记录值班员姓名。

 (源码后)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lanhai96

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值