第一章 建立项目
发布日期:2005年9月17日|更新日期:2005年10月16日
作者:张昭 周蓉 王喜胜,京胜世纪整理
本文内容及代码示例为京胜世纪版权所有,禁止任何非授权的拷贝传播及任何方式的网络传播。
摘要:本章讲述如何建立一个.net Web应用项目,以及商品一级分类数据库表的建立,讲述如何建立网络商店首页,并在首页动态的显示商品一级分类栏目。
本页内容:
新建项目文件
创建商城首页文件default.aspx
创建image图像文件夹
创建样式表文件
创建数据库脚本
配置Web.config文件
创建基本类文件
创建top.ascx用户控件
编写top.ascx.cs后台程序代码
对default.aspx进行编辑
Other_text.aspx帮助内容文件
总结
应用到的资源
图片及相关页面文件包:resource.rar
第一章源代码:step_one.rar
1.打开Visual Studio.NET 2003,系统打开如图1-1所示窗口,在项目“起始页”中单击【新建项目】按钮;

2.在弹出的“新建项目”窗口中选择要新建项目的类型。在这我们选择“项目类型:->Visual C#项目”,选择“模板->ASP.NET.Web”应用程序。接下来要选择保存程序的位置。按系统默 设置,在“位 置”栏中会出现类似于http://localhost/WebApplication的位置,这表示系统会自动创建一个应用程序WebApplication1,也就是说会建立一个虚拟目录 WebApplication1,该虚拟目录对应的实际位置默认为 C:\Inetpub\wwwroot\WebApplication1 文件夹。当然,大家也可以自行修改该名称,在这里我们默认输入http://localhost/wshop。

点击确定按钮后,系统会建立一个名为wshop的Web应用。
相关知识点:
打开【新建项目】对话框,其方法有3种:
在Visual Studio.NET的起始页(首次打开Visual Studio.NET时显示的默认页)上,单击【新建项目】
在工具栏上单击【新建项目】按钮。
在菜单中选择【文件】|【新建】|【项目】菜单项。
- 【新建项目】按钮
(一)创建页面文件default.aspx
Default.aspx 网站首页,放置需要最先展现给网站访问者的内容。
说明:
*.aspx文件是Asp.net的页面文件,也称作web窗体,包括描述页面形式html语句和嵌入的脚本语言,是Web应用的页面表现形式,可以使用Visual Studio .Net应用环境进行编辑,也可以使用DreamWeaver或Frontpage等工具进行页面的编辑。
相关文件类型介绍请参见相关文件类型说明。
在新的WEB应用程序中,系统会自动创建一个webform1.aspx的web窗体,并且已在编辑器中将它打开。在右侧的解决方案资源管理器中选中该文件,单击鼠标右键在弹出的快捷菜单选择“重命名”,将其改名为default.aspx。


相关知识点:
菜单栏:位于上方。它和VB、Office等普通软件一样,几乎所有功能都可以在其中找到。
按钮栏:位于菜单栏下方。尤要注意中间的【运行】按钮和右侧的几个显示子窗口按钮。前者用来测试运行程序,后者用来显示或隐藏下方的“工具箱”等小窗口。
工具箱视图:位于左侧,“工具箱”显示 Visual Studio 项目中使用的各个不同的项。根据当前正在使用的设计器或编辑器,“工具箱”中可用的选项卡和项会有所变化。可用的项包括 .NET 组件、COM 组件、HTML 对象、代码片段和文本。可以从“视图”菜单访问“工具箱”。
服务器资源管理器视图:位于左侧,服务器资源管理器是 Visual Studio .NET 的服务器管理控制台。使用服务器资源管理器打开数据连接,登录服务器,浏览它们的数据库和系统服务。可以将节点从服务器资源管理器拖放到 Visual Studio .NET 设计器上。这将创建新的数据组件,这些组件预配置为引用所拖放的项。
若要访问服务器资源管理器,请选择“视图”菜单上的“服务器资源管理器”。若要使服务器资源管理器窗口在不使用时自动关闭,请选择“窗口”菜单上的“自动隐藏”。
解决方案资源管理器视图:位于右上方,解决方案资源管理器提供项目及其文件的有组织的视图,并且提供对项目和文件相关命令的便捷访问。与此窗口关联的工具栏提供适用于列表中突出显示的项的常用命令,
若要访问解决方案资源管理器,请在“视图”菜单上选择“解决方案资源管理器”。简单的说,可以在解决方案资源管理器添加、删除、打开、重命名和移动文件、设置起始页面或项目、在文件代码和设计视图之间进行切换以及查看文件状态信息。
属性视图:用来给控件设置属性。比如从左侧工具箱中将控件拖放到主工作区后,就可以在右侧的属性栏给该控件设置显示文本(Text)、名称(ID)和背景颜色(BackColor)等属性。
主工作区:位于中央,用来设计页面和书写有关代码,是主要的操作窗口。所有打开的文件都会放在该窗口中,单击工作区上方的标签,就会显示相应的文件,单击主工作区右侧的关闭按钮,就可以关闭相应的文件。如果想重新打开文件,再右侧的“解决方案资源管理器”中双击文件名称即可。工作区主要包括设计器和编辑器,设计器用于设计Web窗体的样式,编辑器用于代码和其他文件的编辑。
任务列表:位于左下方,用来显示编译错误等提示信息。 除了以上主要窗口外,还有“类视图”、“动态帮助”等窗口,请大家自己去熟悉。
也可在【解决方案资源管理器】窗口右击应用程序名称(wshop)选择【添加】项添加新项目窗口,选择(【Web项目项】->【Web窗体】),并在名称编辑框处输入default.aspx,点击确定完成窗体创建。
相关知识点:
与创建新项目一样,向应用程序添加WEB窗体的方法也有几种。选择哪种式法,很大程度上取决于您喜欢怎样去工作。
在Visual Studio.NET的工具栏上,单击【添加新项】按钮。也可以单击这个按钮旁边的向下箭头,然后从弹出菜单中选择【添加WEB窗体】。
从【项目】菜单中,选择【添加WEB窗体】命令。
-【添加新项】按钮
创建一个images文件夹,主要用于存储项目使用的图片文件。
1.在“解决方案资源管理器”中选择应用程序名称,单击鼠标右键在快捷菜单中选择【添加】项,在弹出的子菜单中选择【新建文件夹】项。

2.输入文件夹名称后,选中此文件夹,单击鼠标右键在快捷菜单中选择【添加】项,在弹出的子菜单中选择【添加现有项】,在打开的窗口中选择文件类型为“图像文件”,选择指定目录下需要加入的图像文件后单击【打开】按钮,在添加图片时可以一次性选择多个图像文件进行添加。

