《ASP NET程序设计案例教程》课件第5章_第1页
《ASP NET程序设计案例教程》课件第5章_第2页
《ASP NET程序设计案例教程》课件第5章_第3页
《ASP NET程序设计案例教程》课件第5章_第4页
《ASP NET程序设计案例教程》课件第5章_第5页
已阅读5页,还剩180页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章模块4 ——

商品信息管理5.1【任务10】商品信息查询5.2【任务11】商品信息的添加、修改和删除

【本章提要】

商品的查看、添加、删除和修改操作是校园在线超市系统中的主要功能。本章通过介绍数据源控件SqlDataSource、数据绑定控件GridView、FormView和文件上传控件FileUpLoad的使用,结合DataSet和DataAdapter对象,详细介绍了商品信息管理各项功能的实现。

【学习目标】

·掌握SqlDataSource控件。

·掌握GridView、FormView控件的使用。

·掌握文件上传控件FileUpLoad。

·掌握DataSet对象和DataAdapter对象的使用。

任务描述

任何用户在访问电子商务类的网站时,通常会对感兴趣的商品进行查找。因此在校园在线超市中,进行商品信息查询是非常必要的。查询时,应能根据商品名称、商品类型等信息进行查询。5.1【任务10】商品信息查询

必备知识

知识1SqlDataSource控件

1.SqlDataSource控件

在ASP.NET2.0中,数据访问系统的核心是数据源控件。一个数据源控件代表数据(数据库、对象、XML、消息队列等)在系统内存中的映像,能够在Web页面上通过数据绑定控件展示出来。为了适应对不同数据源的访问,ASP.NET2.0提供了五个内置数据源控件:SqlDataSource、AccessDataSource、ObjectDataSource、XmlDataSource和SiteMapDataSource。ASP.NET2.0新的数据源控件提供了新的声明方式来处理数据,使用这些控件,只需很少的代码或无需任何代码就可从数据库中检索数据。本节以SqlDataSource控件为例,体验ASP.NET2.0强大的数据访问能力。

SqlDataSource可用于任何具有关联ADO.NET提供程序的数据库,包括MicrosoftSQLServer、OLEDB、ODBC和Oracle数据库。在配置时,SqlDataSource使用的SQL语法以及是否可使用更高级的数据库功能均由所用的数据库决定。数据源控件对于所有数据库的操作都是相同的。

下面通过一个实例演示SqlDataSource控件实现对数据库的数据访问。

【例5-1】查询商品类型表T_WareType中商品类别的名称,并将查询结果置于下拉列表控件DropDownList1中。

首先,新建名为Test.aspx的Web页,在设计视图下双击数据分类项中的SqlDataSource控件就会添加一个SqlDataSource到当前页面。鼠标单击SqlDataSouce时会出现一个小三角箭头(即“智能标记”按钮),如图5-1所示。

图5-1配置SqlDataSource数据源

SqlDataSource控件的HTML标签:

<asp:SqlDataSourceID="SqlDataSource1"runat="server">

</asp:SqlDataSource>

单击配置数据源,出现如图5-2所示的页面。

图5-2创建数据库连接单击新建连接,弹出如图5-3所示的对话框,进行数据源的配置。默认情况下连接到SQLServer数据库,通过单击“更改”可对Access数据库文件、ODBC数据源、SQLServer数据库、SQLServer手机版数据库、SQLServer数据库文件、Oracle数据库文件等进行配置。

图5-3设置数据库连接在图5-3对话框中,设置服务器名及服务器登录方式,并选择要连接的数据库,如图5-3所示。

值得注意的是,如果要连接的数据库服务器与开发者的机器在同一个局域网里,可以使用局域网IP地址或者局域网中的电脑主机名;如果要连接的数据库服务器与开发者的机器不在同一个局域网内,那么就要求数据库服务器必须有一个公网IP;如果要连接的数据库服务器与开发者所使用的机器是同一台机器,则可以使用“(local)”、“.”或者“”来标识。单击“测试连接”按钮,如果弹出连接成功的提示消息,就表示这个数据库连接是可用的。单击“确定”按钮,回到“配置数据源”界面,这时点击连接字符串旁边的“+”按钮就可以看到数据库的连接字符串信息,如图5-4所示。

图5-4选择数据库连接单击“下一步”按钮,出现如图5-5所示的页面,可以将连接字符串保存到应用程序配置文件(Web.Config)中,这样,原来多数读者为之苦恼的连接字符串就轻松地创建好了。

图5-5保存数据连接字符串到Web.config接下来就要配置SQL语句了,读者可以根据两种方式从数据库中检索数据:一种是自定义SQL语句或存储过程;另一种是指定来自表或视图的列,如图5-6所示。

图5-6配置数据库查询这里,选择查询商品类别表T_WareType中的所有列,读者也可以根据需求,对数据进行筛选、排序等。单击“下一步”按钮,最后点击“完成”按钮。

