前一段时间,客户需要一个施工计划报表,要求能够直观的看到各个计划的实施时间,而且能够修改。琢磨着,决定用Silverlight搞定好了。效果如下:

用户可以通过右键菜单的【完成】选项来标记完成,左键选择单元格来设置时间段。那么数据是怎么带过来的呢?在这个Silverlight程序里面,定义了这么一个类:

namespace PlansView
{/// <summary>/// 数据/// </summary>public class PlansData{public List<Plan> LstPlan { get; set; }/// <summary>/// 计划时间集合/// </summary>public List<PlanDate> LstPlanDate { get; set; }}/// <summary>/// 计划/// </summary>public class Plan{/// <summary>/// 计划名称/// </summary>public string PlanName { get; set; }}/// <summary>/// 计划日期/// </summary>public class PlanDate{/// <summary>/// 说明/// </summary>public string Explain { get; set; }/// <summary>/// 开始时间/// </summary>public DateTime? StartDate { get; set; }/// <summary>/// 结束时间/// </summary>public DateTime? EndDate { get; set; }/// <summary>/// 允许的最小值/// </summary>public DateTime? MinDate { get; set; }/// <summary>/// 允许的最大值/// </summary>public DateTime? MaxDate { get; set; }/// <summary>/// 是否只读/// </summary>public bool IsReadOnly { get; set; }/// <summary>/// 是否允许超过当前时间/// </summary>public bool CanGreaterThanNow { get; set; }/// <summary>/// 是否已编辑/// </summary>public bool HasEdit { get; set; }/// <summary>/// 是否已完成/// </summary>public bool IsFlish { get; set; }/// <summary>/// 是否允许撤销/// </summary>public bool AllowCancel { get; set; }/// <summary>/// 是否允许为空(必填情况下,无法提交数据)/// </summary>public bool AllowBlank { get; set; }/// <summary>/// 自定义标记/// </summary>public string Tag { get; set; }}
}

这个类,对每一小行(就是时间行)都做了精细的控制。比如是否只读,是否已编辑,是否允许为空(不选),是否允许撤销(当标记为完成时),允许标记的最大值、最小值以及是否允许结束时间超过当天。当然,这个类主要是对数据行的控制,整个报表还有些全局的控制。比如日期格式(day、week、month)(这点还需要完善),开始时间,日期列数,文本列列数,计划列头,日期列背景色等等。也就是这个计划自定义性是很强的,完全可以根据数据的需要来显示。

