甘特图控件DHTMLX Gantt入门使用教程【引入】:dhtmlxGantt 与 ASP.NET MVC(下)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术(PHP,ASP.NET,Java等)简单集成,满足多种定制开发需求。

DHTMLX JavaScript UI 库所开发的 JavaScript 组件易于使用且功能丰富,非常适合任何领域和任何复杂性的解决方案,能够节省创建和维护业务应用程序的时间,提高生产力。

DHTMLX Gantt 最新下载(qun:764148812)icon-default.png?t=N3I4https://www.evget.com/product/4213/download

错误处理

异常筛选器可用于捕获 CRUD 处理程序中的异常并返回客户端响应 客户端甘特图可以识别。

要为甘特图提供错误处理,请执行以下步骤:

转到App_Start并添加一个名为 GanttAPIExceptionFilterAttribute 的新类:

using System.Net;
using System.Net.Http;
using System.Web.Http.Filters;namespace DHX.Gantt.Web
{
public class GanttAPIExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{context.Response = context.Request.CreateResponse(
HttpStatusCode.InternalServerError, new
{
action = "error",
message = context.Exception.Message
}
);
}
}
}

然后我们将此类添加到我们的 WebAPI 控制器中:

  • 数据控制者:
namespace DHX.Gantt.Web.Controllers
{
[GanttAPIExceptionFilter]
public class DataController : ApiController
  • 链路控制器:
namespace DHX.Gantt.Web.Controllers
{
[GanttAPIExceptionFilter]
public class LinkController : ApiController
  • 和任务控制器:
namespace DHX.Gantt.Web.Controllers
{
[GanttAPIExceptionFilter]
public class TaskController : ApiController

现在,如果任何 Web API 控制器在处理请求时触发异常, 客户端将收到错误状态和错误消息,可以以某种方式处理或向用户显示。

请注意,向客户端返回异常消息可能不是生产环境的最佳主意。

存储任务的顺序

客户端甘特图允许使用拖放对任务进行重新排序。因此,如果您使用此功能,则必须将此订单存储在数据库中。 您可以在此处查看常见说明。

现在让我们将此功能添加到我们的应用程序中。

在客户端上启用任务重新排序

首先,我们需要允许用户在 UI 中更改任务顺序。

打开索引视图并更新甘特图的配置:

gantt.config.order_branch = true;
gantt.config.order_branch_free = true;// specifying the date format
gantt.config.date_format = "%Y-%m-%d %H:%i";
// initializing gantt
gantt.init("gantt_here");

向模型添加任务顺序

现在,让我们在后端反映这些更改。

我们将订单存储在名为 SortOrder 的属性中,因此让我们相应地更新 Task 类:

using System;
using System.ComponentModel.DataAnnotations;namespace DHX.Gantt.Web.Models
{
public class Task
{
public int Id { get; set; }
[MaxLength(255)]
public string Text { get; set; }
public DateTime StartDate { get; set; }
public int Duration { get; set; }
public decimal Progress { get; set; }
public int? ParentId { get; set; }
public string Type { get; set; }
public int SortOrder { get; set; }
}
}

现在我们需要更新任务控制器,即:

  • 客户端应接收按 SortOrder 值排序的任务:
namespace DHX.Gantt.Web.Controllers
{
[GanttAPIExceptionFilter]
public class TaskController : ApiController
{
private GanttContext db = new GanttContext();// GET api/Task
public IEnumerable<TaskDto> Get()
{
return db.Tasks
.OrderBy(t => t.SortOrder)
.ToList()
.Select(t => (TaskDto)t);
}
  • 新任务应接收默认值 SortOrder:
namespace DHX.Gantt.Web.Controllers
{
[System.Web.Http.HttpPost]
public IHttpActionResult CreateTask(TaskDto taskDto)
{
var newTask = (Task)taskDto;newTask.SortOrder = db.Tasks.Max(t => t.SortOrder) + 1;db.Tasks.Add(newTask);
db.SaveChanges();return Ok(new
{
tid = newTask.Id,
action = "inserted"
});
}
  • 在客户端上修改任务顺序时,应更新 SortOrder。

当用户更改任务顺序时,gantt 将调用 PUT 操作,在请求的“target”属性中提供有关新任务位置的信息,以及任务属性的其余部分。

因此,我们应该为任务 DTO 类添加一个额外的属性:

namespace DHX.Gantt.Web.Models
{
public class TaskDto
{
public int id { get; set; }
public string text { get; set; }
public string start_date { get; set; }
public int duration { get; set; }
public decimal progress { get; set; }
public int? parent { get; set; }
public string type { get; set; }
public bool open{ get { return true; } set { } }
public string target { get; set; }...
}
}

现在我们将在 PUT (EditTask) 操作中实现重新排序:

// PUT api/Task/5
[System.Web.Http.HttpPut]
public IHttpActionResult EditTask(int id, TaskDto taskDto)
{
var updatedTask = (Task)taskDto;
updatedTask.Id = id;if (!string.IsNullOrEmpty(taskDto.target))
{
// reordering occurred
this._UpdateOrders(updatedTask, taskDto.target);
}db.Entry(updatedTask).State = EntityState.Modified;
db.SaveChanges();return Ok(new
{
action = "updated"
});
}private void _UpdateOrders(Task updatedTask, string orderTarget)
{
int adjacentTaskId;
var nextSibling = false;var targetId = orderTarget;// adjacent task id is sent either as '{id}' or as 'next:{id}' depending
// on whether it's the next or the previous sibling
if (targetId.StartsWith("next:"))
{
targetId = targetId.Replace("next:", "");
nextSibling = true;
}if (!int.TryParse(targetId, out adjacentTaskId))
{
return;
}var adjacentTask = db.Tasks.Find(adjacentTaskId);
var startOrder = adjacentTask.SortOrder;if (nextSibling)
startOrder++;updatedTask.SortOrder = startOrder;var updateOrders = db.Tasks
.Where(t => t.Id != updatedTask.Id)
.Where(t => t.SortOrder >= startOrder)
.OrderBy(t => t.SortOrder);var taskList = updateOrders.ToList();taskList.ForEach(t => t.SortOrder++);
}

已知问题

当应用在 IIS 上运行时,HTTP PUT 和 DELETE 请求返回 405 或 401 错误。 此问题可能是由 WebDAV 模块引起的,该模块可能与 RESTful 处理程序冲突。

作为常见的解决方案,可以从 web.config 文件中禁用该模块。此处提供了更多详细信息。

应用程序安全性

甘特图不提供任何方法来防止应用程序受到各种威胁,例如SQL注入或XSS和CSRF攻击。重要的是,确保应用程序安全的责任在于实现后端的开发人员。阅读相应文章中的详细信息。

故障排除

ASP.NET Web 应用程序模板不存在

如果在 Visual Studio 2022 中找不到必要的“ASP.NET Web 应用程序”项目模板,请执行以下步骤:

1. 关闭视觉工作室 2022

2. 开始菜单 - > Visual Studio 安装程序

3. 查找视觉工作室社区 2022 ->点击修改

4. 在打开的窗口中,选择单个组件,选中列表中的“.NET Framework 项目和项模板”点,然后单击“修改”

之后,您可以启动 Visual Studio 2022 并找到必要的模板。

初始化数据库时发生异常

有时,您可能会遇到 DropCreateDatabaseIfModelChanges 初始值设定项的问题,该初始值设定项会删除现有数据库,但不创建新数据库。

在这种情况下,打开 GanttInitializer.cs并将 DropCreateDatabaseIfModelChanges 替换为 DropCreateDatabaseAlways

using System;
using System.Collections.Generic;
using System.Data.Entity;namespace DHX.Gantt.Web.Models
{
public class GanttInitializer : DropCreateDatabaseAlways<GanttContext>
{
...
}
}

然后再次运行该应用程序。

呈现任务和链接的问题

如果您已完成上述步骤以实现甘特图与 MVC ASP.NET 集成,但甘特图未在页面上呈现任务和链接,请查看排查后端集成问题一文。它描述了确定问题根源的方法。

DHTMLX Gantt享有超十年声誉,支持跨浏览器和跨平台,性价比高,可满足项目管理控件应用的所有需求,是较为完善的甘特图图表库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/53887.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

甘特图控件DHTMLX Gantt入门使用教程【引入】:dhtmlxGantt 与 ASP.NET MVC(上)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求&#xff0c;具备完善的甘特图图表库&#xff0c;功能强大&#xff0c;价格便宜&#xff0c;提供丰富而灵活的JavaScript API接口&#xff0c;与各种服务器端技术&am…

效果图底图 线框图_线框图初学者指南

效果图底图 线框图 线框图是任何屏幕设计过程中的重要一步。 它主要允许您定义设计的信息层次结构&#xff0c;从而使您可以轻松地根据希望用户处理信息的方式来规划布局。 如果您还没有使用线框图&#xff0c;是时候让您的脚湿了。 在开始之前&#xff0c;有一个简单的问题&a…

平面图,对偶图,

平面图定义&#xff1a; 图存在一种形式&#xff0c;所有的边只在顶点处相交&#xff0c;那么这个图就是平面图。 对偶图定义&#xff1a; 对于每一个平面图&#xff0c; 都有与其相对应的对偶图. 我们假设上面的例图是图G&#xff0c; 与其对应的对偶图G*&#xff0c; 那么对…

eplan图框制作

1、 首先&#xff0c;新建一个原理图项目 2、 新建图框。选择“工具”→“主数据”→“图框”→“新建” 在“文件名”中输入文件名&#xff0c;保存。 3、添加新建图框属性选项。选中“新建符号*”&#xff0c;添加选项 4、 设置图框的属性 a、 列/行字符数&#xff0c;设置为…

【WhatsApp营销】跨境电商推动销售和增长的 7 种方法

WhatsApp 如何帮助推动跨境电商销售&#xff1f;它提供什么样的跨境电商集成&#xff1f;在这篇文章中&#xff0c;我们将探讨跨境电商利用 WhatsApp 发展在线业务的七种方法。 鉴于 WhatsApp 的巨大影响力&#xff0c;与买家联系、营销和销售您的产品并最终在该平台上发展跨境…

关于这次寒武纪裁员的细节

寒武纪是一家看起来很神奇的公司&#xff0c;主营业务和智能芯片相关&#xff0c;今年的股价非常亮眼&#xff0c;年初到现在短短几个月&#xff0c;翻了四五倍。说实话有点小羡慕&#xff0c;要是年初买了它&#xff0c;现在估计也会说&#xff0c;寒武纪真牛皮&#xff0c;毕…

机器学习实战:Python基于支持向量机SVM-RFE进行分类预测(三)

文章目录 1 前言1.1 支持向量机的介绍1.2 支持向量机的应用 2 demo数据集演示2.1 导入函数2.2 构建数据集拟合2.3 预测模型及可视化 3 实例演示分类&#xff08;非SVM&#xff09;3.1 导入函数和数据3.2 简单线性分类3.3 最大间隔决定分类 4 实例演示分类&#xff08;SVM&#…

周期性分析

周期性分析就是探索某个变量是否随着时间的变化而呈现出周期性变化的趋势。具体的周期时间的选取可以根据情况而自定。 具体的代码展现如下&#xff1a; 我遇到的问题&#xff1a; 解决办法&#xff1a; 已解决SyntaxError: (unicode error) ‘unicodeescape’ codec can’t…

从0到1理解ChatGPT, GPT-4【文末送书】

作为一项人工智能技术&#xff0c;ChatGPT正在以飞快的速度向前发展&#xff0c;其强大的学习能力甚至可以用超乎想象来形容。 OpenAI公司带着最新的GPT-4开始“大杀四方”了~OpenAI推出GPT-4文本生成AI系统。紧随其后百度发布文心一言,开启智能对话新时代。&#xff08;文末送…

chatgpt赋能python:Python画图符号详解:入门必知的基础功能

Python画图符号详解&#xff1a;入门必知的基础功能 如果你是初学者&#xff0c;刚刚接触Python编程的话&#xff0c;你可能会感到一点无从下手。但是&#xff0c;随着你的学习深入&#xff0c;你会发现Python的一些非常有用的功能——如画图功能&#xff0c;非常实用又好玩。…

chatgpt赋能python:Python快速画图的不可替代性

Python快速画图的不可替代性 Python作为一个高级编程语言&#xff0c;在科学计算和数据处理领域已经越来越受欢迎。不仅如此&#xff0c;Python也拥有强大的图形库&#xff0c;使其成为一种快速、简便且便于部署的绘图方案。 1. Matplotlib 在Python的图形库中&#xff0c;M…

AIGC浪潮下裁员已至,谈谈居安思危

目录 1、创始人的裁员公告 2、18个月奇迹 3、ChatGPT终结了一切 4、大树之下寸草不生 6、任何一家企业都应居安思危 5、写在最后&#xff1a;既是风口也是浪尖 参考链接&#xff1a; 让所有人都没想到的是&#xff0c;正值人工智能之火烧遍全球之时&#xff0c;一家估值…

2月datawhale组队学习:大数据

文章目录 一、大数据概述二、 Hadoop2.1 Hadoop概述2.2 su:Authentication failure2.3 使用sudo命令报错xxx is not in the sudoers file. This incident will be reported.2.4 创建用户datawhale&#xff0c;安装java8&#xff1a;2.5 安装单机版Hadoop2.5.1 安装Hadoop2.5.2 …

这里有110+公开的专业数据集

&#x1f446;点击关注&#xff5c;设为星标&#xff5c;干货速递&#x1f446; 哈喽大家好&#xff0c;我是俊欣 如果你不是会爬虫的技术流&#xff0c;那下面这110网站可以解决你90%的数据需求。 首先&#xff0c;常见的公开数据网站在 https://hao.199it.com/ 都可以搜索到。…

基于Python的世界各个国家的幸福度的公开数据集的数据挖掘

目录 一&#xff0e; 问题背景 1 二&#xff0e; 准备工作 2 三&#xff0e; 具体实施 2 1.数据存储及基本加载 2 数据整理到数组之中 2 2.数据清洗 2 ① 多余列清除 2 ② 列属性归一 3 ③ 空值处理 4 3.数据挖掘算法 6 ① 基本特征 6 ② 总体热力图分析 7 ③ 对指定数据的热…

【博览群书】《实战大数据》——属于我的第一本大数据图书

文章目录 前言简介目录其他 前言 Hello家人们&#xff0c;博主前不久参加了CSDN图书馆和机械工业出版社联合举办的图书类活动&#xff0c;很荣幸在活动中获得了属于自己的第一本大数据图书&#xff0c;《实战大数据—— 分布式大数据分析处理系统开发与应用》。作为大数据专业…

大数据与AI的16个实践分享

↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习&#xff0c;不错过 Datawhale活动 主办方&#xff1a;DataFun&#xff0c;指导单位&#xff1a;北京智源研究院 文章作者&#xff1a;Hoh Xil 出品平台&#xff1a;DataFunTalk 导读&#xff1a;12.19-20&…

用最诙谐的语言提升你对大数据的认知

写在前面 本文隶属于专栏《100个问题搞定大数据理论体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见100个问题搞定大数据理论体系 引子 小明又来了~ …

大数据平台技术回忆版

liu老师当时也没给我们怎么画重点 我主要是到mooc上面 还有刷题软件上找了题做做 确实有原题 怎么说呢 光看ppt是不太行的 因为有的知识点出的很细。 可以到刷题神器上看看做做题 简单举几个例子 比如这种是吧 选择题跟判断题也是到网上找找题做 确实碰到了原题目 是吧 …

hahabet05:com浅谈大数据一之认识大数据

浅谈大数据一之认识大数据 ***数据&#xff0c;相信在大部分人的脑海中会有一个大概的意识。没错&#xff0c;数据并不是一个新的概念&#xff0c;在这几天年的发展中&#xff0c;人类一直在利用着数据做着记录&#xff0c;而数据的价值&#xff0c;特别是大数据的价值却是近几…