通过上述步骤,完成了对SqlDataSource数据源的配置。那么,怎样将配置好的数据源绑定到指定的数据控件呢?

在页面中,添加一个DropDownList控件,单击该控件右边的“智能标记”按钮,单击“选择数据源”,出现如图5-7所示的对话框。

图5-7选择数据源选择数据源为“SqlDataSource1”;选择要在DropDownList中显示的数据字段为“splb_TypeName(商品类别名称)”;为DropDownList的值选择数据字段为“splb_TypeID”,单击“确定”按钮。

切换Test.aspx页至源视图,.NET生成的页面代码如下:

<asp:SqlDataSourceID="SqlDataSource1"runat="server"

ConnectionString="<%$ConnectionStrings:SuperMarketDBConnetionString%>"

SelectCommand="SELECT*FROM[T_WareType]">

</asp:SqlDataSource>

<asp:LabelID="Label1"runat="server"Text="商品类别:"></asp:Label>

<asp:DropDownListID="DropDownList1"runat="server"

DataSourceID="SqlDataSource1"

DataTextField="splb_TypeName"DataValueField="splb_TypeID">

</asp:DropDownList>

从页面代码可以知道,SqlDataSource控件的两个重要属性如下:①ConnectionString:设置为用于特定数据库的连接字符串。为使Web应用程序更易于维护,并且安全性更高,通常将连接字符串存储在应用程序配置文件的connectionStrings元素中,如上述代码所示。

②SelectCommand:指定该控件要执行的SQL查询。

在浏览器中查看Test.aspx页面效果,如图5-8所示。

图5-8SqlDataSource数据源控件筛选数据从上例可以看出,通过SqlDataSource数据源控件,不用书写一行代码,就可完成对数据库中数据的检索,大大地提高了应用程序的开发效率。

2.数据绑定控件

像DropDownList一样,可以配置数据源的控件,称为数据绑定控件。常用的数据绑定控件有DropDownList、ListBox、GridView、DataList、FormView、Repeater等。在ASP.NET2.0中,所有的数据库绑定控件都是从BaseDataBoundControl这个抽象类派生的,它定义了几个重要属性和一个重要方法:

·DataSource属性:指定数据绑定控件的数据来源,显示的时候程序将会从这个数据源中获取数据并显示。

·DataSourceID属性:指定数据绑定控件的数据源控件的ID,显示的时候程序将会根据这个ID找到相应的数据源控件,并利用这个数据源控件中指定方法获取数据并显示。

·DataBind()方法:当指定了数据绑定控件的DataSource属性或者DataSourceID属性之后,再调用DataBind()方法才会显示绑定的数据。

在使用数据源时,会先尝试使用DataSourceID属性标识的数据源,只在没有设置DataSourceID时才会用到DataSource属性标识的数据源。也就是说,DataSource和DataSourceID两个属性不能同时使用。

知识2GridView控件

1.GridView控件概述

在使用ASP.NET开发Web应用程序的过程中,GridView是一个非常重要的控件,几乎任何与数据相关的显示都要用到该控件。所以熟练掌握GridView控件的应用技巧是每个Web开发人员所必备的基本能力。

GridView控件是ASP.NET1.1下DataGrid控件的替代品,它以表格的形式显示数据源的值,每列表示一个字段,每行表示一条记录。该控件提供了诸如内置排序功能、内置更新和删除功能、内置分页功能、内置行选择功能、以编程方式访问GridView对象模型、动态设置属性、处理事件等功能。同时,它还可以通过主题和样式自定义外观,实现多种样式的数据展示。表5-1列举了GridView控件的常见属性。本节我们将介绍GridView控件常用的应用技巧。表5-1GridView控件常见属性

2.格式化GridView

在软件项目开发时,功能的实现固然重要,但界面的呈现风格也是不容忽视的,友好、和谐的界面风格能为软件增色不少。

有两种方式可对GridView控件的样式进行调整。一种方式是通过“智能标记”下的“自动套用格式”菜单,这种方式简单、直观,可以直接在窗口上看到最终格式化的效果,如图5-9所示。设置步骤如下:

①添加SqlDataSource控件,并配置数据源。②添加GridView控件,单击“智能标记”菜单,选择数据源为SqlDataSource1。单击自动套用格式对话框中的“选择方案”列表中合适的样式,可以通过“预览”部分查看所选择格式的效果。

图5-9设置GridView控件另一种方式是通过设置GridView控件不同部分的样式属性来自定义该控件的外观。这些样式包括一些基本的样式,如BackColor、BorderStyle等。

3.自定义列

如果需对Gridview控件中每一列自定义格式,则需单击“智能标记”中的“编辑列”,弹出如图5-10所示的对话框,这样就可以对每列进行详细的设置了。

