其他分享
首页 > 其他分享> > Winform 关于(日)计划报表的设计

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 属性。。。搞定。。。散花!!!

标签:报表,label2,单元格,tableTitle,System,new,设计,Winform
来源: https://blog.csdn.net/weixin_40899924/article/details/115203834