使用GridVIew显示Gantt(甘特图),动态增减列
说明:本例是做了工厂的排机报表
一、根据查询日期初始化GridView列
private void IniGridView(DateTime p_DateS,DateTime p_DateE)
{
//1.移除机台以外的列
for (int i = gridView1.Columns.Count - 1; i >= 0; i--)//从后向前遍历删除,否则会引起混乱。不用foreach也是出于此原因
{
if (gridView1.Columns[i].FieldName != "MachineNo")//MachineNo:机台
{
gridView1.Columns.RemoveAt(i);//移除
}
} //2.根据日期增加列
//2-1.判断间隔长度
TimeSpan TS1 = new TimeSpan(SysConvert.ToDateTime(p_DateS).Ticks);//SysConvert是我所使用框架自定义的,可更换为Convert
TimeSpan TS2 = new TimeSpan(SysConvert.ToDateTime(p_DateE).Ticks);
TimeSpan TS = TS1.Subtract(TS2).Duration();
int days = TS.Days; if (days>100)//限制不要超出100天,防止用户误选过长日期,可根据实际情况调整
{
return;
}
//2-2.循环增加列
for (int i = 0; i <= days; i++)
{
//定义列名为日期
DateTime coldate = p_DateS.AddDays(i); //添加列
DevExpress.XtraGrid.Columns.GridColumn column = new DevExpress.XtraGrid.Columns.GridColumn();
column.FieldName = coldate.ToString("yyyy-MM-dd");//把日期作为字段名,此处需要特别注意,填充数据时,需要根据日期确定归属列
column.Caption = coldate.ToString("M.dd");//显示名称
column.Visible = true;//可见性
column.VisibleIndex = i;//序号 必须设置,否则默认-1,仍然不可见
column.ColumnEdit = this.txtMemo;
gridView1.Columns.Add(column);
}
}
二、处理DataTable
public override void BindGrid()
{
string sql = "SELECT MachineNo FROM Data_MachineManage WHERE 1=1 "; // Data_MachineManage是存储所有机台的数据表
DataTable dt = SysUtils.Fill(sql);//SysUtils为框架特有方法,非普遍方法,视实际情况替换
Proc(dt,txtFormDateS.DateTime,txtFormDateE.DateTime);
gridView1.GridControl.DataSource = dt;
gridView1.GridControl.Show();
} /// <summary>
/// 处理数据表,填充排机信息
/// </summary>
/// <param name="dt"></param>
private void Proc(DataTable p_dt,DateTime p_DateS,DateTime p_DateE)
{
//扩充dt表的列数与GridView列数一致
TimeSpan TS1 = new TimeSpan(SysConvert.ToDateTime(p_DateS).Ticks);
TimeSpan TS2 = new TimeSpan(SysConvert.ToDateTime(p_DateE).Ticks);
TimeSpan TS = TS1.Subtract(TS2).Duration();
int days = TS.Days;
if (days>)
{
return;
}
for (int i = ; i <= days; i++)
{
DateTime coldate = p_DateS.AddDays(i);//取当天日期作为列名,与GridView保持一致
p_dt.Columns.Add(coldate.ToString("yyyy-MM-dd"), typeof(string));//添加列
} //根据数据来填格子
string sql = "SELECT * FROM UV1_Sale_SOReviewPlan WHERE ProDate between ' "+p_DateS.toString()+" ' and ' "+p_DateE.toString()+" ' "; //说明:查询出的一条记录包含以下信息:日期ProDate,订单OrderFormNo,机台MachineNo。一条记录只包含一天的排机信息,10.1-10.5号是6条记录,而非一条 DataTable dt = SysUtils.Fill(sql);//把符合条件的所有排机记录取出来
foreach (DataRow dr in dt.Rows)
{
//定义显示字符串
string str=dr["OrderFormNo"].ToString(); //定义机台,方便查询
string JT = dr["MachineNo"].ToString(); //当前行的日期,以便确定属于p_dt表的哪一列
string prodate = SysConvert.ToDateTime(dr["Prodate"]).ToString("yyyy-MM-dd");
DataRow[] p_drarr = p_dt.Select("MachineNo=" + SysString.ToDBString(JT));//在排机表里把机台行取出来
if (p_drarr.Length==)//无此机台则中断本次循环
{
continue;
}
else
{
DataRow p_dr = p_drarr[];//取出符合条件的第一行
p_dr[prodate] = str;//此处prodate为列名,GridView和p_dt中每个日期的字段均为某年某月某日
}
}
}
附上效果图:

使用GridVIew显示Gantt(甘特图),动态增减列的更多相关文章
- GridView 显示行号 设置行号列的宽度
/// <summary> /// GridView 显示行号 设置行号列的宽度 /// </summary> /// <param name="gv" ...
- gantt甘特图的制作过程
甘特图主要是用来做项目管理的,可以清楚的看到任务间的逻辑关系,任务与时间关系和任务间并行关系. 在甘特图中,横轴方向表示时间,纵轴方向并列着活动列表.图表内可以用线条.数字.文字代号等来表示计划(实际 ...
- gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
前言 Excel功能强大,应用广泛.随着web应用的兴起和完善,用户的要求也越来越高.很多Excel的功能都搬到了sass里面.恨不得给他们做个Excel出来...程序员太难了... 去年我遇到了 ...
- Twproject Gantt开源甘特图功能扩展
1.Twproject Gantt甘特图介绍 Twproject Gantt 是一款基于 jQuery 开发的甘特图组件,也可以创建其它图表,例如任务树(Task Trees).内置编辑.缩放和 CS ...
- 【转载】 JQuery.Gantt(甘特图) 开发指南
转载来自: http://www.cnblogs.com/liusuqi/archive/2013/06/09/3129293.html JQuery.Gantt是一个开源的基于JQuery库的用于实 ...
- JQuery.Gantt(甘特图)开发
一.简介 JQuery.Gantt是一个开源的基于JQuery库的用于实现甘特图效果的可扩展功能的JS组件库. 二.前端页面 2.1 资源引用 首先需要将下载到的源码中的CSS.IMG.JS等资源放入 ...
- odoo10甘特图gantt view
odoo10中的gantt图示例 1.Gantt属性说明 甘特图视图的根元素是<gantt />,它没有子节点但可以采用以下属性: date_start (required) 提供每条记录 ...
- java实现甘特图的2种方法:SwiftGantt和Jfree (转)
http://blog.sina.com.cn/s/blog_50a7c4a601009817.html 第一种方法使用SwiftGantt实现甘特图(进度图推荐这个) import java.a ...
- jquery 甘特图开发指南
JQuery.Gantt是一个开源的基于JQuery库的用于实现甘特图效果的可扩展功能的JS组件库. <link rel="stylesheet" href="cs ...
随机推荐
- 动态加载框架DL分析
动态加载框架DL分析 插件化开发,主要解决三个问题1.动态加载未安装的apk,dex,jar等文件2.activity生命周期的问题,还有service3.Android的资源调用的问题 简单说一下怎 ...
- 蒙特卡洛马尔科夫链(MCMC)
蒙特卡洛马尔科夫链(MCMC) 标签: 机器学习重要性采样MCMC蒙特卡洛 2016-12-30 20:34 3299人阅读 评论(0) 收藏 举报 分类: 数据挖掘与机器学习(41) 版权声明: ...
- pandas应用之分组因子暴露和分位数分析
pandas应用之分组因子暴露和分位数分析 首先感谢原书作者Mes McKinney和batteryhp网友的博文, 俺在此基础上继续探索python的神奇功能. 用A股的实际数据, 以书里的代码为蓝 ...
- Java分别与MySQL、Oracle、SQL Server数据库建立连接
1.与MySQL连接 jar包下载地址: Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动(MySQL的jar包) String u ...
- VMWARE里启动kylin16.0时出现'SMBus Host Controller not enabled'(还未进入系统)
在Vmware里安装完Ubuntu16.10,启动时出现'SMBus Host Controller not enabled'错误提示,进不到图形界面.网上搜了一下,解决办法是在图形界面里进终端窗口, ...
- angular中动态添加的元素绑定事件问题
$compile http://segmentfault.com/q/1010000000726448/a-1020000000727088 接口下载问题
- 7 -- Spring的基本用法 -- 4...
7.4 使用 Spring 容器 Spring 有两个核心接口:BeanFactory 和 ApplicationContext,其中ApplicationContext 是 BeanFactory ...
- 【转】Expire Google Drive Files 让Google Docs云盘共享连接在指定时间后自动失效
最近在清理Google Docs中之前共享过的文件链接,发现Google Docs多人协作共享过的链接会一直存在,在实际操作中较不灵活.正好订阅的RSS推送了Pseric写的这篇文章 - Expire ...
- android模拟器genymotion安装virtualbox不能为虚拟电脑启动一个新任务
错误详情如下: Unable to load R3 module C:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastErro ...
- Sprint 2
成员 团队贡献分 许佳仪 22 柯晓君 23 卓宇靖 18 赖文亮 17 浏览书籍 查询书籍(可分别按照图书名和价格进行查询)