添加的文件列表:
arrow.gif
bg-solid.gif
bg.gif
bg1.gif
botton_off.gif
help.gif
icon_012.gif
index_01.jpg
index_02.jpg
index_03.jpg
index_04.jpg
title.gif
本例提供的相关图像文件存在于resource压缩包中,下载该压缩包后解压缩到指定目录,所有图像文件在"resource/image/"目录下。
注意:
一定要在解决方案浏览器视图中进行文件夹的创建,否则.net将不认为该文件夹是当前项目的一部分。
如果从其他文件夹中向项目文件夹中拷贝文件时,需要打开我的电脑中的相应文件夹,选中指定的文件,用鼠标拖动选中文件到任务栏上的.net环境切换按钮,系统自动切换到.net环境,然后继续拖动文件到解决方案浏览器视图中的目标文件夹进行拷贝,否则直接在文件夹之间拷贝.net环境将不认为这些文件是当前项目的一部分,无法在项目中引用。
1.创建一个inc文件夹,把项目需要的配置文件都放在这里,创建文件夹的操作方法同“创建images图像文件夹”。
2.创建一个css.css文件,用于保存网页样式表定义内容。在建立“inc”文件夹后单击鼠标右键在快捷菜单中选择【添加】项,在弹出的子菜单中选择【添加组件】,系统打开如下图所示窗口,在右侧的“模板”列表中选择“样式表”,在“名称”栏中输入css,单击【打开】按钮

相关知识点:
*.css文件是样式表文件,用于与定义Web页面文件相应显示的样式。相关文件类型介绍请参见:相关文件类型说明。
通过样式文件,我们可以预先定义一些网页上控件的样式,例如:字体、大小、位置等。在其它的窗体中直接调用此定义即可。关于CSS样式文件的语法规则请参见:CSS样式表基础。
在空白样式文件中单击鼠标右键,在弹出的快捷菜单中选择【添加样式规则】项,在弹出的【添加样式规则】窗口中选中【元素】单选按钮,从下面的下拉列表中选择TABLE元素,点击【 > 】按钮,将TABLE元素添加到样式规则层次结构列表中,单击【确定】按钮,系统自动生成相应的样式元素代码框架。

同样方法,添加A:link,A:visited,A:active,A:hover元素。
然后继续在空白样式文件中单击鼠标右键,在弹出的快捷菜单中选择【添加样式规则】项,在弹出的【添加样式规则】窗口中选中【类名】单选按钮,在下面的编辑框中输入bgTitler,点击【 > 】按钮,将bgTitler类添加到样式规则层次结构列表中,单击【确定】按钮,系统自动生成相应的样式类代码框架。

同样方法,添加bor_1,box1,button-a,button-b类。

在代码中选定当前要定义的样式(例如:A:link)项-(光标指针停在A:link括号范围内),单击鼠标右键在弹出的菜单中选择【生成样式】项,系统将弹出【样式生成器】窗口,在样式生成器中的【字体】->【字体属性】->【颜色】下拉框中直接输入“#436976”,选中【字体】->【字体属性】->【大小】->【特定】,并在后的编辑框中输入“12”,在后面的下拉列表中选择“px”,选中【字体】->【字体属性】->【效果】->【无】选项,点击确定返回

系统会自动生成如下代码:
A:link {
font-size: 12px;
color: #436976;
text-decoration: none;
}
样式表设置的学习是需要一个逐步积累的过程,我们可以自己动手对【样式生成器】中的逐个项目进行设置,然后观察引用样式表文件的网页的变化来了解各项设置的效果,这里我们可以直接引用我们已经设置好的内容,即将下面的代码拷贝到css.css文件的代码中去:
BODY {
PADDING-RIGHT: 0px;
PADDING-LEFT: 0px;
FONT-SIZE: 12px;
PADDING-BOTTOM: 0px;
MARGIN: 0px;
SCROLLBAR-HIGHLIGHT-COLOR: #dee7ec;
SCROLLBAR-SHADOW-COLOR: #8cacbb;
COLOR: black;
SCROLLBAR-3DLIGHT-COLOR: #8cacbb;
SCROLLBAR-ARROW-COLOR: #436976;
PADDING-TOP: 0px;
SCROLLBAR-TRACK-COLOR: #f7f9fa;
SCROLLBAR-DARKSHADOW-COLOR: #f7f9fa;
SCROLLBAR-BASE-COLOR: #dee7ec;
background-image: url(../images/bg-solid.gif);
}
TABLE {
FONT-SIZE: 100%
}
A:link {
font-size: 12px;
color: #436976;
text-decoration: none;
}
A:visited {
font-size: 12px;
color: #FF0000;
text-decoration: none;
}
A:active {
font-size: 12px;
COLOR: #00FF00;
TEXT-DECORATION: none
}
A:hover {
font-size: 12px;
color: #0000FF;
text-decoration: none;
}
.bgTitler {
background-image: url(../Images/bg_title.gif);
background-repeat: repeat-x;
background-position: left top;
}
.bor_1
{
border: 1px solid #CCCCCC;
}
.box1 {
background-color: #EEEEFF;
border: 1px solid #003399;
margin: 0px;
padding: 0px;
}.button-a {
font-size: 12px;
background-image: url(../Images/button-a.gif);
height: 26px;
width: 68px;
border: 0px none;
padding: 5px;
}
.button-b {
font-size: 12px;
background-image: url(../Images/button-b.gif);
height: 24px;
width: 82px;
border: 0px none;
padding: 5px;
}
1.创建一个sql文件夹,把项目需要的数据库脚本文件都放在这里, 创建文件夹的方法同前所述。
说明:
SQL-Structure Query Language(结构化查询语言),是进行数据库创建,读写等相关操作的脚本语言。
*.sql文件是用于存储sql语句的文件,在项目开发中主要用于保存项目建立、更新数据库表编写sql语句。可以使用多数的文本编辑器打开、编辑。
2.在wshop.sql文件写好建立商品一级分类列表Goods_Type,SQL语句内容如下所示:
CREATE TABLE [Goods_Type] (
[Type_Id] [int] IDENTITY (1, 1) NOT NULL ,
[Type_Name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Type_text] [nvarchar] (250) COLLATE Chinese_PRC_CI_AS NULL ,
[Type_Order] [int] NULL CONSTRAINT [DF_Goods_Type_Type_Order] DEFAULT (0),
[Type_Check] [int] NULL CONSTRAINT [DF_Goods_Type_Type_Check] DEFAULT (0),
[Type_time] [datetime] NULL CONSTRAINT [DF_Goods_Type_Type_time] DEFAULT (getdate()),
Primary key (Type_Id)
) ON [PRIMARY]
相关字段的含义为:
Type_Id 一级分类ID
Type_Name 一级分类名称
Type_text 一级分类描述
Type_Order 一级分类显示级别
Type_Check 一级分类显示校验
Type_time 一级分类录入时间
3.打开SQL Server2000的企业管理器,逐级展开【控制台根目录】->【Microsoft SQL Servers】->【SQL Server 组】->【样式生成器】->【(Local) (Windows NT)】->【数据库】

右键点击【数据库】节点,选择【新建数据库】,在弹出来的【数据库属性】->【常规】->【名称】中输入“wshop”,点击确定按钮新建一个名为wshop数据库。

再打开查询分析器,在弹出的【连接到 SQL Server】窗口中,输入SQL Server的登录名和密码,点击确定。

在工具栏中的数据库名称下拉列表中选择“wshop”,然后再下面的查询窗口中粘贴上面的SQL语句内容,点击工具条上的执行查询按钮,或者使用快捷键“F5”创建数据库表;

展开企业管理器【数据库】节点下的“wshop”数据库(如果在查询分析器中执行SQL语句后没有关闭并重新开启企业管理器,那么需要右建单击“wshop”数据库再弹出的菜单中选择【刷新】),然后选择下面的【表】节点,显示出数据中的所有数据表,一般的以“sys”开头的为系统表。
在企业管理器窗口右侧的列表中选择我们刚刚建立的“Goods_Type”表,单击右键,再弹出的菜单中选择【打开表】->【返回所有行】,在弹出的窗口中填入几行测试数据,然后退出。

