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

一、根据查询日期初始化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. vs visual studio 让外网访问设置

    vs2015 提供外网访问我是这么解决的 有时我们经常会用到连接外网的方式来调试自己写的莫名bug.而我们通常有两种解决方式 一.捕捉错误日志进行代码分析. 二.则是将我们的源码项目提供外网访问进行直 ...

  2. Knockout 官网翻译

    Knockout 新版应用开发教程之创建view models与监控属性 章节导航 最近抽出点时间研究MVVM,包括司徒正美的avalon,google的angular,以及Knockout,博客园T ...

  3. iOS中iconfont(图标字体)的基本使用

    前言 近日在做项目时,项目组有提出iconfont的技术,便开始查询相关资料.iconfont技术的主要目的是为减少应用体积而生.首先icon代表图标 font代表字体.此技术便是将图标转化为字体,从 ...

  4. Map拷贝 关于对象深拷贝 浅拷贝的问题

    问题:map拷贝时发现数据会变化. 高能预警,你看到的下面的栗子是不正确的,后面有正确的一种办法,如果需要看的话的,请看到底,感谢各同学的提醒,已做更正,一定要看到最后      先看例子:     ...

  5. 【java基础】面向对象的三大特征---多态

    java的引用变量有两种类型,编译时类型和运行时类型,如果编译时类型和运行时类型不一致,就会出现多态. 多态分为: 运行时多态 java运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称 ...

  6. openssl evp 对称加密(AES_ecb,ccb)

    openssl evp 对称加密(AES_ecb,ccb) evp.h 封装了openssl常用密码学工具,以下主要说对称加密的接口 1. 如下使用 aes_256_ecb 模式的加密解密测试代码 u ...

  7. tcpdump捕捉样例

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  8. Python之路 day2 字符编码及转换

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa import sys print("sys default encodin ...

  9. Hexo+Github 高逼格个人博客搭建指南(准备篇)

    git 下载并安装git 进入git下载页面,下载合适的版本,并安装.一路 Next ,到了 Select Components 界面,勾选 Git Bash Here 和 Git GUI Here. ...

  10. Linux下配置IP及安装vmware tool

    =======================CentOS 7以下======================= 配置IP: 1.获得mac地址 2.编辑ifcfg-eth0文件:vi /etc/sy ...