比如刚才这个测试的数据如下:

        public string InitParams { get; set; }protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){try{InitParams = "Title=施工计划,DateColCount=80,PlanHeads=工程名称,Data=";List<PlansData> _lstPlansData = new List<PlansData>();LoadData(_lstPlansData);InitParams += HttpUtility.UrlEncode(JsonConvert.SerializeObject(_lstPlansData, Formatting.Indented));//LogManager.WriteTraceLog(JsonConvert.SerializeObject(_lstPlansData, Formatting.Indented));}catch (Exception ex){LogManager.WriteErrorLog(ex);}}}
        private static void LoadData(List<PlansData> _lstPlansData){PlansData _planData1 = new PlansData(){LstPlan = new List<Plan>(){new Plan(){PlanName="木工轻钢割断墙"}},LstPlanDate = new List<PlanDate>(){new PlanDate(){StartDate=DateTime.Now,EndDate=DateTime.Now.AddDays(3),Explain="基准时间",IsReadOnly=true},new PlanDate(){StartDate=DateTime.Now.AddDays(1),EndDate=DateTime.Now.AddDays(4),Explain="计划时间",CanGreaterThanNow=true},new PlanDate(){StartDate=DateTime.Now.AddDays(2),EndDate=DateTime.Now.AddDays(5),Explain="实际时间",IsFlish=true,AllowBlank=false}}};_lstPlansData.Add(_planData1);PlansData _planData2 = new PlansData(){LstPlan = new List<Plan>(){new Plan(){PlanName="贴文化石,刷漆"}},LstPlanDate = new List<PlanDate>(){new PlanDate(){StartDate=DateTime.Now.AddDays(5),EndDate=DateTime.Now.AddDays(16),Explain="计划时间",CanGreaterThanNow=true},new PlanDate(){StartDate=DateTime.Now.AddDays(4),EndDate=DateTime.Now.AddDays(15),Explain="实际时间"}}};_lstPlansData.Add(_planData2);PlansData _planData3 = new PlansData(){LstPlan = new List<Plan>(){new Plan(){PlanName="石膏板吊棚"}},LstPlanDate = new List<PlanDate>(){new PlanDate(){StartDate=DateTime.Now.AddDays(5),EndDate=DateTime.Now.AddDays(18),Explain="基准时间",IsReadOnly=true,CanGreaterThanNow=true},new PlanDate(){StartDate=DateTime.Now.AddDays(8),EndDate=DateTime.Now.AddDays(12),Explain="计划时间"},}};_lstPlansData.Add(_planData3);PlansData _planData4 = new PlansData(){LstPlan = new List<Plan>(){new Plan(){PlanName="大白乳胶漆"}},LstPlanDate = new List<PlanDate>(){new PlanDate(){StartDate=DateTime.Now.AddDays(15),EndDate=DateTime.Now.AddDays(18),Explain="基准时间",IsReadOnly=true},new PlanDate(){StartDate=DateTime.Now.AddDays(19),EndDate=DateTime.Now.AddDays(25),Explain="计划时间"},new PlanDate(){StartDate=DateTime.Now,EndDate=DateTime.Now.AddDays(5),Explain="实际时间"}}};_lstPlansData.Add(_planData4);PlansData _planData5 = new PlansData(){LstPlan = new List<Plan>(){new Plan(){PlanName="铺地板"}},LstPlanDate = new List<PlanDate>(){new PlanDate(){StartDate=DateTime.Now.AddDays(3),EndDate=DateTime.Now.AddDays(5),Explain="基准时间"},new PlanDate(){StartDate=DateTime.Now.AddDays(6),EndDate=DateTime.Now.AddDays(15),Explain="计划时间"},new PlanDate(){StartDate=DateTime.Now.AddDays(7),EndDate=DateTime.Now.AddDays(19),Explain="实际时间"}}};_lstPlansData.Add(_planData5);PlansData _planData6 = new PlansData(){LstPlan = new List<Plan>(){new Plan(){PlanName="测试1"}},LstPlanDate = new List<PlanDate>(){new PlanDate(){StartDate=DateTime.Now,EndDate=DateTime.Now,Explain="基准时间"},new PlanDate(){StartDate=DateTime.Now.AddDays(6),EndDate=DateTime.Now.AddDays(15),Explain="计划时间"},new PlanDate(){StartDate=DateTime.Now.AddDays(79),EndDate=DateTime.Now.AddDays(79),Explain="实际时间"}}};_lstPlansData.Add(_planData6);}

Silverlight——施工计划日报表(二)

Silverlight——施工计划日报表(一)相关推荐

  1. 监测数据处理系统-自动导出监测日报表、周报表及月报表(基坑监测、地铁监测)

    一.软件简介 本系统主要用于工程监测(基坑监测.隧道监测.建筑物沉降观测等)数据处理,主要功能:1.各类监测数据录入.计算:2.施工工况信息录入汇总:3.巡视记录的录入.巡视报告导出:4.依据已录入的 ...

  2. 物联网实践实习日报表

    物联网实践实习日报表 项目名称 [苏嵌实训-嵌入式 linuxC 第1天] 今日进度以及任务 今天老师带着我们学习了嵌入式开发概述及嵌入式开发环境安装及使用熟悉相关命令,另外进行了C语言的训练 1.嵌 ...

  3. excel自动排班表_中建最新版施工计划进度横道图,一键自动生成,横道图从此不用愁...

    中建最新版施工计划进度横道图,一键自动生成,横道图从此不用愁 横道图,是一种非常实用的图表类型.施工进度计划的制定在工程项目里是很重要的,这可以大大提高施工单位的管理水平,是项目施工必备.作为一个在工 ...

  4. 基坑监测日报模板_深基坑工程监测日报表.doc

    技术资料 PAGE 知识 共享 墙(坡)顶水平位移和竖向位移监测日报 ( )监测日报表 第 页 共 页 第 次 工程名称: 报表编号: 天气: 观测者: 计算者: 测试日期: 年 月 日 点号 水平位 ...

  5. wincc报表日报表实例_工作系统二次开发二Python加工原膜切割日报表数据实例

    #工作系统二次开发二Python加工原膜切割日报表数据实例 #当查询一个或多个工作令后在表格展示数据前按要求对数据进行二次处理,处理要求看如下 #1.加工单号和母卷物料编号相同则把除第一行外的领料有关 ...

  6. es统计mysql 报表_Elasticsearch(简称ES)实现日报表、月报表、年报表统计,没数据补0...

    前言: 这是1张相对简单些报表示例,用sql语句也能实现,但主要是为了便于大家理解ES聚合实现报表的使用方法. 之前写过"java实现日报表.月报表统计,没数据补0"文章,http ...

  7. Wincc 7.5 SP1使用VBS创建Excel日报表并显示在画面

    目录 1 <概述> 2 <创建模板> 3 < Wincc变量> 4 <创建全局动作> 4.1 动作1脚本:创建文件及拷贝报表 4.2 全局动作2:整点存 ...

  8. SAP中成本中心实际/计划/差异报表查询实例

    SAP的标准成本中心实际/计划/差异报表功能S_ALR_87013611之前有初步了解.但很少使用.今天刚好做分析时需要查询一些数据.因此,做一个设定情景来实际操作一次看看应用效果并记录.假设想要查询 ...

  9. 表格进阶03—出纳日报表(表格,再次练习)

    一.代码如下: <!DOCTYPE html> <html lang="en"> <head><meta charset="UT ...

最新文章

  1. [雪峰磁针石博客]kotlin书籍汇总
  2. linux java 栈_关于Java中栈与堆的思考
  3. Cpp 11 / 万能引用、引用折叠和完美转发
  4. activemq5.14 mysql_activemq5.14+zookeeper3.4.9实现高可用
  5. 如何维护应用程序状态
  6. 2.数据中台 --- 什么是数据中台
  7. Bootstarp4 按钮
  8. 国外大神制作的史上最精简Win10系统,真有那么好用吗?
  9. 爬取豆瓣网新书传递信息,关系型数据库的储存
  10. 小议Linux安全防护(一)
  11. 世界你好python_Python基础01之“你好世界”
  12. 特征多项式法(characteristic polynomial )求特征值(结合lanczos和householder)(python,数值积分)
  13. 为什么一个简单腹泻,服用了附子理中丸后,会绵延十年不愈?(转)
  14. XXX is not defined.eslint no-undef
  15. BRC4工具1.2.2入门教程学习
  16. 给定平面上任意三个点的坐标(x​1​​,y​1​​)、(x​2​​,y​2​​)、(x​3​​,y​3​​),检验它们能否构成三角形
  17. Beam Search、GREEDY DECODER、SAMPLING DECODER等解码器工作原理可视化以及在自然语言生成领域的使用
  18. 什么手机杀毒软件最好用?3款很棒的手机用杀毒软件推荐给你
  19. 解决WORD “未找到引用源”问题
  20. Java 编程语言的特点、优点和架构

热门文章

  1. google-auto之自动生成组件化文件
  2. M001: MongoDB Basics Chapter 3: Deeper Dive on the MongoDB Query Language学习记录
  3. 众达两化融合贯标日记08~培训23001标准
  4. Matlab中mat2str函数使用
  5. [CLR团队公告]CLR基础研究团队:精品系列推广活动启动
  6. armbian清理_N1刷入Armbian后保护emmc – 禁止varlog日志
  7. PYTHON h5py库包安装及读写
  8. 中文编码问题分析及几种乱码场景
  9. 关于python的各个常用软件——python、pycharm、anaconda
  10. ANC主动降噪蓝牙耳机南A2测评:日常通勤降噪亲民之选!