图5-10GridView控件中自定义列表5-2GridView控件中的列

·绑定列:用于显示数据源中一列的信息。对于要显示的每个数据列,通常都对应于一个绑定列,需要显示几个字段,就加入几个绑定列。使用绑定列还可以设置相关属性。例如,列标头和列脚注的文本、字体、颜色、列宽、数据格式以及列是否为只读(当行编辑模式时,它是否会显示可编辑控件)等。当字段数固定时可选用绑定列。添加绑定列界面如图5-11所示。

图5-11自定义列属性设置添加绑定列后,其HTML标签代码如下:

<asp:BoundFieldDataField="sp_WareID"HeaderText="商品编号"

InsertVisible="False"ReadOnly="True"SortExpression="sp_WareID"/>

·复选框列:用于显示布尔型数据字段的值。由于复选框只能显示选定的或未选定的状态,因此,复选框列只能绑定到具有布尔型数据类型的字段。通过设置DataField属性完成列的绑定,还可通过设置Text属性为复选框添加标题。添加复选框列后,其列标签代码如下:

<asp:CheckBoxFieldDataField="sp_Checked"HeaderText="审核"

SortExpression="sp_Checked"/>

·超链接列:用于显示各行中的链接。超链接的文本可以指定,也可以从数据列中导出链接文本。同样,超链接的URL可以指定或者从数据源中获取。例如,当用GridView显示商品列表时,加超链接后,通过传递主键参数,就可以在另外一个页面上显示商品的详细信息。其HTML标签代码如下:

<asp:HyperLinkFieldDataNavigateUrlFields="sp_WareID"

DataNavigateUrlFormatString="Details.aspx?spID={0}"

HeaderText="查看"Text="查看"/>

此超链接利用查询字符串将sp_WareID的值传递到Details.aspx页。

·图像列:可以为所显示的每个记录显示图像。只需将图像列绑定到包含图像URL的数据源中的字段上,这可通过设置DataImageUrlField属性完成。可以通过使用DataImageUrlFormatString属性来设置URL值的格式。当添加图像列后,其对应的HTML标签代码如下:

<asp:ImageFieldDataImageUrlField="tp_ImagePath"HeaderText="商品图片">

</asp:ImageField>

每个图像还可以具有与之相关联的备用文本,当无法加载图像或图像不可用时,将显示此文本。

可以使用以下方法之一为所显示的图像指定备用文本:

①使用AlternateText属性指定图像的备用文本。

②使用DataAlternateTextField属性可将数据源中的字段绑定到每个图像的AlternateText属性。这可用于为每个显示的图像选择不同的备用文本。绑定数据时,还可以使用DataAlternateTextFormatString属性格式化备用文本。

·按钮列:可以创建“编辑”、“更新”、“取消”和“删除”功能的按钮。当GridView处于编辑模式时,“编辑”按钮被替换为两个按钮:“更新”按钮和“取消”按钮。此功能适用于字段内容不长的数据维护。当添加按钮列后,其对应的HTML标签代码如下:

<asp:ButtonFieldButtonType="Link"CommandName="Update"

HeaderText="编辑"ShowHeader="True"Text="更新"/>

<asp:CommandFieldButtonType="Button"HeaderText="操作"

ShowDeleteButton="True"ShowEditButton="True"

ShowHeader="True"ShowSelectButton="True"/>

·模板列:在使用GridView显示数据时,对每列进行单独控制。例如,在校园在线超市系统中,当显示商品列表时,除显示商品的基本信息外,还需显示商品所属的分类,而分类数据存放于另外一张数据表中,这时,希望通过TextBox控件来显示每个商品的分类信息。使用GridView的模板列可以很方便地实现自定义列。下面阐述图形界面对模板列进行设计的过程:

①新增模板列。选择GridView控件智能标签菜单的“编辑列”,系统显示如图5-10所示界面。在可用字段中,将出现TemplateField字段,单击“添加”按钮,在“选定的字段”列表中,将出现“TemplateField”字段,这时可在其对应的属性栏中设置相应的属性。

②对模板列进行编辑和设计。在设计视图中,选择GridView的智能标记菜单中的“编辑模板”项,在系统显示的“GridView”任务窗口中,选择新增的模板列,系统将显示如图5-12所示的界面。

图5-12GridView模板编辑表5-3GridView控件中的模板类型根据不同的模板,可以在模板容器中选择不同的控件,然后进行数据绑定设置。下面的代码在ItemTemplate模板项中添加标签控件Label1,并将其绑定到商品类别的ID上:

<asp:TemplateFieldHeaderText="商品类别">

<ItemTemplate>

<asp:LabelID="Label1"runat="server"

Text='<%#Eval("splb_TypeID")%>'>

</asp:Label>

</ItemTemplate>

