1、第5章 模块4商品信息管理5.1 【任务10】商品信息查询5.2 【任务11】商品信息的添加、修改和删除【本章提要本章提要】商品的查看、添加、删除和修改操作是校园在线超市系统中的主要功能。本章通过介绍数据源控件SqlDataSource、数据绑定控件GridView、FormView和文件上传控件FileUpLoad的使用,结合DataSet和DataAdapter对象,详细介绍了商品信息管理各项功能的实现。【学习目标学习目标】掌握SqlDataSource控件。掌握GridView、FormView控件的使用。掌握文件上传控件FileUpLoad。掌握DataSet对象和DataAdapte
2、r对象的使用。任务描述任务描述任何用户在访问电子商务类的网站时,通常会对感兴趣的商品进行查找。因此在校园在线超市中,进行商品信息查询是非常必要的。查询时,应能根据商品名称、商品类型等信息进行查询。5.1 【任务任务10】商品信息查询商品信息查询 必备知识必备知识知识知识1 SqlDataSource控件控件1.SqlDataSource控件控件在ASP.NET2.0中,数据访问系统的核心是数据源控件。一个数据源控件代表数据(数据库、对象、XML、消息队列等)在系统内存中的映像,能够在Web页面上通过数据绑定控件展示出来。为了适应对不同数据源的访问,ASP.NET2.0提供了五个内置数据源控件:
3、SqlDataSource、AccessDataSource、ObjectDataSource、XmlDataSource和SiteMapDataSource。ASP.NET 2.0新的数据源控件提供了新的声明方式来处理数据,使用这些控件,只需很少的代码或无需任何代码就可从数据库中检索数据。本节以SqlDataSource控件为例,体验ASP.NET2.0强大的数据访问能力。SqlDataSource可用于任何具有关联ADO.NET提供程序的数据库,包括Microsoft SQL Server、OLE DB、ODBC和Oracle数据库。在配置时,SqlDataSource使用的SQL语法以及
4、是否可使用更高级的数据库功能均由所用的数据库决定。数据源控件对于所有数据库的操作都是相同的。下面通过一个实例演示SqlDataSource控件实现对数据库的数据访问。【例5-1】查询商品类型表T_WareType中商品类别的名称,并将查询结果置于下拉列表控件DropDownList1中。首先,新建名为Test.aspx的Web页,在设计视图下双击数据分类项中的SqlDataSource控件就会添加一个SqlDataSource到当前页面。鼠标单击SqlDataSouce时会出现一个小三角箭头(即“智能标记”按钮),如图5-1所示。图5-1 配置SqlDataSource数据源SqlDataSo
5、urce控件的HTML标签:单击配置数据源,出现如图5-2所示的页面。图5-2 创建数据库连接单击新建连接,弹出如图5-3所示的对话框,进行数据源的配置。默认情况下连接到SQL Server数据库,通过单击“更改”可对Access数据库文件、ODBC数据源、SQL Server数据库、SQL Server手机版数据库、SQL Server数据库文件、Oracle数据库文件等进行配置。图5-3 设置数据库连接在图5-3对话框中,设置服务器名及服务器登录方式,并选择要连接的数据库,如图5-3所示。值得注意的是,如果要连接的数据库服务器与开发者的机器在同一个局域网里,可以使用局域网IP地址或者局域网
6、中的电脑主机名;如果要连接的数据库服务器与开发者的机器不在同一个局域网内,那么就要求数据库服务器必须有一个公网IP;如果要连接的数据库服务器与开发者所使用的机器是同一台机器,则可以使用“(local)”、“.”或者“127.0.0.1”来标识。单击“测试连接”按钮,如果弹出连接成功的提示消息,就表示这个数据库连接是可用的。单击“确定”按钮,回到“配置数据源”界面,这时点击连接字符串旁边的“+”按钮就可以看到数据库的连接字符串信息,如图5-4所示。图5-4 选择数据库连接单击“下一步”按钮,出现如图5-5所示的页面,可以将连接字符串保存到应用程序配置文件(Web.Config)中,这样,原来多数
7、读者为之苦恼的连接字符串就轻松地创建好了。图5-5 保存数据连接字符串到Web.config接下来就要配置SQL语句了,读者可以根据两种方式从数据库中检索数据:一种是自定义SQL语句或存储过程;另一种是指定来自表或视图的列,如图5-6所示。图5-6 配置数据库查询这里,选择查询商品类别表T_WareType中的所有列,读者也可以根据需求,对数据进行筛选、排序等。单击“下一步”按钮,最后点击“完成”按钮。通过上述步骤,完成了对SqlDataSource数据源的配置。那么,怎样将配置好的数据源绑定到指定的数据控件呢?在页面中,添加一个DropDownList控件,单击该控件右边的“智能标记”按钮,
8、单击“选择数据源”,出现如图5-7所示的对话框。图5-7 选择数据源选择数据源为“SqlDataSource1”;选择要在DropDownList中显示的数据字段为“splb_TypeName(商品类别名称)”;为DropDownList的值选择数据字段为“splb_TypeID”,单击“确定”按钮。切换Test.aspx页至源视图,.NET生成的页面代码如下:asp:SqlDataSource ID=SqlDataSource1 runat=server ConnectionString=SelectCommand=SELECT*FROM T_WareType 从页面代码可以知道,SqlDa
9、taSource控件的两个重要属性如下:ConnectionString:设置为用于特定数据库的连接字符串。为使Web应用程序更易于维护,并且安全性更高,通常将连接字符串存储在应用程序配置文件的connectionStrings元素中,如上述代码所示。SelectCommand:指定该控件要执行的SQL查询。在浏览器中查看Test.aspx页面效果,如图5-8所示。图5-8 SqlDataSource数据源控件筛选数据从上例可以看出,通过SqlDataSource数据源控件,不用书写一行代码,就可完成对数据库中数据的检索,大大地提高了应用程序的开发效率。2数据绑定控件数据绑定控件像DropDo
10、wnList一样,可以配置数据源的控件,称为数据绑定控件。常用的数据绑定控件有DropDownList、ListBox、GridView、DataList、FormView、Repeater等。在ASP.NET 2.0中,所有的数据库绑定控件都是从BaseDataBoundControl这个抽象类派生的,它定义了几个重要属性和一个重要方法:DataSource属性:指定数据绑定控件的数据来源,显示的时候程序将会从这个数据源中获取数据并显示。DataSourceID属性:指定数据绑定控件的数据源控件的ID,显示的时候程序将会根据这个ID找到相应的数据源控件,并利用这个数据源控件中指定方法获取数据
11、并显示。DataBind()方法:当指定了数据绑定控件的DataSource属性或者DataSourceID属性之后,再调用DataBind()方法才会显示绑定的数据。在使用数据源时,会先尝试使用DataSourceID属性标识的数据源,只在没有设置DataSourceID时才会用到DataSource属性标识的数据源。也就是说,DataSource和DataSourceID两个属性不能同时使用。知识知识2 GridView控件控件1.GridView控件概述控件概述在使用ASP.NET开发Web应用程序的过程中,GridView是一个非常重要的控件,几乎任何与数据相关的显示都要用到该控件。所
12、以熟练掌握GridView控件的应用技巧是每个Web开发人员所必备的基本能力。GridView控件是ASP.NET1.1下DataGrid控件的替代品,它以表格的形式显示数据源的值,每列表示一个字段,每行表示一条记录。该控件提供了诸如内置排序功能、内置更新和删除功能、内置分页功能、内置行选择功能、以编程方式访问GridView对象模型、动态设置属性、处理事件等功能。同时,它还可以通过主题和样式自定义外观,实现多种样式的数据展示。表5-1列举了GridView控件的常见属性。本节我们将介绍GridView控件常用的应用技巧。表5-1 GridView控件常见属性2.格式化格式化GridView在
13、软件项目开发时,功能的实现固然重要,但界面的呈现风格也是不容忽视的,友好、和谐的界面风格能为软件增色不少。有两种方式可对GridView控件的样式进行调整。一种方式是通过“智能标记”下的“自动套用格式”菜单,这种方式简单、直观,可以直接在窗口上看到最终格式化的效果,如图5-9所示。设置步骤如下:添加SqlDataSource控件,并配置数据源。添加GridView控件,单击“智能标记”菜单,选择数据源为SqlDataSource1。单击自动套用格式对话框中的“选择方案”列表中合适的样式,可以通过“预览”部分查看所选择格式的效果。图5-9 设置GridView控件另一种方式是通过设置GridVi
14、ew控件不同部分的样式属性来自定义该控件的外观。这些样式包括一些基本的样式,如BackColor、BorderStyle等。3.自定义列自定义列如果需对Gridview控件中每一列自定义格式,则需单击“智能标记”中的“编辑列”,弹出如图5-10所示的对话框,这样就可以对每列进行详细的设置了。图5-10 GridView控件中自定义列表5-2 GridView控件中的列 绑定列:用于显示数据源中一列的信息。对于要显示的每个数据列,通常都对应于一个绑定列,需要显示几个字段,就加入几个绑定列。使用绑定列还可以设置相关属性。例如,列标头和列脚注的文本、字体、颜色、列宽、数据格式以及列是否为只读(当行编
15、辑模式时,它是否会显示可编辑控件)等。当字段数固定时可选用绑定列。添加绑定列界面如图5-11所示。图5-11 自定义列属性设置添加绑定列后,其HTML标签代码如下:复选框列:用于显示布尔型数据字段的值。由于复选框只能显示选定的或未选定的状态,因此,复选框列只能绑定到具有布尔型数据类型的字段。通过设置DataField属性完成列的绑定,还可通过设置Text属性为复选框添加标题。添加复选框列后,其列标签代码如下:超链接列:用于显示各行中的链接。超链接的文本可以指定,也可以从数据列中导出链接文本。同样,超链接的URL可以指定或者从数据源中获取。例如,当用GridView显示商品列表时,加超链接后,通
16、过传递主键参数,就可以在另外一个页面上显示商品的详细信息。其HTML标签代码如下:此超链接利用查询字符串将sp_WareID的值传递到Details.aspx页。图像列:可以为所显示的每个记录显示图像。只需将图像列绑定到包含图像URL的数据源中的字段上,这可通过设置DataImageUrlField 属性完成。可以通过使用DataImage UrlFormatString属性来设置URL值的格式。当添加图像列后,其对应的HTML标签代码如下:每个图像还可以具有与之相关联的备用文本,当无法加载图像或图像不可用时,将显示此文本。可以使用以下方法之一为所显示的图像指定备用文本:使用Alternate
17、Text 属性指定图像的备用文本。使用DataAlternateTextField 属性可将数据源中的字段绑定到每个图像的AlternateText属性。这可用于为每个显示的图像选择不同的备用文本。绑定数据时,还可以使用DataAlternateTextFormatString 属性格式化备用文本。按钮列:可以创建“编辑”、“更新”、“取消”和“删除”功能的按钮。当GridView处于编辑模式时,“编辑”按钮被替换为两个按钮:“更新”按钮和“取消”按钮。此功能适用于字段内容不长的数据维护。当添加按钮列后,其对应的HTML标签代码如下:模板列:在使用GridView显示数据时,对每列进行单独控制
18、。例如,在校园在线超市系统中,当显示商品列表时,除显示商品的基本信息外,还需显示商品所属的分类,而分类数据存放于另外一张数据表中,这时,希望通过TextBox控件来显示每个商品的分类信息。使用GridView的模板列可以很方便地实现自定义列。下面阐述图形界面对模板列进行设计的过程:新增模板列。选择GridView控件智能标签菜单的“编辑列”,系统显示如图5-10所示界面。在可用字段中,将出现TemplateField字段,单击“添加”按钮,在“选定的字段”列表中,将出现“TemplateField”字段,这时可在其对应的属性栏中设置相应的属性。对模板列进行编辑和设计。在设计视图中,选择Grid
19、View的智能标记菜单中的“编辑模板”项,在系统显示的“GridView”任务窗口中,选择新增的模板列,系统将显示如图5-12所示的界面。图5-12 GridView模板编辑表5-3 GridView控件中的模板类型根据不同的模板,可以在模板容器中选择不同的控件,然后进行数据绑定设置。下面的代码在ItemTemplate模板项中添加标签控件Label1,并将其绑定到商品类别的ID上:asp:Label ID=Label1 runat=server Text=上述代码中,Eval方法可将控件绑定到数据,当用户修改数据值时,可以用Bind方法进行数据绑定。下面讨论采用GridView控件显示两个数
20、据表信息的方法。【例5-2】使用GridView控件显示商品记录列表,并在GridView中添加一个模板列,用来显示商品类别的名称,如图5-13所示。图5-13 使用模板列在界面文件中绑定列和模板列的代码如下:asp:SqlDataSource ID=SqlDataSource1 runat=server ConnectionString=SelectCommand=SELECT sp_WareID,sp_WareName,sp_Price,splb_TypeID,sp_Checked FROM T_Ware需要注意的是,GridView中记录的每一行都有商品类别,这就要求通过商品类别编号(s
21、plb_TypeID)作为参数,以获取商品类别的名称,并赋给模板列中的Label1。这需要对GridView控件的RowDataBound事件编写代码,该事件是在数据绑定时触发的。代码如下:protected void GridView1_RowDataBound(object sender,GridViewRowEventArgs e)if(e.Row.RowType=DataControlRowType.DataRow)/获取每一行的商品类别的ID int typeID=Convert.ToInt32(DataBinder.Eval(e.Row.DataItem,splb_TypeID);
22、/获取某商品类别ID的名称 string str=TypeName(typeID);/在GridView的行中查找名为“Label1”的控件 Label lbl=(Label)e.Row.FindControl(Label1);lbl.Text=str;下面的TypeName方法用来读出指定商品类别编号(splb_TypeID)的商品所对应的商品名称:protected string TypeName(int typeID)string s=;string str=select splb_TypeName from T_WareType where splb_typeid=+typeID;Sq
23、lConnection string strconn=ConfigurationManager.ConnectionStringsSMDBConnStr.ConnectionString;conn=new SqlConnection(strconn);conn.Open();SqlCommand cmd=new SqlCommand(str,conn);SqlDataReader sdr=cmd.ExecuteReader();if(sdr.Read()s=sdrsplb_TypeName.ToString();conn.Close();return s;4.分页分页ASP.NET2.0中的G
24、ridView控件内置分页,可以使用默认分页用户界面和创建自定义的分页界面。使用GridView控件的界面方式可以很方便地实现分页。在VS2005中的设计视图中,单击GridView的“智能标记”菜单的“启用分页”项,就可以实现自动分页,如图5-14所示。图5-14 启用GridView控件分页也可以通过编程方式将GridView控件的AllowPaging属性设置为True,并通过PageSize属性来设置页的大小,还可通过设置PageIndex属性设置GridView控件的当前页。使用PagerSettings属性进行分页的UI设计,常用的模式如表5-4所示。表5-4 GridView控件
25、的分页模式界面方式设置控件的PagerSettings属性对应的HTML标签代码如下:用户也可以通过程序代码设置PagerSettings的Mode属性来自定义分页模式,如:GridView1.PagerSettings.Mode=PagerButtons.NextPrevious;GridView1.PagerSettings.NextPageText=下一页;GridView1.PagerSettings.PreviousPageText=上一页;5.排序排序像分页一样,可以像启用分页功能一样启用GridView控件的排序功能,也可以通过编程的方式将AllowSorting属性设置为tru
26、e来启用排序。启用排序功能后,GridView控件将LinkButton控件呈现在列标题中。同时,该控件还将每一列的SortExpression属性隐式设置为它所绑定的数据字段的名称。例如,例5-2中GridView显示的第一列为“商品编号”列,则该列的SortExpression属性将被自动设置为sp_WareID。当在浏览器中查看时,用户可以单击列标题中的LinkButton控件,使之按该列排序。任务实现任务实现步骤1 新建名为WareList.aspx的页面,并为该页面选择名为MasterPage.master的母版页。在Content项内添加所需控件,如图5-15所示;设置各控件相应的
27、属性,如表5-5所示。图5-15 商品信息查询界面设计表5-5 界面控件设置步骤2 为SqlDataSource1数据源控件配置链接字符串,代码如下:asp:SqlDataSource ID=SqlDataSource1 runat=server ConnectionString=步骤3 为页面装载事件Page_Load添加如下代码,将商品类别的名称绑定到ddlWare Type下拉列表控件,并设定grdWareList控件的数据源:protected void Page_Load(object sender,EventArgs e)if(!IsPostBack)string connstr=
28、ConfigurationManager.ConnectionStringsSMDBConnStr.ConnectionString;SqlConnection sqlConn=new SqlConnection(connstr);sqlConn.Open();string str=select splb_TypeName from T_WareType;SqlCommand cmd=new SqlCommand(str,sqlConn);SqlDataReader dr=cmd.ExecuteReader();while(dr.Read()ddlWareType.Items.Add(drsp
29、lb_TypeName.ToString();grdWareList.DataSourceID=SqlDataSource1;步骤4 为btnSelect按钮添加单击事件,实现查询指定的商品名称或商品类别的功能,查询得到的数据动态地绑定到grdWareList控件。由于界面设计中已将grdWareList控件与数据源SqlDataSource1控件绑定,因此要将查询结果绑定到grdWareList控件上,则先要将其绑定设置清空,再重新绑定。protected void btnSelect_Click(object sender,EventArgs e)string connstr=Config
30、urationManager.ConnectionStringsSMDBConnStr.ConnectionString;SqlConnection sqlConn=new SqlConnection(connstr);sqlConn.Open();string str=SELECT sp_WareName,sp_AllSum,sp_SellSum,sp_Price,sp_Information,splb_TypeName;str=str+FROM T_Ware a JOIN T_WareType b ON a.splb_TypeID=b.splb_TypeID where;str=str+b
31、.splb_TypeName=+ddlWareType.SelectedValue.ToString().Trim()+;if(txtWareName.Text!=)str=str+and a.sp_WareName like +%+txtWareName.Text.Trim()+%;/清除grdWareList控件的数据绑定 this.grdWareList.DataSourceID=null;/设置SqlDataSource1控件的查询字符串SqlDataSource1.SelectCommand=str;/重新绑定grdWareList控件的数据源 grdWareList.DataSou
32、rceID=SqlDataSource1;步骤5 浏览“WareList.aspx”页面,查看其运行效果。任务描述任务描述校园在线超市作为信息交易平台,每一位注册会员都可以发布商品信息,并能对所发布的商品进行管理,因此,要求为会员提供商品添加、删除、修改等功能,并将相应信息保存到数据库中。5.2 【任务任务11】商品信息的添加、商品信息的添加、修改和删除修改和删除 必备知识必备知识知识知识1 DataSet对象和对象和DataAdapter对象对象1.DataSet对象对象DataSet对象即数据集对象。.NET的数据提供程序提供数据源和DataSet之间的连接,由于DataSet不依赖于数据
33、源,因此这种数据访问模式也称为断开连接模式。在ADO.NET中,DataSet用于在断开式连接环境中存储从数据源中收集的数据。DataSet对象是数据的一种内存驻留表示形式,无论包含的数据来自什么数据源,它都会提供一致的关系编程模型。DataSet对象把数据存储在一个或多个DataTable中。每个DataTable可由来自惟一数据源中的数据组成。DataSet具备存储多个表数据以及表间关系的能力,而每一个DataTable又包含了DataRow和DataColumn,分别存放表中行和列的数据信息,因此对数据集的操作主要是对DataSet包含的表中的行或列的操作,与直接对数据库的操作一致。此外
34、,DataSet对象中数据完全采用XML格式,因此,XML文档可以导入DataSet对象,而DataSet对象中的数据也可以导出为XML文档。也就是说,DataSet对象和XML文档是可以互换的,这样就使得跨平台的数据访问成为可能,也使得DataSet对象可以作为Web服务或者是其他类型远程调用的返回值。图5-16所示给出了与DataSet类相关的主要类及它们间的关系。图5-16 与DataSet类相关联的主要类2.DataAdapter对象对象DataAdapter对象是DataSet和ADO.NET对象模型中断开式连接对象之间的桥梁。该对象使用Connection对象与数据库连接,然后使用
35、Command和DataReader对象来获取数据和处理数据库的变化。DataAdapter对象有很多属性,这些属性是包含SQL语句的SqlCommand和OleDbCommand对象。DataAdapter对象有如下四个Command-type属性:SelectCommand:这个属性发布一个SQL Select语句。UpdateCommand:这个属性发布一个SQL Update语句。InsertCommand:这个属性发布一个SQL Insert语句。DeleteCommand:这个属性发布一个SQL Delete语句。如果数据来自于单一的表,则可以使用CommandBuilder对象自
36、动生成DataAdapter的UpdateCommand、InsertCommand和DeleteCommand属性,使用此对象可以节省开发时间。另外,DataAdapter对象的Fill方法用于填充数据集,而Update方法用于更新数据库。3.填充数据集填充数据集填充DataSet时,DataAdapter将查询的结果存储在DataSet的DataTable对象中,当执行这一过程时,DataAdapter使用一个SelectCommand来与数据库通信,并在内部使用DataReader来获取查询结果,最后才将结果复制到DataSet中的表中,这就是数据填充的过程。具体操作时,只要调用其Fil
37、l方法即可。从上述可知,DataAdapter填充DataSet的过程主要分为两个步骤:通过DataAdapter的SelectCommand属性从数据库中检索出所需数据。调用DataAdapter的Fill方法把检索出的数据填充到DataSet中。填充数据集代码如下:string connstr=ConfigurationManager.ConnectionStringsSMDBConnStr.ConnectionString;SqlConnection sqlConn=new SqlConnection(connstr);sqlConn.Open();string str=SELECT*F
38、ROM T_WareTypeSqlDataAdapter da=new SqlDataAdapter(str,sqlConn);DataSet ds=new DataSet();da.Fill(ds,splb);这时,DataSet中的表可以直接作为数据控件的数据源,只需设置数据源控件的DataSource属性,再调用DataBind方法就可以将控件与数据联系起来。例如,将商品信息用上节讲到的GridView控件关联起来,实现的代码如下:GridView1.DataSource=ds.Tablessplb.DefaultView;GridView1.DataBind();4.使用使用DataS
39、et对数据源中的记录进行编辑对数据源中的记录进行编辑利用DataSet对数据源中的记录进行编辑的主要步骤是:将数据源中的有关内容写入内存数据库;更改内存数据库中的内容;更改完成后,调用DataAdapter对象的Update方法,并根据DataSet内的数据更新情况,分别应用于InsertCommand、UpdateCommadn、DeleteCommand属性的Command命令,以将数据写回数据库。怎样设置用于更新数据源的SQL语句及参数呢?我们可以使用CommandBuilder对象,系统可根据内存数据表自建立以来的变化情况,自动生成UpdateCommand、DeleteCommand
40、和InsertCommand属性,并提供相应的单一命令的方法,它会自动协调DataSet,通过DataAdapter对象对后台数据库更新。只需添加如下代码行:SqlCommandBuilder scmd=new SqlCommandBuilder(da);1)添加记录添加新记录需要创建数据表中的新行,再使用添加行的方法。DataTable dt=ds.Tablessplb;DataRow row=dt.NewRow();rowsplb_TypeName=TextBox1.Text;dt.Rows.Add(row);da.Update(ds,splb);2)更新记录更新记录前首先应取得更新行。在
41、创建DataRow对象的实例时,与添加新记录是不一样的。string str=SELECT*FROM T_WareType where splb_TypeID=+spID;DataTable dt=ds.Tablessplb;DataRow row=dt.Rows0;rowsplb_TypeName=TextBox1.Text;da.Update(ds,splb);3)删除记录删除记录同样要先获取删除行的记录,再调用行的Delete方法。string str=SELECT*FROM T_WareType where splb_TypeID=+spID;DataTable dt=ds.Table
42、ssplb;DataRow row=dt.Rows0;row.Delete();da.Update(ds,splb);从上面可知,使用DataSet和CommandBuilder对象对数据库操作的代码非常简洁,只需通过row字段名即可读取或设置字段值,没有了冗长的SQL语句和复杂的标点符号。要注意的事,不论是更新、删除还是添加操作,最后都必须调用Update方法,否则,DataSet中更新的数据不会写回数据库中。此外,使用CommandBuilder对象时,被更新的表中要有主键,否则会出现“对于不返回任何键列信息的SelectCommand不支持UpdateCommand的动态SQL生成”的错
43、误信息。知识知识2 FileUpLoad控件和控件和FormView控件控件1.FileUpLoad控件控件FileUpLoad控件是ASP.NET 2.0新增控件,该控件使用户更容易地浏览和选择用于上传的文件。它包含一个浏览按钮和用于输入文件名的文本框,用户可以在文本框中输入完整的文件路径,或者通过按钮浏览并选择需要上传的文件。其HTML标签代码如下:除从WebControl类继承的标准成员外,FileUpload控件还公开了几个只读的属性,如表5-6所示。表5-6 FileUpload控件的属性其中HttpPostedFile类的属性如表5-7所示。表5-7 HttpPostedFile类
44、的属性FileUpload控件不会自动上传文件,必须设置相关的事件处理程序,并在程序中实现文件上传。FileUpload控件的SaveAs方法用于将上传的文件保存到服务器上。一般来说,使用FileUpload控件上传文件一般有如下几个步骤:利用HasFile属性判断是否上传了文件。在服务器上指定一个物理路径,并检查这个物理路径是否存在,如果不存在则先创建。指定上传文件在服务器上的上传路径,利用SaveAs()保存上传的文件。这一步还可以做一些其他检查工作,如检查上传的文件格式是否符合要求或文件内容大小是否符合要求。将相对路径或者URL地址保存起来,以便客户访问或者下载。【例5-3】FileUp
45、Load控件的使用。在校园在线超市系统中,商品发布时都要上传商品所对应的图片。本例实现的功能是通过FileUpLoad控件实现商品图片的上传,通过点击上传按钮将指定的图片保存在应用程序的images目录下,并在页面中显示上传的图片及相关信息,如图5-17所示。图5-17 FileUpLoad的使用实现代码如下:protected void UpLoad_Click(object sender,EventArgs e)bool fileValid=false;/设置标签和图像显示控件的可见性 Label1.Visible=true;Image1.Visible=true;if(this.File
46、Upload1.HasFile)/获取指定路径字符串的扩展名 String fileExtension=Path.GetExtension(this.FileUpload1.FileName).ToLower();/设置上传文件的类型 String allowExtension=.gif,.jpg,.bmp,.png;for(int i=0;i allowExtension.Length;i+)if(fileExtension=allowExtensioni)fileValid=true;if(fileValid=true)try /将上传的文件保存到指定的路径下 this.FileUploa
47、d1.SaveAs(Server.MapPath(/Images/)+FileUpload1.FileName);this.Image1.ImageUrl=/Images/+FileUpload1.FileName;this.Label1.Text=上传文件成功;this.Label1.Text+=;/获取上传文件的相关信息 this.Label1.Text+=+原文件路径:+this.FileUpload1.PostedFile.FileName;this.Label1.Text+=;this.Label1.Text+=+文件大小:+this.FileUpload1.PostedFile.C
48、ontentLength+字节;this.Label1.Text+=;this.Label1.Text+=+文件类型:+this.FileUpload1.PostedFile.ContentType;catch this.Label1.Text=文件上传不成功;else this.Label1.Text=请上传后缀为.gif,.jpg,.bmp,.png的文件;2.FormView控件控件可以使用FormView 控件访问和操作数据源的单个记录,通常用于对记录更新和插入。FormView控件不指定用于显示记录的预定义布局。实际上,可以创建一个包含控件的模板,以显示记录中的各个字段。该模板包含用
49、于创建窗体的格式、控件和绑定表达式。FormView控件的用法和GridView控件的用法非常类似,它支持的模板类型有EditItemTemplate、EmptyDataTemplate、FooterTemplate、HeaderTemplate、ItemTemplate、InsertItemTemplate和PagerTemplate。应注意,这里没有AlternatingItemTemplate模板(一条记录自然就不会有什么奇偶行效果了)。FormView 控件支持以下功能:绑定到数据源控件,如 SqlDataSource 和 ObjectDataSource。内置插入功能。内置更新和删除
50、功能。内置分页功能。动态设置属性、事件处理等。可通过用户定义的模板、主题和样式自定义外观。FormView 控件一次只能显示一条数据,但是如果绑定的数据源有多条记录,则默认显示第一条记录;支持像GridView那样分页显示数据源中的每条记录。sp_WareID:asp:Label ID=sp_WareIDLabel1 runat=server Text=sp_Information:asp:TextBox ID=sp_InformationTextBox runat=server Text=sp_Time:asp:TextBox ID=sp_TimeTextBox runat=server T