日历插件FullCalendar应用:(二)数据增删改

时间:2022-09-01 13:01:21

接上一篇 日历插件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[];
}
}
}

然后添加泛型类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 == ){
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>

在点击日历界面时弹出任务添加界面效果如下图:

日历插件FullCalendar应用:(二)数据增删改

在选择日期时是这样显示的:

日历插件FullCalendar应用:(二)数据增删改

是不是感觉很别扭?首先日期的月,星期都是英文展现,并且input中的格式为月、日、年显示很别扭,所以对其进行汉化处理以及格式年月日的展现我把它放到了ui.datepicker.js文件中:

jQuery(function($){
$.datepicker.regional['zh-CN'] = {
closeText: '关闭',
prevText: '<上月',
nextText: '下月>',
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[]);
}
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; }

编辑界面:

日历插件FullCalendar应用:(二)数据增删改

在编辑完信息保存时用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进行删除。

好了,以上就是本文章的主要内容,本文其实上周就应该写完发布的,最近有点儿忙,元旦回来后赶紧把这篇补上,这个插件就讲到这里,文章中很多代码都没有过多的处理,简单的把增删改查写了写,提供一个小小的思路,可能在您以后的工作中会用到此插件,如果能帮助到您,我将倍感荣幸,如有不足,请多多指正,在下感激不尽。。。

最后一定要分享源码:http://files.cnblogs.com/files/crayoncode/MvcFullCalendar.rar

日历插件FullCalendar应用:(二)数据增删改的更多相关文章

  1. fullcalendar日历插件的使用并动态增删改查

    我上个项目是做了一个关于教育方面的web端页面,其中的课程表就要用到fullcalendar日历插件,刚开始也是不会用,因为以前也没用过,后面也是看官方文档,问同事,最后完成了这个课程表,个人感觉fu ...

  2. salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建

    VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的标签相对简单,如果需要深入了解VF相关知识以及标签, 可以通过以下链接查看或下载 ...

  3. C&num;操作Excel数据增删改查&lpar;转&rpar;

    C#操作Excel数据增删改查. 首先创建ExcelDB.xlsx文件,并添加两张工作表. 工作表1: UserInfo表,字段:UserId.UserName.Age.Address.CreateT ...

  4. C&num;操作Excel数据增删改查示例

    Excel数据增删改查我们可以使用c#进行操作,首先创建ExcelDB.xlsx文件,并添加两张工作表,接下按照下面的操作步骤即可 C#操作Excel数据增删改查. 首先创建ExcelDB.xlsx文 ...

  5. 【转载】salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建

    salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建   VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的 ...

  6. 日历插件FullCalendar应用:&lpar;一&rpar;数据展现

    在博客园逛了很长时间了,它帮助我获得了很多知识,很感谢大家的分享,而自己呢,由于各种纠结一直没提笔写博客,直到我看到了这篇文章http://www.cnblogs.com/zhaopei/p/why_ ...

  7. Webform(五)——内置对象(Response、Request)和Repeater中的数据增删改

    一.内置对象 (一)Response对象 1.简介:response 对象在ASP中负责将信息传递给用户.Response对象用于动态响应客户端请求,并将动态生成的响应结果返回到客户端浏览器中,使用R ...

  8. WebForm 内置对象、数据增删改、状态保持

    一.内置对象 1.Response对象:响应请求 Response.Write("<script>alert('添加成功!')</script>"); → ...

  9. Sql Server——数据增删改

    所谓数据的增删改就是在创建好数据库和表后向表中添加数据.删除表中的数据.更改表中的一些数据. 新增数据: 语法一: insert into 表名 values (数据内容)        --这里需要 ...

随机推荐

  1. Linux服务器使用命令操作MySQL插入数据乱码问题

    服务器上使用MySQL命令方式进行插入数据时,很多时候会遇到插入数据乱码问题,导出一个sql执行文件,再倒入到unbutn中,结果出现乱码,折腾7-8分钟, 解决方式 在导出mysql sql执行文件 ...

  2. 04&lowbar;XML&lowbar;01&lowbar;入门基础

    [什么是XML] Extensible Markup Language,翻译过来即可扩展标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 在XML语言中,它允 ...

  3. 不使用jquery情况下循环添加绑定事件方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 教你如何反编译app&comma;拿到加密方式

    大家知道app 有安卓和ios 安卓是apk 现在基本上apk都是经过加密的 想动态脱壳没一定的技术是搞不定的 IOS是ipa 今天我主要讲的是这个   准备好反编译设备 1.一套越狱的ios手机 我 ...

  5. eclipse代码编辑区字符串自动转义设置

    在做接口测试时,有时接口请求参数非常多,如果用java相关方法去拼接参数,难度较大,并且非常浪费时间,那如何快速将整个请求参数拼接成一个字符串呢?为了解决这个问题,只要简单配置下eclipse设置即可 ...

  6. Vue中axios的使用技巧配置项详解

    使用axios首先要下载axios模块包 npm install axios --save 其次需要在使用的文件中引入 import axios from 'axios' 一.调用axios常见两种方 ...

  7. libreoffice python 操作word及excel文档

    1.开始.关闭libreoffice服务: 开始之前同步字体文件时间,是因为创建soffice服务时,服务会检查所需加载的文件的时间,如果其认为时间不符,则其可能会重新加载,耗时较长,因此需事先统一时 ...

  8. 【Spark-core学习之一】 Spark初识

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  9. tomcat7的catalina&period;sh配置说明

    捞财宝项目8G内存tomcat7的配置JAVA_OPTS="-Xms1024m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=2048M  -XX:M ...

  10. sqlserver--install&sol;uninstall

    2017 express版本 安装: https://jingyan.baidu.com/article/76a7e409077997fc3a6e1559.html https://www.cnblo ...