填入的数据为:
1 图书 图书 0 1 2005-7-3 15:23:55
2 音乐 音乐 0 1 2005-7-3 15:24:05
3 影视 影视 0 1 2005-7-3 15:24:29
4 数码 数码 0 1 2005-7-3 15:24:31
5 日用 日用 0 1 2005-7-3 15:25:33
6 化妆品 化妆品 0 1 2005-7-3 15:25:38
7 服装 服装 0 0 2005-7-3 17:01:52
相关知识点:
数据库相关知识,以及如何使用SQL Server企业管理器,查询分析器请参见:数据库基础。
1.从【解决方案资源管理器】中双击“wshop”节点下的系统配置文件Web.config。
注意:
Web.config文件的设置非常关键,通常系统的常量和全局变量都可以放在这里,也可以把数据库连接字符串放在这里,该文件的设置也直接关系到系统是否能正常运行。这里我们简单的进行学习
web.config 文件是基于 XML 的文本文件,它可以包含标准的 XML 文档元素(包括格式正确的标记、注释、文本、cdata 等等)。该文件的编码格式可以为 ANSI、UTF-8 或 Unicode;系统自动检测编码。 web.config 文件的根元素总是 <configuration> 标记。它们内部嵌套的是<system.web>的开始标记和结束标记。表示期中的内容是.NET特有的配置信息,这些提供配置信息的标记就是元素。
详细请参见:认识web.config文件。
2.设置与应用相关的参数
在<configuration>节后面添加如下代码:
<appSettings>
<!--数据库连接串-->
<add key="strConn_debug" value="server=(local);database=wshop;uid=sa;pwd=1"/>
<add key="strConn" value="server=(local);database=wshop;uid=sa;pwd=1"/>
<add key="debug" value="true"/>
<add key="typename" value="网上商城"/>
<add key="typename1" value="我的商城"/>
</appSettings>
其中“strConn_debug”和“strConn”中的值用是用来存放连接数据库所使用的字符串,“server=(local);”表示使用的数据库服务器为本地服务器,如果使用其它机器上的数据库服务器可以将“(local)”值改为其它机器的IP地址(如:192.168.0.1)或者其它机器的计算机名(如:Server1);值“database=wshop;”表示将连接数据库“wshop”;值“uid=sa;”表示将登录数据库的用户名“sa”(sa为SQL Server的默认管理员用户,此处也可以使用我们建立的其它用户);值“pwd=1;”为数据库用户“sa”的密码(这里应该填写我们实际的数据库密码)。在我们开发应用时,我们将使用以上参数登录系统,“strConn_debug”和“strConn”中的值用来存放网站标题的全局变量。
3.设置自定义错误信息
<customErrors
mode="RemoteOnly"
/>
提示:
在系统自动生成的web.config文件代码中包含相应设置的注释,我们可以直接在代码中查看到类是于下面的注释。
<!-- 自定义错误信息
设置 customErrors mode="On" 或 "RemoteOnly" 以启用自定义错误信息,或设置为 "Off" 以禁用自定义错误信息。
为每个要处理的错误添加 <error> 标记。
"On" 始终显示自定义(友好的)信息。
"Off" 始终显示详细的 ASP.NET 错误信息。
"RemoteOnly" 只对不在本地 Web 服务器上运行的
用户显示自定义(友好的)信息。出于安全目的,建议使用此设置,以便
不向远程客户端显示应用程序的详细信息。
-->
对于web.config相应的设置我们可以逐步在学习的过程中进行理解,这里只要按照步骤直接进行设置就可以了。
类是一种引用类型,它封装数据和行为,并可以包含嵌套类型,其中数据包括常数和字段,行为包括方法、属性、索引器、事件、运算符、实例构造函数、静态构造函数和析构函数。类类型支持继承,这是派生类借以扩展和专用化基类的一种机制。详细请参见:类。
1.创建一个 Classes文件夹,把项目需要的类文件都放在这里, 创建文件夹的方法同前所述。
2.创建一个Base.cs文件,用于保存为项目编写的基本类的文件。
说明:
*.cs文件是C#程序脚本文件,存储我们编写的C#程序。
相关文件类型介绍请参见相关文件类型说明。
提示:
我们整个网络商店的开发用的ASP.net+C#技术,另外我们还需要了解HTML,CSS样式表,Javascript,数据库等相关技术,知识面广,而且有一定的深度,初次进行开发技术的学习是比较难的,但需要我们静下心来,一步一步地按照教程进行操作,完成整个开发过程,如果有不理解的地方我们可以先记下来,在后面的学习中逐步的去理解和体会。
可以右建点击【解决方案管理器】中的classes文件夹,选择【添加】->【添加类】,或者选择【添加】->【添加新项】并在模板中选择【类】选择项,默认的类名称为“class1.cs”,点击打开确认创建。然后在【解决方案管理器】中将其改名为base.cs。由于base为.net开发环境的保留关键字,所以在有些环境下创建时直接输入base.cs会提示错误。
3.在文件的开头默认使用using System引用了System命名空间,用using System.Web引用Web文件命名空间,用using System.Data,using System.Data.SqlClient来引用数据库类型和命名空间,用using System.Configuration引用字符串变量读写命名空间,这样我们可以直接引用其中的方法、类等。
相关知识点:
“ using System.Configuration; ”指令引用一个名为“System.Configuration”的命名空间,它由 Microsoft .NET Framework 类库定义。此命名空间包含“Base”中引用的“ConfigurationSettings”类。命名空间提供了一种分层方法来组织一个或多个程序中的各种元素。用“using”指令指定一个命名空间后,该命名空间中的所有成员均可直接被引用。所以,在“Base.cs”程序中,可直接使用“ConfigurationSettings.AppSettings”(而不必使用 “System.Configuration.ConfigurationSettings.AppSettings”)。
参见:使用using指令引用命名空间。
4.新建Base类,类和命名空间的声明都是以“{”开头以“}”结尾。系统自动在base.cs中生成一个空的命名空间wshop.classes,由于我们的base.cs文件是改名而来的,所以在其中自动声明一个公共类public clase Class1,和一个构造函数public Class1(),我们可以将这两处Class1改为Base。
public class Base
{
}
相关知识点:
类和命名空间的声明都是以“{”开头以“}”结尾。
相关知识点:
C#编译器区分大小写,类、及其它成员的声明和引用需要使用大小写一致的名称,例如此处我们使用Base为类的名称,难么在其它地方引用的时候便不能用“base”或“BASE”来处理。
5.声明一个SqlCommand对象cmd和一个SqlConnection对象conn。
SqlCommand cmd;
SqlConnection conn;
相关知识点:
每一个C#的程序语句都要以“;”号结尾。
相关知识点:
SqlCommand类用于执行SQL语句或存储过程,而SqlConnection类用于数据库的连接,他的一个实例可以表示一个已建立的连接。详细请参见:SqlCommand类和SqlConnection类。
6.声明两个受保护的静态字符串变量strConn和IsDebug,并取web.config文件中AppSettings段中的应用设置debug的值赋给Isdebug。
protected static string strConn="";
protected static string IsDebug = ConfigurationSettings.AppSettings["debug"];
相关知识点:
string是一种字符串类型,表示一个 Unicode 字符的字符串。详细请参见:string类型,引用类型,C#类型。
相关知识点:
此处用到了ConfigurationSettings类的AppSettings属性。ConfigurationSettings类用于获取web.config中的相应设置。详细请参见:ConfigurationSettings类。
相关知识点:
protected关键字表示其所修饰的参数只可以在其派生的类中才能进行访问。详细请参见:protected关键字。
static修饰符声明属于类型本身而不是属于特定对象的静态成员。
7.为Base类编写代码。
if ( IsDebug == "true")
{
strConn=ConfigurationSettings.AppSettings["strConn_debug"];
}
else
{
strConn=ConfigurationSettings.AppSettings["strConn"];
}
conn = new SqlConnection(strConn);
cmd = new SqlCommand();
cmd.Connection = conn;
此段代码的含义是如果web.config文件的debug选项设置为true则取strConn_debug选项中的数据库连接参数值赋给strConn,否则取strconn选项中的数据库连接参数值赋给strConn。然后使用strConn值初始化SqlConnection类的一个实例conn。同时初始化一个SqlCommand类cmd,最后指明cmd实例是使用conn实例进行连接的。
相关知识点:
此处用到了if语句,ConfigurationSettings类的AppSettings方法,SqlConnection类,以及SqlCommand类的Connection方法。详细请参见:if语句,ConfigurationSettings类,SqlCommand类,SqlCommand.Connection,SqlConnection类。
8.声明一个方法Get_Goods_Type。
相关知识点:
方法是类的一个成员,用于执行相应的操作。详细请参见:方法。
public DataTable Get_Goods_Type(int num)
{
cmd.CommandText = string.Format("select top {0} * from Goods_type where Type_Check = 1 order by Type_Order desc,Type_id",num);
SqlDataAdapter dad = new SqlDataAdapter(cmd);
DataSet dts = new DataSet();
DataTable dtb = new DataTable();
try
{
conn.Open();
dad.Fill(dts);
dtb = dts.Tables[0];
}
catch (Exception ex)
{
throw(ex) ;
}
finally
{
cmd.Dispose();
conn.Close();
}
return dtb;
}
该方法有一个int类型的参数num,该num值用于指定要取出的的商品一级分类的个数;该方法返回一个DataTable对象。
首先将用于读取取数据的SQL语句赋给SqlCommand的实例cmd的CommandText属性,也就是说cmd实例要执行这个指定的SQL语句。该SQL语句的内容是“select top {0} * from Goods_type where Type_Check = 1 order by Type_Order desc,Type_id;”这中间的{0}由实际的num值来替换,string.format就是用来完成这种替换的方法。例如:调用Get_Goods_Type(7)方法时,我们指定num值为7,相应的SQL语句就是“select top 7 * from Goods_type where Type_Check = 1 order by Type_Order desc,Type_id;”。这个SQL语句的意思是我们从数据库的Goods_type表中取满足Type_Check = 1的数据的全部列的内容,按照Type_Order逆序,Type_id顺序排列,并且仅返回前7行数值。
在将SQL语句赋值给cmd对象后,需要声明一个SqlDataAdapter类的实例dad用于实现连接数据库并得到返回值,dad使用cmd实例设定的连接参数连接数据库,并执行cmd实例设定的SQL语句。然后我们声明一个DataSet类的实例dts和一个DataTable的实例dtb,dts用于存储SqlDataAdapter实例dad返回的的数据库执行的结果,由于SqlDataAdapter实例存储的数据表的集合和表间关系的集合,类似于一个数据库,而DataTable实例用来存储其中的一个表的实际数据,以便于我们直接从其中取数应用。
在下面的程序中用到了try-catch异常处理语句。
相关知识点:
try-catch语句捕捉try子句中程序执行时可能发生的错误,在catch子句中判断相应的错误类型,执行相应的操作,使用throw语句发出相应的错误信号,并在程序执行后执行finally子句中的语句。
按照顺序,在初始化DataTable实例后执行try子句中的语句,首先使用SqlConnection的实例的Open方法,按照strConn设定的连接参数连接数据库,然后用SqlDataAdapter的Fill方法刷新检索数据,并将数据存储到DataSet的实例dts中去,dtb = dts.Table[0]语句将DataSet中的第一个表和其中的数据取出放到DataTable的实例dtb中。在执行过程中如果发生异常,就搜索catch语句,匹配错误,这里我们只设置了一个cacth子句,其中用Exception ex声明了一个Exception类的实例,Exception类是所有错误的父类,也就是说我们这里的catch子句捕获所有类型的错误并使用throw方法发错错误信号,不管是否发生异常,最后都执行到finally子句,这里使用Dispose方法释放cmd实例占用的系统资源,使用Close方法断开实例conn与数据库的连接。
最后,在程序的结尾返回我们取出的数据表DataTable实例dtb。
相关知识点:
这里我们用到了方法的声明,请参见:方法。
相关知识点:
这里还用到了SqlDataAdapter、DataSet和DataTable三个类。SqlDataAdapter类在DataSet和SQL Server之间起到了桥梁的作用。SqlDataAdapter类可以用给定的SQL语句或SqlCommand实例代表的存储过程创建数据据集,根据数据集的内容更新后端SQL Server数据库,或者向SQL Server数据库插入行或从中删除行。它可以用来向DataSet对象填充数据,并把对DataSet对象中的数据的改变反映到实际数据库中进行更新。DataSet类有一个重要的特点,就是它只知道得到的数据是什么,但是不知道关于数据源的任何其他信息。在DataSet对象中可以包含数量的DataTable对象,且每个DataTable对象对应一个数据库的数据表或视图。一般来说,一个对应DataTable对象的数据表就是一堆数据行与列的集合。DataTable对象负责维护每一笔数据行,保留它的初始状态和当前状态。详细请参见:SqlDataAdapter类,DataSet类和DataTable类。
9.完整的代码
using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace wshop.classes
{
/// <summary>
/// Base 的摘要说明。
/// </summary>
public class Base
{
/// <summary>
/// 公共类
/// </summary>
#region 初始化
SqlCommand cmd;
SqlConnection conn;
protected static string strConn="";
protected static string IsDebug = ConfigurationSettings.AppSettings["debug"];
public Base()
{
if ( IsDebug == "true")
{
strConn=ConfigurationSettings.AppSettings["strConn_debug"];
}
else
{
strConn=ConfigurationSettings.AppSettings["strConn"];
}
conn = new SqlConnection(strConn);
cmd = new SqlCommand();
cmd.Connection = conn;
}
#endregion
/// <summary>
/// 取商品一级分类
/// </summary>
#region
public DataTable Get_Goods_Type(int num)
{
cmd.CommandText = string.Format("select top {0} * from Goods_type where Type_Check = 1 order by Type_Order desc,Type_id",num);
SqlDataAdapter dad = new SqlDataAdapter(cmd);
DataSet dts = new DataSet();
DataTable dtb = new DataTable();
try
{
conn.Open();
dad.Fill(dts);
dtb = dts.Tables[0];
}
catch (Exception ex)
{
throw(ex) ;
}
finally
{
cmd.Dispose();
conn.Close();
}
return dtb;
}
#endregion
}
}
相关知识点:
#region和#endregion是一对指令符,用于在使用 Visual Studio 代码编辑器的大纲显示功能时指定可展开或折叠的代码块。格式是:
#region name
......
#endregion
name 是在折叠代码块时我们希望显示在文档中的注释内容。
我们可以点击代码块前面的 + 或 - 标记来展开或折叠代块。
相关知识点:
*.aspx文件是用户控件文件,详细请参见:相关文件类型说明。
1.考虑到商品的分类可以动态生成,因此选择建立一个用户控件Top.ascx.。
在解决方案资源管理器中选择wshop项目,单击鼠标右键在快捷菜单中选择【添加】项,在子菜单中选择【添加Web用户控件】项,系统打开如图所示窗口。要确认【模板】中选择【Web用户控件】项,在名称栏中输入控件名称top.ascx,点击打开。


