上篇文章中大概的实现了第一个需求,虽然没有正式的效果出来,但总归思路是这样的,具体实现代码后面会提供。

今天我们主要实现需求分析的第二点和第三点:导入数据模块及修改数据

在网上我们可以找到ASP.NET 导入Excel表现在代码,只要拿过来用就可以了,在做导入功能之前,我们有必要了解导入的数据的结果是什么样的,因为我们导入的数据最后是存入数据库的,所以我们需要构建表的结果以对应导入的数据。

下面是数据的截图

下面就表中的一些字段进行说明:

Boltid是设备的标识

Boltname:是设备的类型

Asmid:也是一个标示

Boltnum:设备数量

A_stand:角度标准值

A_max:角度最大值

A_min:角度最小值

T_stand扭矩标准值

T_max扭矩最大值

T_min扭矩最小值

Qrkstatic:某个静态数据

Techpara:设备参数

VIN:设备号

Dataid:设备标识

Torque:扭矩

Angle:角度

Ok:是否可用

Gettingtime:生产时间

Logintime:登录时间

Workerid:员工号

于是我们就可以设计表的结构了,

对应的表结构如下:

 
 
  1. CREATE TABLE [dbo].[BoltData](  
  2.  
  3.     [id] [int] IDENTITY(1,1) NOT NULL,  
  4.  
  5.     [vin] [varchar](100) NULL,  
  6.  
  7.     [dataid] [float] NULL,  
  8.  
  9.     [torque] [float] NULL,  
  10.  
  11.     [angle] [float] NULL,  
  12.  
  13.     [ok] [float] NULL,  
  14.  
  15.     [gettingtime] [datetime] NULL,  
  16.  
  17.     [logintime] [datetime] NULL,  
  18.  
  19.     [workerid] [varchar](16) NULL,  
  20.  
  21.  CONSTRAINT [PK_BoltData] PRIMARY KEY CLUSTERED   
  22.  
  23. (  
  24.  
  25.     [id] ASC  
  26.  
  27. )WITH (PAD_INDEX  = OFFSTATISTICS_NORECOMPUTE  = OFFIGNORE_DUP_KEY = OFFALLOW_ROW_LOCKS  = ONALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]  
  28.  
  29. ) ON [PRIMARY] 

 

 

 
  1. CREATE TABLE [dbo].[BoltInfo](  
  2.  
  3.     [id] [int] IDENTITY(1,1) NOT NULL,  
  4.  
  5.     [boltid] [varchar](50) NULL,  
  6.  
  7.     [boltname] [varchar](50) NULL,  
  8.  
  9.     [asmid] [float] NULL,  
  10.  
  11.     [boltnum] [int] NULL,  
  12.  
  13.     [a_stand] [int] NULL,  
  14.  
  15.     [a_max] [int] NULL,  
  16.  
  17.     [a_min] [int] NULL,  
  18.  
  19.     [t_stand] [int] NULL,  
  20.  
  21.     [t_max] [int] NULL,  
  22.  
  23.     [t_min] [int] NULL,  
  24.  
  25.     [qrkstation] [varchar](50) NULL,  
  26.  
  27.     [techpara] [varchar](50) NULL,  
  28.  
  29.  CONSTRAINT [PK_BoltInfo] PRIMARY KEY CLUSTERED   
  30.  
  31. (  
  32.  
  33.     [id] ASC  
  34.  
  35. )WITH (PAD_INDEX  = OFFSTATISTICS_NORECOMPUTE  = OFFIGNORE_DUP_KEY = OFFALLOW_ROW_LOCKS  = ONALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]  
  36.  
  37. ) ON [PRIMARY] 

 

下面来看一下具体的导入程序及实现方法,详细的就不说了,就看主要的代码了。

 
  1. if (File_Name.Length != 0 && File_Size > 0)  
  2.         {  
  3.             string File_ExName = File_Name.Substring(File_Name.LastIndexOf(".") + 1);//扩展名  
  4.             if (File_ExName != "xls")  
  5.             {  
  6.                 return;  
  7.             }  
  8.             else  
  9.             {  
  10.                 //上传EXCEL文件到ExcelFile目录  
  11.                 DateTime now = DateTime.Now;  
  12.                 string NewName = now.ToShortDateString() + now.Hour.ToString() + now.Minute.ToString() + now.Second.ToString() + "." + File_ExName;  
  13.                 string filePath = "ExcelFile/" + NewName;  
  14.                 this.flpImportPath.PostedFile.SaveAs(Server.MapPath(@filePath));  
  15.                 //获取EXCEL文件,执行导入  
  16.                 string excelConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(filePath) + ";Extended Properties=Excel 8.0";  
  17.                 string excelCmdstr = string.Format("select * from [BoltData$]");  
  18.  
  19.                 string Error = "";  
  20.  
  21.                 try  
  22.                 {  
  23.                     OleDbConnection oleDbConnection = new OleDbConnection(excelConnect);  
  24.                     oleDbConnection.Open();  
  25.  
  26.                     OleDbCommand excelCmd = new OleDbCommand(excelCmdstr, oleDbConnection);  
  27.                     OleDbDataAdapter excelDa = new OleDbDataAdapter(excelCmd);  
  28.  
  29.                     DataTable edt = new DataTable();  
  30.                     excelDa.Fill(edt);  
  31.                     int i = 0;  
  32.                     //追加导入  
  33.                     BLL.BoltData b = new BLL.BoltData();  
  34.                     foreach (DataRow dr in edt.Rows)  
  35.                     {  
  36.                         Model.BoltData model = new Model.BoltData();  
  37.                         try  
  38.                         {  
  39.                             model.vin = dr[0].ToString();  
  40.                             model.dataid = Convert.ToInt32(dr[1]);  
  41.                             model.torque = dr[2].ToString();  
  42.                             model.angle = dr[3].ToString();  
  43.                             model.ok = Convert.ToInt16(dr[4]);  
  44.                             model.gettingtime = Convert.ToDateTime(dr[5]);  
  45.                             model.logintie = Convert.ToDateTime(dr[6]);  
  46.                             model.workerid = dr[7].ToString();  
  47.  
  48.                             b.Add(model);  
  49.                         }  
  50.                         catch (Exception e1)  
  51.                         {  
  52.                             Response.Write("失败:" + model.vin + "_" + model.dataid + "");  
  53.                         }  
  54.                     }  
  55.                     this.labIsUpload.Text = "操作完成!";  
  56.                     //删除临时的EXCEL文件  
  57.                     oleDbConnection.Close();  
  58.                 }  
  59.                 catch (Exception ex)  
  60.                 {  
  61.                     Response.Write("<BR>");  
  62.                     Response.Write(ex.Message);  
  63.                 }  
  64.                 //导入结束  
  65.             }  
  66.         }  
  67.         else  
  68.         {  
  69.             return;  
  70.         }  

