提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:颜馨|2023-05-09 11:14:19.233|阅读 82 次
概述:本章介绍dhtmlxGantt 与 ASP.NET MVC(下),欢迎查阅!
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术(PHP,ASP.NET,Java等)简单集成,满足多种定制开发需求。
DHTMLX JavaScript UI 库所开发的 JavaScript 组件易于使用且功能丰富,非常适合任何领域和任何复杂性的解决方案,能够节省创建和维护业务应用程序的时间,提高生产力。
甘特图控件交流群:764148812
异常筛选器可用于捕获 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; } } }
现在我们需要更新任务控制器,即:
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); }
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" }); }
当用户更改任务顺序时,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攻击。重要的是,确保应用程序安全的责任在于实现后端的开发人员。阅读相应文章中的详细信息。
如果在 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享有超十年声誉,支持跨浏览器和跨平台,性价比高,可满足项目管理控件应用的所有需求,是较为完善的甘特图图表库
甘特图控件交流群:764148812
欢迎进群交流讨论,获取更多帮助请联系
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
Visual Paradigm中的Doc. Composer菜单,可让您以完全可自定义的方式输出模型和图表的每个细节。在本文中,您将学习如何创建自定义模板来输出项目中图表或模型元素的注释。
对于银行金融、政府、医疗等需要处理大量信息的组织来说,高效的数据管理至关重要。对于大型数据扫描项目,Dynamic Web TWAIN SDK 提供强大的功能,只需极少的设置即可支持大量文档处理,让我们看看 Dynamsoft 如何简化此过程中的每个步骤。
在 Microsoft Excel 中,复制行、列和单元格是日常数据处理中的常见操作。本文将介绍如何使用 Spire.XLS for Java 和 Java 在 Excel 中复制行、列和单元格数据并保留格式。
雷达图又称蜘蛛图,是一种显示二维多元数据的图形方法。图表上的每个辐条代表一个不同的变量,数据点沿着这些辐条绘制。雷达图尤其适用于比较不同实体在多个标准中的表现。本文将演示如何使用 Spire.XLS for Python 通过 Python 在 Excel 中创建雷达图。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