使用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 ...
随机推荐
- Linux解读
Linux中权限(r.w.x)对于目录与文件的意义 一.权限对于目录的意义 1.首先要明白的是目录主要的内容是记录文件名列表和子目录列表,而不是实际存放数据的地方. 2.r权限:拥有此权限表示可以读取 ...
- Scrum Meeting 11-20151217
任务安排 姓名 今日任务 明日任务 困难 董元财 网络连接框架优化 请假(数据库) 无 胡亚坤 优化商品搜索界面 请假(数据库) 无 刘猛 请假(参加编译测试) 无 马汉虎 请假(参加编译测试) 无 ...
- TC250专场
SRM 623 DIV2 1000pt 题意:给出一个最多50*50的矩阵,每个单元可能为'.'.'P'.'A','.'代表空地,你每次操作可以把一个P或者A拿到空地上,求一个最大的含有相同字符的矩形 ...
- Android TabHost使用
TabHost是Android中自带的选项卡控件,效果图如下: 主布局文件 <RelativeLayout xmlns:android="http://schemas.android. ...
- DIV未知宽度高度垂直水平居中
使用过一种算是相对来说比较好理解一些的吧算是,代码如下: <style> width:800px; height:400px; margin:0 auto; position:absolu ...
- git clone --early EOF
出现这个问题可能需要重新检查以下方面: 1. Android studio Git 的安装地址: ..../Git/cmd/git.exe 记得在环境变量 --Path 中进行配置: ,..../G ...
- Loading加载小插件,用户可以选择html格式或canvas格式,自定义loading图片,canvas色彩搭配可根据个人喜好
;(function($) { $.Loading = function(options) { //暴漏插件默认值 $.Loading.defaults = { speed: 200, //弹出层淡出 ...
- Eclipse通过jdbc连接oracle数据库
首先要有包 然后,在项目中加载进去- 最后就是代码了 import java.sql.*;public class GetConn {public Connection getConnection() ...
- Linux下怎么删除非空目录
rm -rf 目录名 解释: 1.r意思是删除目录,f意思是force的缩写,强制删除,不提示. 2.如果目录为空,可以用 "rmdir 目录名"删除. 3.如果目录不为空,可以用 ...
- java实现的类和表持久化
//映射的过程: package com.ly.orm; import java.lang.reflect.Field; import java.util.ArrayList; import java ...