ASP.NET实际项目演练(2)

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

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

 

在网上我们可以找到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:员工号

 

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

对应的表结构如下:

CREATE TABLE [dbo].[BoltData](

    [id] [int] IDENTITY(1,1) NOT NULL,

    [vin] [varchar](100) NULL,

    [dataid] [float] NULL,

    [torque] [float] NULL,

    [angle] [float] NULL,

    [ok] [float] NULL,

    [gettingtime] [datetime] NULL,

    [logintime] [datetime] NULL,

    [workerid] [varchar](16) NULL,

 CONSTRAINT [PK_BoltData] PRIMARY KEY CLUSTERED

(

    [id] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

 

 

CREATE TABLE [dbo].[BoltInfo](

    [id] [int] IDENTITY(1,1) NOT NULL,

    [boltid] [varchar](50) NULL,

    [boltname] [varchar](50) NULL,

    [asmid] [float] NULL,

    [boltnum] [int] NULL,

    [a_stand] [int] NULL,

    [a_max] [int] NULL,

    [a_min] [int] NULL,

    [t_stand] [int] NULL,

    [t_max] [int] NULL,

    [t_min] [int] NULL,

    [qrkstation] [varchar](50) NULL,

    [techpara] [varchar](50) NULL,

 CONSTRAINT [PK_BoltInfo] PRIMARY KEY CLUSTERED

(

    [id] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

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

代码
if (File_Name.Length != 0 && File_Size > 0)
        {
            
string File_ExName = File_Name.Substring(File_Name.LastIndexOf("."+ 1);//扩展名
            if (File_ExName != "xls")
            {
                
return;
            }
            
else
            {
                
//上传EXCEL文件到ExcelFile目录
                DateTime now = DateTime.Now;
                
string NewName = now.ToShortDateString() + now.Hour.ToString() + now.Minute.ToString() + now.Second.ToString() + "." + File_ExName;
                
string filePath = "ExcelFile/" + NewName;
                
this.flpImportPath.PostedFile.SaveAs(Server.MapPath(@filePath));
                
//获取EXCEL文件,执行导入
                string excelConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(filePath) + ";Extended Properties=Excel 8.0";
                
string excelCmdstr = string.Format("select * from [BoltData$]");

                
string Error = "";

                
try
                {
                    OleDbConnection oleDbConnection 
= new OleDbConnection(excelConnect);
                    oleDbConnection.Open();

                    OleDbCommand excelCmd 
= new OleDbCommand(excelCmdstr, oleDbConnection);
                    OleDbDataAdapter excelDa 
= new OleDbDataAdapter(excelCmd);

                    DataTable edt 
= new DataTable();
                    excelDa.Fill(edt);
                    
int i = 0;
                    
//追加导入
                    BLL.BoltData b = new BLL.BoltData();
                    
foreach (DataRow dr in edt.Rows)
                    {
                        Model.BoltData model 
= new Model.BoltData();
                        
try
                        {
                            model.vin 
= dr[0].ToString();
                            model.dataid 
= Convert.ToInt32(dr[1]);
                            model.torque 
= dr[2].ToString();
                            model.angle 
= dr[3].ToString();
                            model.ok 
= Convert.ToInt16(dr[4]);
                            model.gettingtime 
= Convert.ToDateTime(dr[5]);
                            model.logintie 
= Convert.ToDateTime(dr[6]);
                            model.workerid 
= dr[7].ToString();

                            b.Add(model);
                        }
                        
catch (Exception e1)
                        {
                            Response.Write(
"失败:" + model.vin + "_" + model.dataid + "");
                        }
                    }
                    
this.labIsUpload.Text = "操作完成!";
                    
//删除临时的EXCEL文件
                    oleDbConnection.Close();
                }
                
catch (Exception ex)
                {
                    Response.Write(
"<BR>");
                    Response.Write(ex.Message);
                }
                
//导入结束
            }
        }
        
else
        {
            
return;
        }

 

 在看具体的需求之前,我们先来看看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:由于时间原因,文章写的比较匆忙,望见谅。

 

 附件:

MsChart官方Demo、 MsChartBolt数据程序下载(DB文件在db文件下)

 

 

posted @ 2010-09-17 23:40  Alexis  阅读(2251)  评论(1编辑  收藏  举报