</asp:TemplateField>上述代码中,Eval方法可将控件绑定到数据,当用户修改数据值时,可以用Bind方法进行数据绑定。

下面讨论采用GridView控件显示两个数据表信息的方法。

【例5-2】使用GridView控件显示商品记录列表,并在GridView中添加一个模板列,用来显示商品类别的名称,如图5-13所示。

图5-13使用模板列在界面文件中绑定列和模板列的代码如下:

<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"

DataSourceID="SqlDataSource1"BackColor="White"BorderColor="White"

BorderStyle="Ridge"BorderWidth="2px"CellPadding="3"CellSpacing="1"

GridLines="None"OnRowDataBound="GridView1_RowDataBound"Width="493px"

AllowPaging="True"PageSize="5">

<Columns>

<asp:BoundFieldDataField="sp_WareID"HeaderText="商品编号"

InsertVisible="False"ReadOnly="True"

SortExpression="sp_WareID"/>

<asp:BoundFieldDataField="sp_WareName"HeaderText="商品名称"

SortExpression="sp_WareName"/>

<asp:BoundFieldDataField="sp_Price"HeaderText="单价"

SortExpression="sp_Price"/>

<asp:CheckBoxFieldDataField="sp_Checked"HeaderText="审核"

SortExpression="sp_Checked"/>

<asp:TemplateFieldHeaderText="商品类别">

<ItemTemplate>

<asp:LabelID="Label1"runat="server"Width="102px"/>

</ItemTemplate>

</asp:TemplateField>

</Columns>

</asp:GridView>

<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString=

"<%$ConnectionStrings:SMDBConnStr%>"

SelectCommand="SELECT[sp_WareID],[sp_WareName],[sp_Price],

[splb_TypeID],[sp_Checked]FROM[T_Ware]">

</asp:SqlDataSource>需要注意的是,GridView中记录的每一行都有商品类别,这就要求通过商品类别编号(splb_TypeID)作为参数,以获取商品类别的名称,并赋给模板列中的Label1。这需要对GridView控件的RowDataBound事件编写代码,该事件是在数据绑定时触发的。代码如下:

protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse)

{if(e.Row.RowType==DataControlRowType.DataRow){

//获取每一行的商品类别的ID

inttypeID=Convert.ToInt32(DataBinder.Eval(e.Row.DataItem,

"splb_TypeID"));

//获取某商品类别ID的名称

stringstr=TypeName(typeID);

//在GridView的行中查找名为“Label1”的控件

Labellbl=(Label)e.Row.FindControl("Label1");

lbl.Text=str;

}}下面的TypeName方法用来读出指定商品类别编号(splb_TypeID)的商品所对应的商品名称:

protectedstringTypeName(inttypeID){

strings="";

stringstr="selectsplb_TypeNamefromT_WareTypewhere

splb_typeid="+typeID;

SqlConnectionstringstrconn=

ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;

conn=newSqlConnection(strconn);

conn.Open();

SqlCommandcmd=newSqlCommand(str,conn);

SqlDataReadersdr=cmd.ExecuteReader();

if(sdr.Read()){

s=sdr["splb_TypeName"].ToString();

}conn.Close();

returns;

}

4.分页

ASP.NET2.0中的GridView控件内置分页,可以使用默认分页用户界面和创建自定义的分页界面。

使用GridView控件的界面方式可以很方便地实现分页。在VS2005中的设计视图中,单击GridView的“智能标记”菜单的“启用分页”项,就可以实现自动分页,如图5-14所示。

图5-14启用GridView控件分页也可以通过编程方式将GridView控件的AllowPaging属性设置为True,并通过PageSize属性来设置页的大小,还可通过设置PageIndex属性设置GridView控件的当前页。使用PagerSettings属性进行分页的UI设计,常用的模式如表5-4所示。表5-4GridView控件的分页模式界面方式设置控件的PagerSettings属性对应的HTML标签代码如下:

<PagerSettingsFirstPageText="首页"LastPageText="末页"Mode=

"NextPreviousFirstLast"NextPageText="下一页"PreviousPageText="上一页"/>

用户也可以通过程序代码设置PagerSettings的Mode属性来自定义分页模式,如:

GridView1.PagerSettings.Mode=PagerButtons.NextPrevious;

GridView1.PagerSettings.NextPageText="下一页";

GridView1.PagerSettings.PreviousPageText="上一页";

5.排序

像分页一样,可以像启用分页功能一样启用GridView控件的排序功能,也可以通过编程的方式将AllowSorting属性设置为true来启用排序。

启用排序功能后,GridView控件将LinkButton控件呈现在列标题中。同时,该控件还将每一列的SortExpression属性隐式设置为它所绑定的数据字段的名称。例如,例5-2中GridView显示的第一列为“商品编号”列,则该列的SortExpression属性将被自动设置为sp_WareID。当在浏览器中查看时,用户可以单击列标题中的LinkButton控件,使之按该列排序。任务实现