2.设置top.ascx所引用的样式表。
双击【解决方案资源管理器】中,wshop项目下面的top.ascx,切换到top.ascx页面,要确认保持在“设计”视图状态(注意要保证在“设计”视图状态下),从【解决方案资源管理器】中展开inc文件夹,拖动css.css文件到设计窗口中,这时候会自动生成如下的HTML代码:
<LINK href="inc/css.css" type="text/css" rel="stylesheet">
或者我们可以从设计视窗切换到HTML编辑视窗,在系统默认生成的代码下面输入上面一段代码。

相关知识点:
这里我们用到了前面我们所建立的样式表文件,详细请参见:CSS样式表基础。
3.在Top.ascx上插入一个表格。
在解决方案资源管理中选中Top.ascx,打开设计页面,选择菜单栏(【表】->【插入】->【表】),在弹出的窗口定义表的属性和单元格的属性。我们定义插入表的行数为2,列为1列,【表属性】中的宽度778像素,背景色为#ffffff(白色),对齐方式为center,边框大小为0,单元格间距为0,单元格填充为0,然后点击【确定】按钮。

小窍门:
由于目前大多数用户采用的显示器分辨率模式为800*600和1024*768两种模式(第二种居多)或者更高,所以在网页设计的时候我我们一般都已支持800*600显示格式为标准,这样的话,我们常常要将内容宽度设计的略微小一些,也就是我们常用的778像素,我们可以打开象新浪、网易这样的常用网站看一看,基本上采用的都是这种标准。
将光标焦点设置到该表的第一行,.net开发环境中右下角的属性一栏中我们可以看到下拉列表显示为<TD>(列标记:表示一个表中某一行的某一列),这时,我们可以设置该<TD>的属性,align=center(水平对齐),valign=top(垂直对其),width=788(宽度),height=81(高度)。这里的align和valign设置可以从下拉列表中选择。

