Winform 关于计划报表的设计

最近接到任务要搞一个计划报表,点名要用Winform,网上控件倒是有,就是贵,Devexpress 也有,还是贵,而且要求就要用自己写的,老程序风格还不能变,所以外部控件什么的就别想了。要求显示一天24小时,各个时间段的计划,类似甘特图的效果。
琢磨着,Winform 各个功能,咋实现呢?有以下几个方案

dataGridView

dataGirdview,合并单元格,重写画图,什么的,一顿操作猛如虎,效果呢就有些差强人意,关键dataGridView刷新速度太快,表格数据变动,或者是界面大小改变,都会刷新界面。数据量小还可以,数据量一大整个界面直接花屏…糟心。
网上的资源又乱又少,想想也是,Winform现在使用量这么少,心累

Graphics

讲真的,这个肯定能画出来。。。。。。。。。。。

tableLayOutPanel

最终想起还有这么个玩意。这个可控度就大了,如果只是展示报表,做一些可以描述的小操作,完全可以满足要求。搞呗?搞。。。。
在这里插入图片描述
效果吗,就是这样,满足了要求,大大很欣慰!!!!

给自己做个标记,下次遇到类似问题,可以及时找到线索。不走弯路。

注意事项,数据量过多,表头会随着滑块走动,好吧,我重新化了一个表头。

核心技术:

TableLayoutPanel tableTitle = new TableLayoutPanel();
        this.panelTile.Controls.Clear();
        tableTitle.GetType().GetProperty("DoubleBuffered", 		  			System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(tableTitle, true, null);
        
        // 默认添加一行数据
        tableTitle.Dock = DockStyle.Top;     //顶部填充
        panelTile.Controls.Add(tableTitle);
        tableTitle.ColumnCount = 26;          //26列
        tableTitle.Height = tableTitle.RowCount * 40; //table的整体高度,每行40
        tableTitle.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, tableTitle.Width * 0.4f)); 
        
Label label2 = new Label();
    label2.Text = "name";
    label2.Width = 200;
    label2.Height = 40;
    label2.Font = new Font("楷体", 13, FontStyle.Regular);
    label2.TextAlign = ContentAlignment.MiddleCenter;
    tableTitle.Controls.Add(label2, j, k);

就是添加格子,要担心是啥,就是合并单元格
咋合并?

panel.SetColumnSpan(label1, count);
panel.SSetRowSpan(label2, counts);

再具体的就要自己后台计算了。

有的说,时间怎么都会是整点呢?扯犊子,我就是几点几分的,你都是整数单元格,满足不了需求。。。呵呵呵,年轻的少年呦,你丢的是这把金斧头还是这个王者斧头呢。。。毕竟困难总比方法多。。,??方法总比困难多,我琢磨着,开始结束时间你都有,只要获取到单元格的长度,每一个长度代表一个小时也就是60分,所以:单元格长度/60 * 分钟 你用Margin 属性。。。搞定。。。散花!!!

一、应用场景与出发点 同一个系统中,为了解决不同的客户可能需要设计不同的单据打印模板,实现此方法可能是: 1、设计不同的自带RDLC报表文件,根据当前客户加载不同的报表并打印 2、GDI+绘图 和 打印组件 ,不同的客户创建不同的绘图XML格式的模板内容 3、其他第三方组件 主要对比一下前两种方法,第一种方法不好之处在于,不灵活,开发者必须地每个客户制订一个报表,不推荐采用。第二种方法,修改对应的模板内容就可以了, 模板内容可以是Xml文件,也可以是存放在数据库中的Xml格式字符串。推荐采用这种方法。然后这种方法的也有一个棘手问题 :如何让用户快速、方便地设计打印模板,本示例就是为了解决这个问题。 二、实现思路与原理 功能概要:设计一个界面,支持用户自由添加 要打印的项,文本,直线,图片 等,并且可以方便改变打印项的 字体、颜色、粗细、位置,设计时支持效果预览。 技术要点:GDI+绘图、拖动控件、XML解析、自定义控件 三、相关类介绍 绘图工具类:DrawHelper 实现 xml格式模板 与 打印项 之间进行互相转换,在目标画板中绘制 拖动工具类:WinHelper 实现控件的鼠标拖动,键盘移动 自定义控件:用于显示文字的文本框 TextBoxExt、用于显示直线的标签 LabelExt 主窗体代码:用于用户操作,添加,删除,编辑,打印项 详细介绍请参照我的博文:http://de.cel.blog.163.com/blog/static/51451236201472215450939/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值