步骤1新建名为WareList.aspx的页面,并为该页面选择名为MasterPage.master的母版页。在Content项内添加所需控件,如图5-15所示;设置各控件相应的属性,如表5-5所示。

图5-15商品信息查询界面设计表5-5界面控件设置步骤2为SqlDataSource1数据源控件配置链接字符串,代码如下:

<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$

ConnectionStrings:SMDBConnStr%>">

</asp:SqlDataSource>步骤3为页面装载事件Page_Load添加如下代码,将商品类别的名称绑定到ddlWareType下拉列表控件,并设定grdWareList控件的数据源:

protectedvoidPage_Load(objectsender,EventArgse){

if(!IsPostBack){

stringconnstr=

ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;

SqlConnectionsqlConn=newSqlConnection(connstr);

sqlConn.Open();

stringstr="selectsplb_TypeNamefromT_WareType";

SqlCommandcmd=newSqlCommand(str,sqlConn);

SqlDataReaderdr=cmd.ExecuteReader();

while(dr.Read()){

ddlWareType.Items.Add(dr["splb_TypeName"].ToString());

}

grdWareList.DataSourceID="SqlDataSource1";

}}步骤4为btnSelect按钮添加单击事件,实现查询指定的商品名称或商品类别的功能,查询得到的数据动态地绑定到grdWareList控件。由于界面设计中已将grdWareList控件与数据源SqlDataSource1控件绑定,因此要将查询结果绑定到grdWareList控件上,则先要将其绑定设置清空,再重新绑定。

protectedvoidbtnSelect_Click(objectsender,EventArgse){

stringconnstr=

ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;

SqlConnectionsqlConn=newSqlConnection(connstr);

sqlConn.Open();

stringstr="SELECTsp_WareName,sp_AllSum,sp_SellSum,

sp_Price,sp_Information,splb_TypeName";

str=str+"FROMT_WareaJOINT_WareTypeb

ONa.splb_TypeID=b.splb_TypeIDwhere";

str=str+"b.splb_TypeName='"

+ddlWareType.SelectedValue.ToString().Trim()+"'";

if(txtWareName.Text!=""){

str=str+"anda.sp_WareNamelike'"+"%"

+txtWareName.Text.Trim()+"%'";

}

//清除grdWareList控件的数据绑定

this.grdWareList.DataSourceID=null;

//设置SqlDataSource1控件的查询字符串

SqlDataSource1.SelectCommand=str;

//重新绑定grdWareList控件的数据源

grdWareList.DataSourceID="SqlDataSource1";

}

步骤5浏览“WareList.aspx”页面,查看其运行效果。

任务描述

校园在线超市作为信息交易平台,每一位注册会员都可以发布商品信息,并能对所发布的商品进行管理,因此,要求为会员提供商品添加、删除、修改等功能,并将相应信息保存到数据库中。5.2【任务11】商品信息的添加、修改和删除

必备知识

知识1DataSet对象和DataAdapter对象

1.DataSet对象

DataSet对象即数据集对象。.NET的数据提供程序提供数据源和DataSet之间的连接,由于DataSet不依赖于数据源,因此这种数据访问模式也称为断开连接模式。在ADO.NET中,DataSet用于在断开式连接环境中存储从数据源中收集的数据。DataSet对象是数据的一种内存驻留表示形式,无论包含的数据来自什么数据源,它都会提供一致的关系编程模型。

DataSet对象把数据存储在一个或多个DataTable中。每个DataTable可由来自惟一数据源中的数据组成。DataSet具备存储多个表数据以及表间关系的能力,而每一个DataTable又包含了DataRow和DataColumn,分别存放表中行和列的数据信息,因此对数据集的操作主要是对DataSet包含的表中的行或列的操作,与直接对数据库的操作一致。此外,DataSet对象中数据完全采用XML格式,因此,XML文档可以导入DataSet对象,而DataSet对象中的数据也可以导出为XML文档。也就是说,DataSet对象和XML文档是可以互换的,这样就使得跨平台的数据访问成为可能,也使得DataSet对象可以作为Web服务或者是其他类型远程调用的返回值。图5-16所示给出了与DataSet类相关的主要类及它们间的关系。

图5-16与DataSet类相关联的主要类

2.DataAdapter对象

DataAdapter对象是DataSet和ADO.NET对象模型中断开式连接对象之间的桥梁。该对象使用Connection对象与数据库连接,然后使用Command和DataReader对象来获取数据和处理数据库的变化。

DataAdapter对象有很多属性,这些属性是包含SQL语句的SqlCommand和OleDbCommand对象。

DataAdapter对象有如下四个Command-type属性:

·SelectCommand:这个属性发布一个SQLSelect语句。

·UpdateCommand:这个属性发布一个SQLUpdate语句。