在看具体的需求之前,我们先来看看MSChart的一些知识准备。

 

一、 MSChart

1.什么是MSChart:MSChart控件与一个数据网格(DataGrid对象)关联。该数据网格存放了要显示的数据。数据网格也可以包含用于图表中标识系列或类别的标签。图表应用程序设

计者在数据网格中插入数据或从报表或矩阵中输入数据。

2.安装MSChart:须装了Microsoft .NET Framework 3.5 SP1以后才能装MSChart

装好后,会发现一个目录,打开vs2008或vs2010,打开某个web页面的设计页面,在工具栏中添加选项卡命名为图标工作,或者在现有的选项卡中右击选择“添加项”,导航到C:\Program Files\Microsoft Chart Controls\Assemblies,选择System.Web.DataVisualization.dll,将图标工具添加到选项卡中,方便以后拖拽使用。

1. MSChart 图表类型

4.一些属性

ChartAreas:增加多个绘图区域,每个绘图区域包含独立的图表组、数据源,用于多个图表类型在一个绘图区不兼容时。

AlignmentOrientation:图表区对齐方向,定义两个绘图区域间的对齐方式。

AlignmentStyle:图表区对齐类型,定义图表间用以对其的元素。

AlignWithChartArea:参照对齐的绘图区名称。

InnerPlotPosition:图表在绘图区内的位置属性。

Auto:是否自动对齐。

Height:图表在绘图区内的高度(百分比,取值在0-100)

Width:图表在绘图区内的宽度(百分比,取值在0-100)

X,Y:图表在绘图区内左上角坐标

Position:绘图区位置属性,同InnerPlotPosition。

Name:绘图区名称。

Axis:坐标轴集合

Title:坐标轴标题

TitleAlignment:坐标轴标题对齐方式

Interval:轴刻度间隔大小

IntervalOffset:轴刻度偏移量大小

MinorGrid:次要辅助线

MinorTickMark:次要刻度线

MajorGrid:主要辅助线

MajorTickMark:主要刻度线

DataSourceID:MSChart的数据源。

Legends:图例说明。

Palette:图表外观定义。

Series:最重要的属性,图表集合,就是最终看到的饼图、柱状图、线图、点图等构成的合;可以将多种相互兼容的类型放在一个绘图区域内,形成复合图。

IsValueShownAsLabel:是否显示数据点标签,如果为true,在图表中显示每一个数据值

Label:数据点标签文本

LabelFormat:数据点标签文本格式

LabelAngle:标签字体角度

Name:图表名称

Points:数据点集合

XValueType:横坐标轴类型

YValueType:纵坐标轴类型

XValueMember:横坐标绑定的数据源(如果数据源为Table,则填写横坐标要显示的字段名称)

YValueMembers:纵坐标绑定的数据源(如果数据源为Table,则填写纵坐标要显示的字段名称,纵坐标可以有两个)

ChartArea:图表所属的绘图区域名称

ChartType:图表类型(柱形、饼形、线形、点形等)

Legend:图表使用的图例名称

Titles:标题集合。

width:MSChart的宽度。

height:MSChart的高度。

二、 MSChart实际演练

具体的实例可以参考附件的具体Demo,这个Demo还是比较完整的。

好了,现在来看具体的需求。如下图是具体的算法,

 

 

这个是关键的sql语句,如有不明白的地方可以留言或者发邮件给我

string cmdText = "select CONVERT(varchar(12), a.gettingtime, 111) as 'myTime'," +

                "a.dataid,(4*(b.t_max-b.t_min)-ABS(2*AVG(a.torque)-(b.t_max+b.t_min)))/(24*STDEV(a.torque)) as 'cpk' " +

                "from boltdata a,BoltInfo b where a.dataid = b.boltid and a.dataid='" + dataid + "' and a.ok='1' and a.gettingtime BETWEEN '" + time1.Text + "' AND '" + time2.Text + "' " +

                "group by CONVERT(varchar(12), a.gettingtime, 111), a.dataid,b.t_max,b.t_min,b.t_stand"; 

PS:由于时间原因,文章写的比较匆忙,望见谅。

附件:

 、、

(另附链接)