设置第二行的<TD>的属性,width=778,height=25,background="images/title.gif"(背景图片),图片可以点击选择按钮从目录中选择。
相关知识点:
此处页面的设计涉及到HTML语言相关的知识点,请参见:HTML语言基础中Table表格的相关部分。
4.在表格的第一行中再插入一张表,并设置单元格的背景图片。
方法第3步介绍,插入的行数为1,列为4,宽度778像素,对齐方式为center,边框大小为0,单元格间距为0,单元格填充为0。然后选择该表中的第一个单元格(第一行,第一列),在右下角的单元格设置width=173,height=81,background= "images/index_01.jpg",选中第二个单元格设置width=218,height=81,background= "images/index_02.jpg",第三个单元格,width=195,height=81,background= "images/index_03.jpg",第四个单元格width=192,height=81,background= "images/index_04.jpg"。
小窍门:
此例中本来使用的4个图片是由一张图片裁成的,由于目前网络速度的限制,所以将一个大的图片分开,将有例于提高网页中图片的显示速度。
同时,我们这种方法是将图片设为表格的背景,我们也可以使用直接向表格中插入图片的方式实现同样的前台显示效果,具体方法是从【解决方案资源管理器】中展开images文件夹,拖动相应的图片文件到表格的相应位置中。
5.在我们建立的第一个Table(也就是第3步中介绍的Table)的第二行插入一个表格为1行3列,【表属性】中的宽度778像素,高度为25像素,对齐方式为center,边框大小为0,单元格间距为0,单元格填充为0,然后点击【确定】按钮。
将第一个单元格(1行1列)和第二个单元格(1行2列)的属性设置为vAlign="bottom",align="center",width="90",background="images/botton_off.gif"。 height="25"。
在第一个单元格中插入一个HyperLink控件,方法是展开【工具箱】,中的【Web窗体】栏,选中【HyperLink】拖动到第一个单元格中,