·InsertCommand:这个属性发布一个SQLInsert语句。

·DeleteCommand:这个属性发布一个SQLDelete语句。

如果数据来自于单一的表,则可以使用CommandBuilder对象自动生成DataAdapter的UpdateCommand、InsertCommand和DeleteCommand属性,使用此对象可以节省开发

时间。另外,DataAdapter对象的Fill方法用于填充数据集,而Update方法用于更新数据库。

3.填充数据集

填充DataSet时,DataAdapter将查询的结果存储在DataSet的DataTable对象中,当执行这一过程时,DataAdapter使用一个SelectCommand来与数据库通信,并在内部使用DataReader来获取查询结果,最后才将结果复制到DataSet中的表中,这就是数据填充的过程。具体操作时,只要调用其Fill方法即可。

从上述可知,DataAdapter填充DataSet的过程主要分为两个步骤:

·通过DataAdapter的SelectCommand属性从数据库中检索出所需数据。

·调用DataAdapter的Fill方法把检索出的数据填充到DataSet中。

填充数据集代码如下:

stringconnstr=

ConfigurationManager.ConnectionStrings["SMDBConnStr"].ConnectionString;

SqlConnectionsqlConn=newSqlConnection(connstr);

sqlConn.Open();

stringstr="SELECT*FROMT_WareType"

SqlDataAdapterda=newSqlDataAdapter(str,sqlConn);

DataSetds=newDataSet();

da.Fill(ds,"splb");这时,DataSet中的表可以直接作为数据控件的数据源,只需设置数据源控件的DataSource属性,再调用DataBind方法就可以将控件与数据联系起来。例如,将商品信息用上节讲到的GridView控件关联起来,实现的代码如下:

GridView1.DataSource=ds.Tables["splb"].DefaultView;

GridView1.DataBind();

4.使用DataSet对数据源中的记录进行编辑

利用DataSet对数据源中的记录进行编辑的主要步骤是:将数据源中的有关内容写入内存数据库;更改内存数据库中的内容;更改完成后,调用DataAdapter对象的Update方法,并根据DataSet内的数据更新情况,分别应用于InsertCommand、UpdateCommadn、DeleteCommand属性的Command命令,以将数据写回数据库。怎样设置用于更新数据源的SQL语句及参数呢?我们可以使用CommandBuilder对象,系统可根据内存数据表自建立以来的变化情况,自动生成UpdateCommand、DeleteCommand和InsertCommand属性,并提供相应的单一命令的方法,它会自动协调DataSet,通过DataAdapter对象对后台数据库更新。只需添加如下代码行:

SqlCommandBuilderscmd=newSqlCommandBuilder(da);

1)添加记录

添加新记录需要创建数据表中的新行,再使用添加行的方法。

DataTabledt=ds.Tables["splb"];

DataRowrow=dt.NewRow();

row["splb_TypeName"]=TextBox1.Text;

dt.Rows.Add(row);

da.Update(ds,"splb");

2)更新记录

更新记录前首先应取得更新行。在创建DataRow对象的实例时,与添加新记录是不一样的。

stringstr="SELECT*FROMT_WareTypewheresplb_TypeID="+spID;

DataTabledt=ds.Tables["splb"];

DataRowrow=dt.Rows[0];

row["splb_TypeName"]=TextBox1.Text;

da.Update(ds,"splb");

3)删除记录

删除记录同样要先获取删除行的记录,再调用行的Delete方法。

stringstr="SELECT*FROMT_WareTypewheresplb_TypeID="+spID;

DataTabledt=ds.Tables["splb"];

DataRowrow=dt.Rows[0];

row.Delete();

da.Update(ds,"splb");从上面可知,使用DataSet和CommandBuilder对象对数据库操作的代码非常简洁,只需通过row[″字段名″]即可读取或设置字段值,没有了冗长的SQL语句和复杂的标点符号。要注意的事,不论是更新、删除还是添加操作,最后都必须调用Update方法,否则,DataSet中更新的数据不会写回数据库中。此外,使用CommandBuilder对象时,被更新的表中要有主键,否则会出现“对于不返回任何键列信息的SelectCommand不支持UpdateCommand的动态SQL生成”的错误信息。

知识2FileUpLoad控件和FormView控件

1.FileUpLoad控件

FileUpLoad控件是ASP.NET2.0新增控件,该控件使用户更容易地浏览和选择用于上传的文件。它包含一个浏览按钮和用于输入文件名的文本框,用户可以在文本框中输入完整的文件路径,或者通过按钮浏览并选择需要上传的文件。其HTML标签代码如下:

<asp:FileUploadID="FileUpload1"runat="server"/>

除从WebControl类继承的标准成员外,FileUpload控件还公开了几个只读的属性,如表5-6所示。表5-6FileUpload控件的属性其中HttpPostedFile类的属性如表5-7所示。

