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

转自http://www.cnblogs.com/codelove/archive/2011/05/26/2058068.html

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

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

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) (这点还需要完善),开始时间,日期列数,文本列列数,计划列头,日期列背景色等等。也就是这个计划自定义性是很强的,完全可以根据数据的需要来显示。

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

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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);

        }

    }

}

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

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——施工计划日报表(二)

静听鸟语花香,漫赏云卷云舒。一花一世界,一树一菩提,一码一人生。

 

时间: 2024-10-24 10:50:47

Silverlight——施工计划日报表(一)的相关文章

Silverlight——施工计划日报表(四)——自适应浏览器窗口

转自http://www.cnblogs.com/codelove/archive/2011/06/12/2079232.html 在很多情况下,从用户体验的角度考虑,我们都希望我们的Silverlight程序能够适应各种大小的浏览器窗口或者框架,如图所示:   那么如何使Silverlight程序能够自适应浏览器窗口的大小呢,即使在动态改变浏览器窗口的时候也不例外.Google了几次,都没找到自己所需要的方案,于是只好自己来解决了.   首先,有没有办法在Silverlight的程序代码中获取

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

Silverlight--施工计划日报表(一) 近来一直在加班,基本上没有个人时间.所以更新不会很即时. 长话短说,先从界面代码开始吧.界面代码很简单,如下所示: <UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presenta

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

转自http://www.cnblogs.com/codelove/archive/2011/06/03/2071267.html 近来非常忙,睡觉时间都不够.这一篇,尽量说完整吧,由于时间紧,可能不会详细讲解.   这一篇主要内容有:界面调整与布局.日期计划网格和内容绘制.提交事件(Silverlight调用JS函数).进度条显示与隐藏(JS调用Silverlight函数).左击选择时间段.右键菜单.设置完成状态.全屏等等.   如果各位有啥好建议或者代码有不当之处,请各位不要吝啬口水,尽管回

在Silverlight中动态绑定页面报表(PageReport)的数据源

ActiveReports 7中引入了一种新的报表模型--PageReport(页面布局报表),这种报表模型又细分了两种具体显示形式: o    固定页面布局报表模型(FPL)是ActiveReports 7中首创的一种 .NET报表模型,通过这种模型可以非常方便地设计出拥有复杂格式的报表模板.您只需定义好页面大小,然后以一种可视化的方式添加需要的控件并设置数据填充方式,剩下的工作将由报表引擎自动完成. o    连续页面布局报表模型(CPL)主要通过数据区域来控制报表的布局,并能自动实现数据分

Silverlight呈现“图表和报表”

问题描述 实现思路:项目中用到的图表和报表比较多,想把它们建立一个SL项目放在一起,在asp.net页面中用到的时候只要引用就可以了.而且SL项目可以直接和三层中的BLL层进行交互,这样它就和asp.net项目几乎完全分离开来,比较好维护.而且能做出比较酷的效果的只有Flash和SL了,.net下当然用SL了.问题一:各位大侠,您看这种思路行的通吗???问题二:SL可用的"图表组件"有"visiblox"和"visifire",SL可用的&quo

EXT.NET高效开发(四)——实用技巧

很久没有发文了,一是忙上线的事.二是有些颓废了,身体虚弱了,感觉工作没有激情了,不太想写.好了,既然承诺了写下去,那么就坚持吧. 俗话说"授人以鱼,不如授之以渔",下面就开始本篇之旅吧. 1)检测浏览器与IE版本. 这里是在后台检查,然后输出相应的Extjs脚本,你也可以在前台写JS检测. 这里没有使用EXT.NET的对象,直接写的纯Extjs. 这里是在后台代码进行判断,首先获取浏览器信息判断,然后注册相应的Extjs脚本.当用户点是,则下载.注释很完整,就不多做解释了.   if

卡巴斯基实验室发现Silverlight零日漏洞

日前,卡巴斯基实验室发现了在Silverlight应用程序中存在一个危险的零日漏洞,为百万用户带来安全隐患. 本周三,在一篇博文中,网络安全公司卡巴斯基表示,该漏洞将允许攻击者获取进入到受感染计算机的权限并执行恶意代码窃取秘密情报,并且可以随他们的意志实施监视,并造成大规模的破坏. Silverlight中文名为"微软银光",是由微软公司开发的一种新的Web呈现技术,借助该技术,您将拥有内容丰富.视觉效果绚丽的交互式体验.支持来自全球的数百万PC用户在不同的操作系统上安装操作,框架内的

SilverLight页面怎么使用水晶报表

问题描述 各位网页朋友,SilverLight页面怎么使用水晶报表啊?都说SilverLight页面可以使用水晶报表,殊不知SilverLight页面的工具箱中没有水晶报表这个工具,这种情况下咋办?求这方面的专家给讲解一下如何在SilverLight页面下面使用或者调用实现水晶报表? 解决方案 解决方案二:http://blog.csdn.net/luochengbang/article/details/4260166不知道这个是不是你要的?解决方案三:http://www.baidu.com/

SQL Server 2005报表设计:最佳实践和指导

本文包含了Microsoft SQL Server报表服务报表设计的技巧和最佳实践.本文提供一些基本的设计问题和一些报表服务的功能. 关于这篇文档 从使用数据控件,到使用什么格式,到如何分发报表,报表制作者面对着很多种选择.Microsoft SQL Server 报表服务提供了丰富的报表设计和格式的支持,从基于纸介质表格报表到带有图片和钻取功能的交互式报表 这篇文档包括了报表制作和设计中的指导.建议和技巧.本文档的目的在于解释一般性的问题并对初学者提供指导建议.报表服务联机丛书提供了报表的制作