然后再属性页中设置其NavigateUrl属性为default.aspx(可以通过选择文件来进行设置,表示点击该链接跳转到default.aspx默认页面),设置其Target属性为“_self”表示(在当前页面窗口内打开目标页面),将其的Text属性设为“返回首页”,这时候我们切换到HTML编辑视窗,我们会看到如下代码:
<asp:HyperLink id="HyperLink1" runat="server" NavigateUrl="default.aspx" Target="_self">返回首页</asp:HyperLink>
另外一种建立返回首页连接的方法是使用HTML语法中的连接方法,代码如下:
<a href='default.aspx' target='_self'>返回首页</a>
相关知识点:
在HTML语句中用<a href='*.*' target='*'>...</a>使用来表示一个超级链接,target选项表示打开文件的方式,常用的有_self(在当前页面内打开),_blank(在新的浏览器窗口中打开)。请参见:HTML语言基础。
这两种方式的区别是,第一种方式在服务器端解释该HyperLink控件,最后发送给客户端的实际脚本,第二种方法则不需要服务器进行解析,直接发送个客户端,无论采用哪种方式,最后客户端看到的效果和源码脚本是一样的。
小窍门:
在一个打开的网页中,多数情况下,我们都可以使用鼠标右键点击,在弹出的菜单中选择查看源文件,在弹出的窗口中我们看到的就是最终的客户端的HTML脚本。
另外在进行开发时,我们不一定要在.net环境中进行Web页面的设计,我们可以使用其他如Frontpage,Dreamweaver等页面设计工具进行aspx文件页面的设计,当然我们也可以直接使用美工等其他人员制作好的网页直接进行开发,这样有利于发挥各自特长、分工协作。在我们的例子中就是采用设计好的页面进行程序的设计的。
在第二个表格的位置插入一个Repeater控件。展开【工具箱】,中的【Web窗体】栏,选中【Repeater】拖动到第二个单元格中,我们使用这个Repeater的目的是,根据我们从数据库检索出来的商品分类,动态的生成商品类别标签。我们在属性页中设置(ID)为“Goods_type”。切换到HTML编辑视图,由于我们这个Repeater需要重复的是分类标签,所以我们将第二列的<TD>...</TD>的代码放到Repeater标记中间。如下是该部分代码:
<TABLE border=0 width=778 height=25 CELLPADDING=0 CELLSPACING=0 align='center'>
<TR>
<TD width=90 height=25 background= "images/botton_off.gif" align='center' valign='bottom'><a href='default.aspx' target='_self'>返回首页</a></TD>
<asp:repeater id="Goods_Type" runat="server">
<ItemTemplate>
<TD width=90 height=25 background= 'images/botton_off.gif' align='center' valign='bottom'>
<a href='<%# "ShowType.aspx?Type_Id=" + DataBinder.Eval(Container.DataItem,"Type_Id")%>'><STRONG><%# DataBinder.Eval(Container.DataItem,"Type_Name")%></STRONG></a>
</TD>
</ItemTemplate>
</asp:repeater>
<TD width="<%=688-Goods_Type_num*90%>" height="25"> </TD>
</TR>
</TABLE>
相关知识点:
使用<ItemTemplate>...</ItemTemplate>标签来表示针对每一个取出的数据都重复一次之间的内容,有关repeater空间的使用语法参见:repeater控件。
使用Repeater进行重复的部分是根据从数据库中读出的商品分类,生成指向该商品分类处理页面的超级链接。
相关知识点:
在页面代码中,我们使用<%...%>来表示相应的.net程序代码,如果包含数据绑定应使用<%#...%>。
其中:
DataBinder.Eval(Container.DataItem,"Type_Id")
表示从Repeater所绑定的数据源中按顺序取出Type_id所对应的值。同理,
DataBinder.Eval(Container.DataItem,"Type_Name")
表示从Repeater所绑定的数据源中按顺序取出Type_Name字段所对应的值。
相关知识点:
这里的Container指向的是Web页面中的列表控件Repeater,后面使用Type_Name或Type_Id指定数据存储的位置,详细请参见:DataBinder.Eval方法。
这样一来如果根据Type_ID=1,Type_Name="图书"和Type_Id=2,Type_Name="音乐"生成的实际代码就应该为:
<TD width=90 height=25 background= 'images/botton_off.gif' align='center' valign='bottom'>
<a href='ShowType.aspx?Type_Id=1'><STRONG>图书</STRONG></a>
</TD>
<TD width=90 height=25 background= 'images/botton_off.gif' align='center' valign='bottom'>
<a href='ShowType.aspx?Type_Id=2'><STRONG>音乐</STRONG></a>
</TD>
相关知识点:
这里的链接ShowType.aspx?Type_Id=1是一种在页面间传递参数的方式,表示访问的目标页面为ShowType.aspx并传递一个Type_Id=1的参数,在ShowType.aspx页面里可以获取相应的参数并进行处理。
6.设置最后一个单元格的宽度。
我们可能根据不同的实际情况显示多个商品类别,也就是Repeater重复的次数不能够确定,那么我们最后一列的宽度也就无法确定。这里我们使用:
<TD width="<%=688-Goods_Type_num*90%>" height="25"> </TD>
来进行这个列的宽度设置。688是总宽度788减去一个“返回首页”连接的宽度90得来的,而Goods_Type_num是商品类别的个数(在top.ascx.cs后台代码中声明的)。
全部的页面代码:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="Top.ascx.cs" Inherits="wshop.Top" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<link rel="stylesheet" href="inc/css.css" type="text/css">
<TABLE border=0 width='778'bgcolor="#ffffff" align='center' CELLPADDING=0 CELLSPACING=0>
<TR>
<TD width='778' height='81' valign='top' align='center'>
<TABLE border=0 width=778 height=81 CELLPADDING=0 CELLSPACING=0 align='center'>
<TR>
<TD width=173 height=81 background= "images/index_01.jpg"></TD>
<TD width=218 height=81 background= "images/index_02.jpg"></TD>
<TD width=195 height=81 background= "images/index_03.jpg"></TD>
<TD width=192 height=81 background= "images/index_04.jpg"></TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD width=778 height=25 background="images/title.gif">
<TABLE border=0 width=778 height=25 CELLPADDING=0 CELLSPACING=0 align='center'>
<TR>
<TD width=90 height=25 background= "images/botton_off.gif" align='center' valign='bottom'><a href='default.aspx' target='_self'>返回首页</a></TD>
<asp:repeater id="Goods_Type" runat="server">
<ItemTemplate>
<TD width=90 height=25 background= 'images/botton_off.gif' align='center' valign='bottom'>
<a href='<%# "ShowType.aspx?Type_Id=" + DataBinder.Eval(Container.DataItem,"Type_Id")%>'><STRONG><%# DataBinder.Eval(Container.DataItem,"Type_Name")%></STRONG></a>
</TD>
</ItemTemplate>
</asp:repeater>
<TD width="<%=688-Goods_Type_num*90%>" height="25"> </TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
1.引用命名空间。
双击top.ascx设计视图中双击Web窗体,弹出相应的代码文件,系统会自动生成一些默认的命名空间的引用。这里我们使用
using wshop.classes;
引用前面我们声明的Base类所在的命名空间。
2.声明引用的对象及属性变量。
Base Base = new Base();
protected System.Web.UI.WebControls.Repeater Goods_Type;
protected int Goods_Type_num=0;
Base是声明的一个Base类的实例,而Goods_Type这个Repeater的声明则是系统自动生成的,另外我们还申明了一个Goods_Type_num属性,该属性用于保存记录返回的商品类别数量。
3.声明一个Bind_Goods_Type方法。
private void Bind_Goods_Type(int num)
{
Goods_Type.DataSource = Base.Get_Goods_Type(num);
Goods_Type.DataBind();
Goods_Type_num = Goods_Type.Items.Count;
}
该方法有一个int型的参数,并且没有返回值。中首先调用Base类的Get_Goods_Type()方法,并将其返回的数据集(还记得么,前面的Get_Goods_Type的声明中返回的是DataTable实例)指定为Goods_Type的数据源,然后使用DataBind方法将其与数据源绑定,最后使用Goods_Type.Items.Count获取RepeaterItem中项目的数。
相关知识点:
void
Goods_Type.Items返回一个RepeaterItemCollection对象,通过访问其Count属性我们何以获取其中的DataListItem对象数。请参见:RepeaterItemCollection类。
相关知识点:
这里用到了Repeater类的DataSource属性与DataBind方法,详细请参见:Repeater类。
Goods_Type.Items返回一个RepeaterItemCollection对象,通过访问其Count属性我们何以获取其中的DataListItem对象数。请参见:RepeaterItemCollection类。
4.在系统自动生成的Page_Load事件里调用Bind_Type_Type()方法。
private void Page_Load(object sender, System.EventArgs e)
{
Bind_Goods_Type(7);
// 在此处放置用户代码以初始化页面
}
这里的Bind_Goods_Type(7)中的参数7表示最多显示7个商品分类。
1.样式表文件引用。双击【解决方案资源管理器】中的default.aspx打开该文件,切换到设计视图,从【解决方案资源管理器】中的“inc”文件夹下拖动css.css文件到设计视图,完成样式表文件的引用。
2.插入表格。选择菜单栏(【表】->【插入】->【表】)向default.aspx中插入一个3行1列的表格,中的宽度778像素,背景色为#ffffff(白色),对齐方式为center,边框大小为0,单元格间距为0,单元格填充为0。具体方法请参见:创建top.ascx用户控件中相关部分的讲述。
3.选中在第一个单元格(第一行),属性一栏中将其宽度设为778,高度设置为106。同样将第二个单元格(第二行)的宽度设为778,高度设置为500,将第三个单元格(第三行)的宽度设为778,高度设置为106。
4.将top.ascx控件放置到default.aspx中。从【解决方案资源管理器】拖动top.ascx到第一个单元格中,完成添加。