表5-7HttpPostedFile类的属性

FileUpload控件不会自动上传文件,必须设置相关的事件处理程序,并在程序中实现文件上传。

FileUpload控件的SaveAs方法用于将上传的文件保存到服务器上。一般来说,使用FileUpload控件上传文件一般有如下几个步骤:

·利用HasFile属性判断是否上传了文件。

·在服务器上指定一个物理路径,并检查这个物理路径是否存在,如果不存在则先创建。

·指定上传文件在服务器上的上传路径,利用SaveAs()保存上传的文件。这一步还可以做一些其他检查工作,如检查上传的文件格式是否符合要求或文件内容大小是否符合

要求。

·将相对路径或者URL地址保存起来,以便客户访问或者下载。

【例5-3】FileUpLoad控件的使用。

在校园在线超市系统中,商品发布时都要上传商品所对应的图片。本例实现的功能是通过FileUpLoad控件实现商品图片的上传,通过点击上传按钮将指定的图片保存在应用程序的images目录下,并在页面中显示上传的图片及相关信息,如图5-17所示。

图5-17FileUpLoad的使用实现代码如下:

protectedvoidUpLoad_Click(objectsender,EventArgse){

boolfileValid=false;

//设置标签和图像显示控件的可见性

Label1.Visible=true;

Image1.Visible=true;

if(this.FileUpload1.HasFile){

//获取指定路径字符串的扩展名

StringfileExtension=

Path.GetExtension(this.FileUpload1.FileName).ToLower();

//设置上传文件的类型

String[]allowExtension={".gif",".jpg",".bmp",".png"};

for(inti=0;i<allowExtension.Length;i++){

if(fileExtension==allowExtension[i]){

fileValid=true;

}}

if(fileValid==true){

try{

//将上传的文件保存到指定的路径下

this.FileUpload1.SaveAs(Server.MapPath("~/Images/")

+FileUpload1.FileName);

this.Image1.ImageUrl="~/Images/"+FileUpload1.FileName;

this.Label1.Text="上传文件成功";

this.Label1.Text+="<br/>";

//获取上传文件的相关信息

this.Label1.Text+="<li>"+"原文件路径:"

+this.FileUpload1.PostedFile.FileName;

this.Label1.Text+="<br/>";

this.Label1.Text+="<li>"+"文件大小:"

+this.FileUpload1.PostedFile.ContentLength+"字节";

this.Label1.Text+="<br/>";

this.Label1.Text+="<li>"+"文件类型:"

+this.FileUpload1.PostedFile.ContentType;

}catch{

this.Label1.Text="文件上传不成功";

}}

else{

this.Label1.Text="请上传后缀为.gif,.jpg,.bmp,.png的文件";

}}}

2.FormView控件

可以使用FormView控件访问和操作数据源的单个记录,通常用于对记录更新和插入。FormView控件不指定用于显示记录的预定义布局。实际上,可以创建一个包含控件的模板,以显示记录中的各个字段。该模板包含用于创建窗体的格式、控件和绑定表达式。

FormView控件的用法和GridView控件的用法非常类似,它支持的模板类型有EditItemTemplate、EmptyDataTemplate、FooterTemplate、HeaderTemplate、ItemTemplate、InsertItemTemplate和PagerTemplate。应注意,这里没有AlternatingItemTemplate模板(一条记录自然就不会有什么奇偶行效果了)。

FormView控件支持以下功能:

·绑定到数据源控件,如SqlDataSource和ObjectDataSource。

·内置插入功能。

·内置更新和删除功能。

·内置分页功能。

·动态设置属性、事件处理等。

·可通过用户定义的模板、主题和样式自定义外观。

FormView控件一次只能显示一条数据,但是如果绑定的数据源有多条记录,则默认显示第一条记录;支持像GridView那样分页显示数据源中的每条记录。

<!--定义FormView控件,并允许分页-->

<asp:FormViewID="FormView1"runat="server"DataKeyNames="sp_WareID"

DataSourceID="SqlDataSource1"Height="150px"Width="198px"

BackColor="Linen"AllowPaging="True">

<!--定义FormView的数据编辑模板-->

<EditItemTemplate>

sp_WareID:

<asp:LabelID="sp_WareIDLabel1"runat="server"Text='<%#

Eval("sp_WareID")%>'></asp:Label><br/>

sp_Information:

<asp:TextBoxID="sp_InformationTextBox"runat="server"Text='<%#

Bind("sp_Information")%>'>

</asp:TextBox><br/>

sp_Time:

<asp:TextBoxID="sp_TimeTextBox"runat="server"Text='<%#

Bind("sp_Time")%>'>

</asp:TextBox><br/>

sp_Price:

<asp:TextBoxID="sp_PriceTextBox"runat="server"Text='<%#

Bind("sp_Price")%>'>

