说明:本例是做了工厂的排机报表

一、根据查询日期初始化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(甘特图),动态增减列的更多相关文章

  1. GridView 显示行号 设置行号列的宽度

    /// <summary> /// GridView 显示行号 设置行号列的宽度 /// </summary> /// <param name="gv" ...

  2. gantt甘特图的制作过程

    甘特图主要是用来做项目管理的,可以清楚的看到任务间的逻辑关系,任务与时间关系和任务间并行关系. 在甘特图中,横轴方向表示时间,纵轴方向并列着活动列表.图表内可以用线条.数字.文字代号等来表示计划(实际 ...

  3. gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)

    前言   Excel功能强大,应用广泛.随着web应用的兴起和完善,用户的要求也越来越高.很多Excel的功能都搬到了sass里面.恨不得给他们做个Excel出来...程序员太难了... 去年我遇到了 ...

  4. Twproject Gantt开源甘特图功能扩展

    1.Twproject Gantt甘特图介绍 Twproject Gantt 是一款基于 jQuery 开发的甘特图组件,也可以创建其它图表,例如任务树(Task Trees).内置编辑.缩放和 CS ...

  5. 【转载】 JQuery.Gantt(甘特图) 开发指南

    转载来自: http://www.cnblogs.com/liusuqi/archive/2013/06/09/3129293.html JQuery.Gantt是一个开源的基于JQuery库的用于实 ...

  6. JQuery.Gantt(甘特图)开发

    一.简介 JQuery.Gantt是一个开源的基于JQuery库的用于实现甘特图效果的可扩展功能的JS组件库. 二.前端页面 2.1 资源引用 首先需要将下载到的源码中的CSS.IMG.JS等资源放入 ...

  7. odoo10甘特图gantt view

    odoo10中的gantt图示例 1.Gantt属性说明 甘特图视图的根元素是<gantt />,它没有子节点但可以采用以下属性: date_start (required) 提供每条记录 ...

  8. java实现甘特图的2种方法:SwiftGantt和Jfree (转)

    http://blog.sina.com.cn/s/blog_50a7c4a601009817.html 第一种方法使用SwiftGantt实现甘特图(进度图推荐这个)   import java.a ...

  9. jquery 甘特图开发指南

    JQuery.Gantt是一个开源的基于JQuery库的用于实现甘特图效果的可扩展功能的JS组件库. <link rel="stylesheet" href="cs ...

随机推荐

  1. 动态加载框架DL分析

    动态加载框架DL分析 插件化开发,主要解决三个问题1.动态加载未安装的apk,dex,jar等文件2.activity生命周期的问题,还有service3.Android的资源调用的问题 简单说一下怎 ...

  2. 蒙特卡洛马尔科夫链(MCMC)

    蒙特卡洛马尔科夫链(MCMC) 标签: 机器学习重要性采样MCMC蒙特卡洛 2016-12-30 20:34 3299人阅读 评论(0) 收藏 举报  分类: 数据挖掘与机器学习(41)  版权声明: ...

  3. pandas应用之分组因子暴露和分位数分析

    pandas应用之分组因子暴露和分位数分析 首先感谢原书作者Mes McKinney和batteryhp网友的博文, 俺在此基础上继续探索python的神奇功能. 用A股的实际数据, 以书里的代码为蓝 ...

  4. Java分别与MySQL、Oracle、SQL Server数据库建立连接

    1.与MySQL连接 jar包下载地址: Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动(MySQL的jar包) String u ...

  5. VMWARE里启动kylin16.0时出现'SMBus Host Controller not enabled'(还未进入系统)

    在Vmware里安装完Ubuntu16.10,启动时出现'SMBus Host Controller not enabled'错误提示,进不到图形界面.网上搜了一下,解决办法是在图形界面里进终端窗口, ...

  6. angular中动态添加的元素绑定事件问题

    $compile http://segmentfault.com/q/1010000000726448/a-1020000000727088 接口下载问题

  7. 7 -- Spring的基本用法 -- 4...

    7.4 使用 Spring 容器 Spring 有两个核心接口:BeanFactory 和 ApplicationContext,其中ApplicationContext 是 BeanFactory ...

  8. 【转】Expire Google Drive Files 让Google Docs云盘共享连接在指定时间后自动失效

    最近在清理Google Docs中之前共享过的文件链接,发现Google Docs多人协作共享过的链接会一直存在,在实际操作中较不灵活.正好订阅的RSS推送了Pseric写的这篇文章 - Expire ...

  9. android模拟器genymotion安装virtualbox不能为虚拟电脑启动一个新任务

    错误详情如下: Unable to load R3 module C:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastErro ...

  10. Sprint 2

    成员 团队贡献分 许佳仪 22 柯晓君 23 卓宇靖 18 赖文亮 17 浏览书籍 查询书籍(可分别按照图书名和价格进行查询)