这时候我们可以执行一下我问之前所编辑的内容,看一下我们开发的成果。
相关知识点:
进行调试可以通过点击菜单中的【调试】->【启动】,或者直接点击工具条中的【启动】按钮,或者按下“F5”快捷键。
-工具条中的【启动】按钮。
提示:
由于这是我们第一次进行.net编程,所以在我们执行程序时难免会出现一些错误,.net开发环境提供了相应的编译错误提示,这里我们主要注意每个语句后面“;”号不要忘记,同时类、属性、名称的大小写要注意。另外就是查看每个HTML起始标记是否都跟着对应的结束标记。
在我们仍然查不出错误所在的时候,我们不要急,可以查看错误所在的页面,然后将我们的标准的源代码拷贝替换你写的代码,在执行通过后,逐一核对错误所在。
5.编辑default.aspx的后台程序,调用应用变量。我们双击default.aspx设计视图的空白处,再弹出的default.aspx.cs页面中的default类声明处填写代码:
public class _default : System.Web.UI.Page
{
protected string typename = ConfigurationSettings.AppSettings["typename"];
protected string typename1 = ConfigurationSettings.AppSettings["typename1"];
......
}
这里声明了两个字符类型的属性typename和typename1分别存储应用名称,并取web.config设置中的AppSettings段中的typename和typename1的设置分别赋给他们。请参见:创建基本类文件中的第6节的描述。
6.在default.aspx中调用typename和typename1作为页面的标题。切换到default.aspx页面的HTML视图,在<title></title>中间填写代码如下:
<title><%=typename%>--<%=typename1%></title>
我们typename的值为“网上商城”,typename1的值为我的商城,所以再次运行应用我们会发现,首页的标题为“网上商城--我的商城”。
7.在第三个单元格中引用CopyRight.htm。本例提供的CopyRight.htm文件存在于resource压缩包中,下载该压缩包后解压缩到指定目录,在"resource/htm/"目录下。首先从【解决方案资源管理器】中选择wshop项目,在右键弹出的菜单中选择【添加】->【添加现有项】,在打开的窗口中选择文件类型为“公共 Web 文件”,选择resource/htm/下的CopyRight.htm文件后单击【打开】按钮。然后切换到default.aspx的HTML视图,在第<Table></Table>中的第三组<TR><TD> ...</TD></TR>标签中填入<!--#include file="CopyRight.htm" -->,代码如下:
<TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" cellSpacing="0"
cellPadding="0" width="778" align="center" bgColor="#ffffff" border="0">
<TR>
<TD width="778" height="106">
<uc1:top id="Top1" runat="server"></uc1:top></TD>
</TR>
<TR>
<TD width="778" height="500"></TD>
</TR>
<TR>
<TD width="778" height="106"><!--#include file="CopyRight.htm" --></TD>
</TR>
</TABLE>
提示:
由于我们是采用在.net环境下进行的页面设计,而我们提供的源代码是,所以我们进行操作时看到的代码会与本例所提供的源代码有些出入,例如:在源代码中可能不会存在上面的<TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px"这一部分,但最终的实际效果是一样的。
CopyRigth.htm的具体制作方法属于网页设计范畴,关于其中的HTML语法,这里我们就不进行详细的介绍,您可以参看HTML语言基础部分,具体制作页面的工具可以使用FrontPage或者DreamWeaver等工具,也可以在.net开发环境中进行,如果关于页面制作的疑问较多,请联系我们北京京胜世纪科技有限公司,我们会在后续的版本中安排相应的教学内容。
一个商业网站往往需要对其网站的内容、服务等进行相关的帮助性的描述,所以这里我们需要一个Other_text.aspx文件来完成此功能。Other_text.aspx文件的制作与Default.aspx文件的制作类似,大家可以参照对default.aspx进行编辑一步自己进行操作:
1.引用样式表文件。
2.插入一个3行1列的表格。
3.将top.ascx控件放置到default.aspx中表的第一个单元格。
4.编辑Other_text.aspx的后台程序,调用应用变量typename和typename1并在Other_text.aspx的<title></title>中应用。
5.在第三个单元格中引用CopyRight.htm。
6.在第二个单元各种编辑想要显示的具体帮助内容。下面是在插在第二个单元格<TR><TD>...</TD></TR>标签中的代码:
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0 ID="Table3">
<TBODY>
<TR>
<TD width=750>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0 ID="Table4">
<TBODY>
<TR>
<TD vAlign=top height=22>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0 ID="Table5">
<TBODY>
<TR>
<TD background=images/help.gif height=26>
用户帮助
</TD>
</TR>
</TBODY>
</TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0 ID="Table6">
<TBODY>
<TR>
<TD width="12%" height=20> <IMG height=13 src="images/arrow.gif" width=10></TD>
<TD width="88%"> <A href="Other_text.aspx#1">关于支付</A></TD></TR>
<TR>
<TD height=20> <IMG height=13 src="images/arrow.gif"
width=10></TD>
<TD height=20> <A href="Other_text.aspx#2">售后服务</A></TD></TR>
<TR>
<TD height=20> <IMG height=13 src="images/arrow.gif"
width=10></TD>
<TD> <A href="Other_text.aspx#3">关于配送</A></TD></TR></TBODY></TABLE></TD>
<TD width=1 bgColor=#cccccc></TD>
<TD width=18></TD>
<TD vAlign=top width=584>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0 ID="Table7">
<TBODY>
<TR>
<TD>
<P style="LINE-HEIGHT: 150%"><A name=1></A><STRONG><FONT
size=4>关 于 支 付</FONT></STRONG><BR><BR>目前我们开通了以下几种方式可供选择:
<BR><FONT color=#ff6600><STRONG><A name=4></A>1、
货到付款</STRONG></FONT><BR>我们委派的快递公司把您在网上商城上购买的商品送至您指定的地点时,由收货人当时支付货款和运费。<BR><STRONG><FONT
color=#ff6600><A name=5></A>2、
邮局汇款</FONT></STRONG><BR>范围:网上商城商城不能支持货到付款地区的顾客可以选择此方式支付。
<BR>汇款地址:北京市XXX路XX号XX大厦XX楼 网上商城 收
<BR>邮政编码:100008<BR>注意事项:为了在收到您的汇款单时可以准确及时地处理您的订单,请详细填写您的汇款地址并在汇款人简短留言处注明您的订单号。
<BR>
<br><A name=2></A><STRONG><FONT size=4>售 后 服 务</FONT></STRONG><BR><BR><FONT color=#ff6600><STRONG><A
name=7></A>1、退换货方式</STRONG></FONT><BR> 如产品出现质量问题,在网上商城承诺的期限内(退货7天,换货3周,以客户签收日为准),我们将免费为您办理。<BR>1)、网上商城保证货物发出时外包装的完好无缺。为了保证您的利益,如商城任意产品在配送过程中产生脏残破损、与您购买或期望的不一致等情况,请您务必当场拒收,或者要求邮局出示证明,向邮局索赔。
<BR>2)、我们只提供一次免费上门退换货服务。如果一张订单有多种货物,请您在看完全部货物后在有效的时间内再与我们联系,并请备好产品以及发货单以备检验。如果一张订单所订物品较多,全部看完后可能超过期限,请发现问题后在退换货期限内与我们联系,我们会记录您的来电日期,待您全部看完产品后与我们再次联系,一次更换。<BR>3)、对于选择送货上门的用户,请在我们承诺的期限内,打电话到客服中心XXXXXXXX-728确认登记,在登记后的三个工作日内为您安排免费换货.退款的上门服务。退换货需要由我方专业人员检测确认后办理上门换货或退款。<BR>4)、如果经过一次更换的商品还存在质量问题,可以办理退货或再次换货。<BR>5)对于选择平邮的客户,请将要求退、换的货物通过平邮方式发送至网上商城(如果该订单开过发票,请同时附上发票),并附发货单(或其复印件)说明退/换货原因,我公司在收到货物后,会为您办理行退换货。
6)、退货的金额为商品的购买时的金额,不包含配送费。 <BR><FONT
color=#ff6600><STRONG><BR><A
name=8></A>2、退换货原则:</STRONG></FONT>
<BR>1)、图书有印装质量问题,包括缺页、倒装、模糊不清、折页、开线、开胶等情况;<BR>2)、影视或音乐类产品请您用专门的DVD\VCD\CD机播放相应格式的碟片,我们不保证由于在电脑上使用所产生的不良效果而造成的所谓"质量问题"。如果用计算机播放DVD\VCD出现马赛克、不读盘或者声道问题,CD碟片播放是音质不好等问题.有可能是播放软件与您的系统设置冲突,或者本身设备特点或条件不能满足相应要求.请您更换用专门的机器播放确认是质量问题后再与我们联系.如果您订购的产品中个别光盘有问题,请您将有问题光盘的盘数记住,如果配送人员换货时为您送去的是整套产品,在包装完整、碟数一致确认,碟片没有划痕的前提下请您将有问题的光盘换走。<BR>3)、礼品类产品请顾客仔细阅读产品页面描述,网上商城保证产品质量,无质量问题,一律不予退换。因页面上产品的图片为扫描或拍照制成,如发生实物与网页介绍稍有不符,请以实物为准。恕不受理因客户本人的喜好(气味,色泽、型号,外观)产生的退换货。<BR>4)、网上商城产品附带的赠品,请当面验收,一经签收概不退换。
如签收后发生短缺将不再补发,如发生退货,退回主产品的同时,请将赠品一并退回。<BR><STRONG><FONT
color=#ff6600><BR>3、网上商城有权拒绝以下情况下的客户退换货要求:<BR></FONT></STRONG>1)、送货上门客户由于配送错误产生的退换货要求。请您在收到货物时,仔细按照送货单检查验收商品,商品短少、缺失、脏污、破损,请当场验收指出,免费重新配送,过后不予受理。<BR>2)、超过退换货期限的退换货要求。退货1周之内,换货3周之内(以客户签收日期为准)。<BR>3)、退换货物不全或者包装受损。<BR>4)、客户发货单丢失或者不全。<BR>5)、由于客户自身原因(比如说订购前未看清内容简介、重复订单等)产生的货。<BR>6)、客户要求将货物更换成其它商品。<BR>7)、因为产品更换包装,与页面显示的包装不相符,但内容并不改变的商品不予退换.<BR>8)、产品并非由网上商商城提供。<BR><BR><BR><A
name=3></A><STRONG><FONT size=4>关 于 配
送</FONT></STRONG><BR><BR><STRONG><FONT color=#ff6600><A
name=9></A>1.配送范围:</FONT></STRONG><BR>四换以内免费送货上门
<BR><FONT
color=#ff6600>注:若您所需配送的地址超过网上商城的配送范围,我们会通过快递或者邮寄服务尽量快捷的为您送到,但您需负担一定金额的配送费用。</FONT><BR><STRONG><FONT
color=#ff6600><BR><A name=10></A>2.
配送时效:</FONT></STRONG><BR> 网上商城在收到订单后会及时与您联系,确认订单有效性,之后会根
据您所下订单的时间, 在次日内送到您的指定地点,若您有特别需要请在订单的备注栏中写明,我们将尽量安照您的要求为您服务。
<BR><FONT
color=#ff6600>注:请你在购物时尽可能留下能及时与您联系的随身电话,方便我们与您联系。</FONT><BR><FONT
color=#ff6600><STRONG><BR><A name=11></A>3. 配送费用:</STRONG></FONT>
<BR> 对市区的用户,商品订单金额在50元以上(含),网上商城将免费配送,50元以下的订
单我们将收取5元每订单的配送费用,其它地区用户需 要自行负担邮寄或快递的配送费用。<BR><STRONG><FONT
color=#ff6600><BR><FONT color=#000000 size=4>其他购物方式</FONT></FONT></STRONG><BR><STRONG><FONT
color=#ff6600><BR><A name=13></A>传真</FONT></STRONG><STRONG><FONT
color=#ff6600>订购</FONT></STRONG><BR>您可以将您要购买的商品名称、数量、您的联系电话,以及您选择的送货方式,传真至010-XXXXXXXX。您也可以填写我们的订货单后,传真给我们,此处下载
<A href="fax.doc"><FONT
color=#ff6600><STRONG>传真表格</STRONG></FONT></A>。<BR><STRONG><FONT
color=#ff6600><A name=14></A>电话订购</FONT></STRONG><BR>网上商城现已开通电话定购业务,您可以拨打我们的定购电话010-XXXXXXXX-008(普通市话费),将您想要定购的商品名称.数量等告诉我们,我们的客服工作人员会为您代下订单!<br>我们的电话定购时间:周一到周五,每天09:00-17:30。<STRONG></STRONG><FONT
size=4><STRONG><BR><BR>投诉与建议</STRONG></FONT><BR><STRONG><FONT
color=#ff6600><BR><A name=12></A>消费投诉</FONT></STRONG><BR>若您对网上商城的产品或服务方面的有任何不满,请您在此
<A href="#"><FONT color=#ff6600><STRONG>投诉</STRONG></FONT></A>,我们会尽快和您联系,帮助您解决问题,<BR><STRONG><FONT
color=#ff6600><A name=13></A>意见建议</FONT></STRONG><BR>若您对网上商城有任何意见或建义,发E-MAIL至:<A
href="mailto:xxxx@mail.cn"><FONT
color=#ff6600><STRONG>xxxx@mail.cn</STRONG></FONT></A>,来信中请您留下您的联系方式,您所提供的任何有价值的意见或建议网上商城一经采纳即有精美的奖品送给您!<BR><STRONG><FONT
color=#ff6600
size=2><BR>网上商城拥有对本条款的最终解释权。</FONT></STRONG><BR><BR></P></TD></TR></TBODY></TABLE></TD></TR>
</TBODY></TABLE>
</TD></TR>
</TBODY>
</TABLE>
也可以直接使用我们提供的Other_text.aspx文件,该文件存在于resource压缩包中,下载该压缩包后解压缩到指定目录,在"resource/htm/"目录下。从【解决方案资源管理器】中选择wshop项目,在右键弹出的菜单中选择【添加】->【添加现有项】,在打开的窗口中选择文件类型为“公共 Web 文件”,选择resource/htm/下的Other_text.aspx文件后单击【打开】按钮,在"resource/htm/"目录下还包含其程序文件Other_text.aspx.cs在我们添加Other_text.aspx文件后,该文件会自动加载。

这一章里我们详细介绍了一个基于C#的.net Web应用项目的建立,以及数据连接、读取,类的编写,Web用户控件的建立和使用等相关的知识。完成了这些,大家是否有些成就感了呢?由于Web应用的开发需要涉及的基础知识比较广,所以大家在学习时不要急于求成,跟着我们的课程一步步地去做,大家会逐步掌握.net开发知识的。