</asp:TextBox><br/>

sp_WareName:

<asp:TextBoxID="sp_WareNameTextBox"runat="server"Text='<%#

Bind("sp_WareName")%>'>

</asp:TextBox><br/>

<!--定义命令按钮-->

<asp:LinkButtonID="UpdateButton"runat="server"

CausesValidation="True"CommandName="Update"

Text="更新">

</asp:LinkButton>

<asp:LinkButtonID="UpdateCancelButton"runat="server"

CausesValidation="False"CommandName="Cancel"

Text="取消">

</asp:LinkButton>

</EditItemTemplate>

<!--定义FormView的数据插入模板-->

<InsertItemTemplate>

sp_Information:

<asp:TextBoxID="sp_InformationTextBox"runat="server"Text='<%#

Bind("sp_Information")%>'>

</asp:TextBox><br/>

sp_Time:

<asp:TextBoxID="sp_TimeTextBox"runat="server"Text='<%#

Bind("sp_Time")%>'>

</asp:TextBox><br/>

sp_Price:

<asp:TextBoxID="sp_PriceTextBox"runat="server"Text='<%#

Bind("sp_Price")%>'>

</asp:TextBox><br/>

sp_WareName:

<asp:TextBoxID="sp_WareNameTextBox"runat="server"Text='<%#

Bind("sp_WareName")%>'>

</asp:TextBox><br/>

<!--定义命令按钮-->

<asp:LinkButtonID="InsertButton"runat="server"CausesValidation="True"

CommandName="Insert"

Text="插入">

</asp:LinkButton>

<asp:LinkButtonID="InsertCancelButton"runat="server"

CausesValidation="False"CommandName="Cancel"

Text="取消">

</asp:LinkButton>

</InsertItemTemplate>

<!--定义FormView的数据显示模板-->

<ItemTemplate>

sp_WareID:

<asp:LabelID="sp_WareIDLabel"runat="server"Text='<%#

Eval("sp_WareID")%>'></asp:Label><br/>

sp_Information:

<asp:LabelID="sp_InformationLabel"runat="server"Text='<%#

Bind("sp_Information")%>'>

</asp:Label><br/>

sp_Time:

<asp:LabelID="sp_TimeLabel"runat="server"Text='<%#Bind("sp_Time")%>'>

</asp:Label><br/>

sp_Price:

<asp:LabelID="sp_PriceLabel"runat="server"Text='<%#Bind("sp_Price")%>'>

</asp:Label><br/>

sp_WareName:

<asp:LabelID="sp_WareNameLabel"runat="server"Text='<%#

Bind("sp_WareName")%>'>

</asp:Label><br/>

<!--定义命令按钮-->

<asp:LinkButtonID="EditButton"runat="server"CausesValidation="False"

CommandName="Edit"

Text="编辑">

</asp:LinkButton>

<asp:LinkButtonID="DeleteButton"runat="server"

CausesValidation="False"CommandName="Delete"

Text="删除">

</asp:LinkButton>

<asp:LinkButtonID="NewButton"runat="server"CausesValidation="False"

CommandName="New"

Text="新建">

</asp:LinkButton>

</ItemTemplate>

</asp:FormView>

<!--定义数据源控件-->

<asp:SqlDataSourceID="SqlDataSource1"runat="server"

ConflictDetection="CompareAllValues"

ConnectionString="<%$ConnectionStrings:SMDBConnStr%>"

DeleteCommand="DELETEFROM[T_Ware]WHERE[sp_WareID]=@original_sp_WareID

AND[sp_Price]=@original_sp_PriceAND[sp_WareName]=

@original_sp_WareNameAND[sp_Information]=@original_sp_Information"

InsertCommand="INSERTINTO[T_Ware]([sp_Price],[sp_WareName],[sp_Information])

VALUES(@sp_Price,@sp_WareName,@sp_Information)"

OldValuesParameterFormatString="original_{0}"

SelectCommand="SELECT[sp_WareID],[sp_Price],[sp_WareName],[sp_Information]FROM

[T_Ware]"

UpdateCommand="UPDATE[T_Ware]SET[sp_Price]=@sp_Price,[sp_WareName]=

@sp_WareName,[sp_Information]=@sp_InformationWHERE[sp_WareID]=

@original_sp_WareIDAND[sp_Price]=@original_sp_PriceAND

[sp_WareName]=@original_sp_WareNameAND[sp_Information]=

@original_sp_Information">

<DeleteParameters>

<asp:ParameterName="original_sp_WareID"Type="Int32"/>

<asp:ParameterName="original_sp_Price"Type="Double"/>

<asp:ParameterName="original_sp_WareName"Type="String"/>

<asp:ParameterName="original_sp_Information"Type="String"/>

</DeleteParameters>

<UpdateParameters>

<asp:ParameterName="sp_Pric

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论