1、应用程序数据访问项目四项目四 使用使用ADO.NETADO.NET实现数据访问实现数据访问2/*我的想法我的想法,我的我的CODE*/主要内容任务1 用户身份验证任务2 商品信息查询任务3 商品信息管理任务4 购物车的实现应用程序数据访问任务任务1 1 用户身份验证用户身份验证4/*我的想法我的想法,我的我的CODE*/任务场景在B2C的电子商务网站中,用户身份验证通常应用在前台会员登录和后台管理登录。在前台只有登录成功的会员才能够购买商品、发表留言和评论;在后台只有具有合法身份的管理员才能够登录系统进行商品维护、会员维护及系统维护等操作。本任务使用ADO.NET组件中的Connection对
2、象、Command对象和DataReader对象,轻松实现应用程序连接数据库,实现后台管理的身份验证。5/*我的想法我的想法,我的我的CODE*/ADO.NET数据访问技术ADO.NET组成使用ADO.NET访问数据使用Connection对象连接数据库编写代码创建数据库连接使用Web.Config文件定义数据连接字符串连接 式数据访问模式操作数据库Command对象使用Command对象操作数据DataReader对象读取器知识要点6/*我的想法我的想法,我的我的CODE*/4.1 ADO.NET数据访问技术一种将Microsoft.NET的Web应用程序以及Microsoft Window
3、s应用程序连接到诸如SQL Server数据库或XML文件等数据源的技术。专门为Internet无连接的工作环境而设计,它提供了一种简单而灵活的方法,便于开发人员把数据访问和数据处理集成到Web应用程序中。7/*我的想法我的想法,我的我的CODE*/ADO.NET组成ADO.NET包括两个核心组件:.NET Framework数据提供程序和DataSet数据集。数据提供程序数据提供程序用于连接到数据库、执行命令和检索结果。数据提供程序中包含的核心对象对 象说 明Connection建立与数据源的连接Command对数据源执行操作命令DataReader从数据源中读取只进且只读的数据流DataA
4、dapter使用Connection对象建立DataSet与数据提供程序之间的链接;并协调对DataSet中数据的更新4.1 ADO.NET数据访问技术8/*我的想法我的想法,我的我的CODE*/ADO.NET组成.NET Framework提供了5个数据提供程序:SQL Server.NET Framework数据提供程序OLE DB.NET Framework数据提供程序ODBC.NET Framework数据提供程序Oracle.NET Framework数据提供程序EntityClient4.1 ADO.NET数据访问技术9/*我的想法我的想法,我的我的CODE*/ADO.NET组成D
5、ataSet对象用于存储从数据源中收集的数据。处理存储在DataSet中的数据并不需要ASP.NET Web窗体与数据源保持连接,仅当数据源中的数据随着改变而被更新的时候,才会重新建立连接。与DataSet相关的对象对 象说 明DataSet数据在内存中的缓存DataTable内存中存放数据的表DataRowDataTable中的行DataColumnDataTable中的列4.1 ADO.NET数据访问技术10/*我的想法我的想法,我的我的CODE*/4.1.2 使用ADO.NET访问数据 ADO.NET提供了一组丰富的对象,用于对任何种类的数据存储的连接式或断开式访问。在连接式数据访问模式
6、连接式数据访问模式下,连接会在程序的整个生存周期中保持打开,而不需要对状态进行特殊处理。断开方式数据访问模式断开方式数据访问模式可以为应用程序提供良好的性能和伸缩性学习提示:学习提示:实际应用中,选择数据访问模式的基本原则是首先满足需求,然后考虑性能优化。11/*我的想法我的想法,我的我的CODE*/访问数据库的第一项工作就是和数据库建立连接,然后通过该连接向数据库发送命令并读取返回的数据,这些在ADO.NET中由Connection对象来实现。Connection对象使用Web.Config文件定义数据连接字符串4.2 使用Connection对象连接数据库12/*我的想法我的想法,我的我的
7、CODE*/Connection对象在.NET Framework中表示到数据库的连接类是System.Data.Common.DbConnection抽象类。对应不同的数据提供程序,从DbConnection派生了一组数据连接类分别是OleDBConnetion、OdbcConntion、OracleConnection、SqlConnection、EntityConnection,这些类的属性方法大致相同。ConnectionString属性包括。属 性 名 称默认值说 明Server/Data Source本地机器要连接的SQL Server实例的名称或网络地址。指定本地实例时,使用(l
8、ocal)Initial Catalog/Database 默认数据库数据库的名称 Trusted_Connection/Integrated Securityfalse 当为false时,将在连接中指定用户ID和密码。当为true时,将使用当前的Windows账户凭据进行身份验证。可识别的值为true、false、yes、no以及与true等效的sspi(强烈推荐)User ID SQL Server登录账户。为保持高安全级别,强烈建议用户使用Integrated Security或Trusted_Connection关键字 13/*我的想法我的想法,我的我的CODE*/属性名称默认值说 明
9、Password/Pwd SQL Server账户登录的密码。建议不要使用。为保持高安全级别,强烈建议使用Integrated Security或Trusted_Connection关键字Persist Security Info false 当该值设置为false或no(强烈推荐)时,如果连接是打开的或者一直处于打开状态,那么安全敏感信息(如密码)将不会作为连接的一部分返回。重置连接字符串将重置包括密码在内的所有连接字符串值。可识别的值为true、false、yes和no Connect Timeout/Connection Timeout 15 在终止尝试并产生错误之前,等待与服务器的连接
10、的时间长度(以秒为单位)Packet Size 8192 用来与SQL Server的实例进行通信的网络数据包的大小,以字节为单位PoolingFalse/True数据库连接池的数量ConnectionString属性14/*我的想法我的想法,我的我的CODE*/连接本地SQL Server的字符串连接远程SQL Server的连接字符串连接字符串SqlConnection conn=new SqlConnection(Server=(local);Database=SMDB;Integrated Security=SSPI;);SqlConnection conn1=new SqlConne
11、ction(Server=MyServer;Database=SMDB;Userid=lxh Password=1234;Connection Timeout=60;);15/*我的想法我的想法,我的我的CODE*/SqlConnection对象的主要方法方 法 名 称说 明Open该方法使用连接字符串中指定的连接详细信息打开连接Close该方法关闭当前处于打开状态的连接ChangeDatabase修改目前用于连接的数据库。只有在连接打开时才能使用该方法Dispose释放连接使用的所有资源16/*我的想法我的想法,我的我的CODE*/Connection对象的操作方法常规操作使用Using简化
12、操作01string str=Server=(local);Database=SMDB;Integrated Security=SSPI;02using(SqlConnection conn=new SqlConnection(str)0304 conn.Open();05 /此处使用数据库连接访问SMDB数据库0601 string str=Server=(local);Database=SMDB;Integrated Security=SSPI;02 SqlConnection conn=new SqlConnection(str);/创建新的连接对象03 conn.Open();/打开连
13、接04 /此处使用数据库连接访问SMDB数据库05 conn.Close();/关闭连接17/*我的想法我的想法,我的我的CODE*/使用Web.Config文件定义数据连接字符串为了便于程序移植,通常在web.config文件中定义连接字符串,而不是采用硬编码。设置ConnectionString节读取连接字符串0102 04string str=ConfigurationManager.ConnectionStringssmdbconn.ConnectionString;学习提示:学习提示:使用ConfigurationManager类时,需要导入命名空间System.Configurat
14、ion18/*我的想法我的想法,我的我的CODE*/实例讲解连接到SQL Server数据库配置web.config文件设计用户界面添加事件代码19/*我的想法我的想法,我的我的CODE*/4.3 连接式数据访问模式操作数据库连接好数据源后,就可以与数据库进行交互,最简单的方式就是直接操作数据库。Command对象实现对数据库执行T-SQL语句或存储过程Command对象的常用 属性属 性说 明CommandText获取或设置要对数据源执行的Transact-SQL语句、表名或存储过程 CommandTimeout获取或设置在终止执行命令的尝试并生成错误之前的等待时间 CommandType获
15、取或设置一个值,该值指示如何解释CommandText属性Connection获取或设置SqlCommand实例使用的SqlConnectionParameters获取或设置SqlParameterCollection参数集Transaction获取或设置在SqlCommand执行过程中的SqlTransaction20/*我的想法我的想法,我的我的CODE*/4.3 连接式数据访问模式操作数据库Command对象的常用 方法方 法 名 称说 明Cancel尝试取消SqlCommand的执行CreateParameter创建SqlParameter对象的新实例ExecuteNonQuery执行
16、T-SQL语句并返回受影响的行数ExecuteReader将CommandText发送到Connection并生成一个SqlDataReader,已重载ExecuteScalar执行查询,并返回查询所返回的结果集中第一行的第一列,忽略其他列或行21/*我的想法我的想法,我的我的CODE*/基本步骤打开到数据库连接。创建新的Command对象。定义T-SQL命令。执行T-SQL命令。关闭数据库连接。使用Command对象操作数据22/*我的想法我的想法,我的我的CODE*/案例探讨利用Command对象在SMDB数据库创建和删除表Test23/*我的想法我的想法,我的我的CODE*/案例探讨如何
17、统计SMDB数据库中注册会员的人数(Users表)?24/*我的想法我的想法,我的我的CODE*/参数化的好处在实际应用中,常常需要用户在页面上输入信息,并将这些信息插入到数据库中。只要允许用户输入数据,就有可能出现输入错误,并可能对Web应用程序创建和执行SQL代码产生致命的影响。为了解决这个问题,除了对输入控件进行检查之外,还可以在生成T-SQL命令时,不使用窗体变量而使用SQL参数来构造连接字符串。SQL参数不属于SQL查询的可执行脚本部分。由于错误或恶意的用户输入不会处理成可执行脚本,所以不会影响SQL查询的执行结果。参数化Command命令25/*我的想法我的想法,我的我的CODE*
18、/Parameters属性和SqlParameter对象要在ADO.NET对象模型中使用SQL参数,需要向Command对象的Parameters集合中添加Parameter对象。在使用SQL Server.NET数据提供程序时,要使用的Parameter对象的类名为SqlParameter。SqlParameter对象的属性参数化Command命令属 性 名 称说 明ParameterName 获取或设置SqlParameter的名称 DbType 获取或设置参数的SqlDbType Direction 获取或设置一个值,该值指示参数是输入、输出、双向还是存储过程返回值参数 Value 获取
19、或设置该参数的值 26/*我的想法我的想法,我的我的CODE*/案例探讨实现向SMDB数据库添加管理员(Admins表)的功能27/*我的想法我的想法,我的我的CODE*/DataReader对象的特点DataReader只能读取数据,不能对记录进行数据的编辑、添加和删除。DataReader只能在记录间“向前”移动,一旦移动到“下一个”记录,就不能再回到前一个记录了,除非再执行一遍所有的SQL查询。DataReader不能在IIS内存中存储数据,数据直接在页面对象上显示。DataReader是工作在连接模式下的,应用程序在读取数据时,数据库的连接必须处于打开状态。4.3.2 DataRead
20、er数据读取器28/*我的想法我的想法,我的我的CODE*/属 性 名 称说 明Connection获取与SqlDataReader关联的SqlConnection数据库连接对象Depth获取一个指示当前行的嵌套深度的值FieldCount获取当前行中的列数HasRows获取一个指示SqlDataReader是否包含一行或多行的值IsClosed检索一个指示是否已关闭指定的SqlDataReader实例的布尔值Item已重载。获取以本机格式表示的列的值RecordsAffected获取执行Transact-SQL语句所更改、插入或删除的行数SqlDataReader对象的属性29/*我的想法我
21、的想法,我的我的CODE*/SqlDataReader对象的方法方 法 名 称说 明Read使SqlDataReader前进到下一条记录 NextResult当读取批处理T-SQL语句的结果时,使数据读取器前进到下一个结果 GetValue根据列的索引值,返回当前行中该列的数据GetValues将当前行的所有数据保存到指定数组中GetName获取指定列的名称 GetSchemaTable返回SqlDataReader的元数据的DataTableIsDBNull根据列的索引值,用来当前行中的该列是否为空 Close关闭SqlDataReader对象30/*我的想法我的想法,我的我的CODE*/案
22、例探讨读取SMDB中指定会员(Users)的信息?31/*我的想法我的想法,我的我的CODE*/获取某一表中的字段名获取某一记录的字段值string SQLStr=select*from Goods;SqlCommand cmd=new SqlCommand(SQLStr,conn);SqlDataReader dr=cmd.ExecuteReader();DataTable scm=dr.GetSchemaTable();/检索列架构信息(列的字段属性)foreach(DataRow myRow in scm.Rows)Message.Text=myRow0.ToString()+;使用Sq
23、lDataReader对象string SQLStr=select*from Users where id=2;SqlCommand cmd=new SqlCommand(SQLStr,conn);SqlDataReader dr=cmd.ExecuteReader();if(dr.Read()txtName.Text=dr“uName.ToString();txtPassord.Text=dr“uPwd.ToString();txtAge.Text=dr“uAge.ToString();32/*我的想法我的想法,我的我的CODE*/用户身份验证任务实施33/*我的想法我的想法,我的我的COD
24、E*/步骤1还原数据库备份。步骤2新建一个网站AdminLoginDemo,添加Web窗体AdLoign.aspx。步骤3为AdLoign.aspx 页添加界面元素。任务实施34/*我的想法我的想法,我的我的CODE*/步骤4配置数据库连接字符串。步骤5构建T-SQL语句。任务实施select count(*)from admins where aName=name and aPwd=pwd and aType=type35/*我的想法我的想法,我的我的CODE*/步骤6为登录按钮添加事件代码任务实施01/程序名称:AdLogin.aspx.cs02/程序功能:管理员登录身份验证03using
25、 System.Configuration;04using System.Data.SqlClient;05public partial class _Default:System.Web.UI.Page0607 protected void btnConfirm_Click(object sender,EventArgs e)08 09 /创建连接字符串10 string str=ConfigurationManager.ConnectionStringssmdb.ConnectionString;11 string name=txtName.Text;/获取用户输入的用户名12 strin
26、g pwd=txtPwd.Text;/获取用户输入的密码13 int type=int.Parse(ddlType.SelectedValue);36/*我的想法我的想法,我的我的CODE*/任务实施14 using(SqlConnection conn=new SqlConnection(str)15 16 try17 conn.Open();18 string sqlTxt=select count(*)from admins where aName=name 19 and aPwd=pwd and aType=type;20 SqlCommand cmd=new SqlCommand(s
27、qlTxt,conn);21 SqlParameter sps=new SqlParameter(name,name),22 new SqlParameter(pwd,pwd),23 new SqlParameter(type,type);24 cmd.Parameters.AddRange(sps);25 if(int)cmd.ExecuteScalar()0)26 27 Sessionmanager=name;28 Response.Write(alert(登录成功);29 location.href(AdMain.aspx););30 else31 Response.Write(aler
28、t(用户名或密码错误);32 catch(SqlException ee)33 34 Response.Write(alert(系统异常,稍后重试);35 应用程序数据访问任务任务2 2 商品信息查询商品信息查询38/*我的想法我的想法,我的我的CODE*/任务场景基于B2C模式的网上商城,其最普遍的业务就是能够为用户提供商品的查询功能,游客和会员都可以根据自己的喜好浏览商品,查看商品详情,并可以根据商品名、类别、价格等查询商品,还可以对商品按价格、销量等属性进行排序。本任务通过使用数据源控件SqlDataSource、数据绑定控件GridView,结合数据绑定、DataSet对象和DataA
29、dapter对象,实现商品信息查询功能。39/*我的想法我的想法,我的我的CODE*/知识要点断开式数据访问模式DataSet对象DataAdapter对象数据绑定绑定单值数据绑定集合数据使用数据源控件绑定数据GridView数据控件的使用GridView控件概述分页和排序自定义列40/*我的想法我的想法,我的我的CODE*/DataSet对象DataSet对象即数据集对象,采用断开连接数据访问模式。DataSet对象是数据的一种内存驻留表示形式,无论包含的数据来自什么数据源,它都会提供一致的关系编程模型。DataSet对象把数据存储在一个或多个DataTable中,每一个DataTable又
30、包含了DataRow和DataColumn。XML文档可以导入DataSet对象,而DataSet对象中的数据也可以导出为XML文档。4.4 断开式数据访问模式操作数据库41/*我的想法我的想法,我的我的CODE*/DataSet类相关联的主要类/为数据表动态添加列01 DataTable dt=new DataTable(Test);02 DataColumn myCol1=new DataColumn(id,typeof(int);03 DataColumn myCol2=new DataColumn(name,typeof(string);04 dt.Columns.Add(myCol1
31、);05 dt.Columns.Add(myCol2);/在dt表中创建新行01 DataRow myRow=dt.NewRow();/在dt表上创建新行02 myRowid=1;03 myRowname=ASP.NET;04 dt.Rows.Add(myRow);05 myRow=dt.NewRow();/在dt表上创建新行06 myRowid=2;07 myRowname=SQL Server;08 dt.Rows.Add(myRow);09 foreach(DataRow dr in dt.Rows)10 Response.Write(No+drid+drname+);42/*我的想法我
32、的想法,我的我的CODE*/DataAdapter对象是DataSet和ADO.NET对象模型中断开式连接对象之间的桥梁。DataAdapter对象的属性包含SQL语句的SqlCommand或OleDbCommand对象,有4种Command-Type属性SelectCommand:该属性发布一个SQL Select语句。UpdateCommand:该属性发布一个SQL Update语句。InsertCommand:该属性发布一个SQL Insert语句。DeleteCommand:该属性发布一个SQL Delete语句。DataAdapter对象的主要方法 DataAdapter对象方 法
33、名 称说 明Fill将SelectCommand查询执行结果集向DataSet对象添加表。FillSchema将SelectCommand查询执行结果集向DataSet对象添加表结构。Update检查DataTable中发生的变化,并更新到数据库中。43/*我的想法我的想法,我的我的CODE*/案例探讨查看商品信息表中前5条记录信息?44/*我的想法我的想法,我的我的CODE*/断开式数据访问的一般步骤使用连接对象连接并打开数据库;创建数据适配器DataAdapter对象,并设置其SelectCommand属性;调用适配器DataAdapter对象的Fill方法将查询的结果集填充到DataSe
34、t的表中关闭连接,操作DataSet对象;若DataSet中的数据发生变化,则调用DataAdapter的Update()方法更新数据库。45/*我的想法我的想法,我的我的CODE*/添加记录更新记录删除记录DataTable dt=ds.Tables“users;DataRow row=dt.NewRow();row“uName=TextBox1.Text;dt.Rows.Add(row);da.Update(ds,“users);string str=SELECT*FROM Users where uID=+uID;DataTable dt=ds.Tables“users;DataRow
35、row=dt.Rows0;row“uName=TextBox1.Text;da.Update(ds,“users);使用DataSet对数据源记录的编辑方法string str=“SELECT*FROM Users where uID=+uID;DataTable dt=ds.Tables“users;DataRow row=dt.Rows0;row.Delete();da.Update(ds,“users);46/*我的想法我的想法,我的我的CODE*/数据绑定数据绑定是指在程序运行过程中,将数据值动态地赋值给控件属性的过程。数据绑定是声明式的,而非编程式。绑定单值数据Eval()Bind(
36、)绑定集合数据对象的DataSource属性和DataBind()方法使用数据源控件绑定数据SqlDataSource对象47/*我的想法我的想法,我的我的CODE*/绑定单值数据案例解析01 02 成员变量值:03 成员方法返回值:04 计算表达式:05 控件属性:06 虚拟应用程序根路径:07 配置文件数据:asp:Label ID=Label1 runat=server Text=/08 /程序名称:4_7.aspx.cs09 protected string uName=张三;10 protected void Page_Load(object sender,EventArgs e)1
37、1 this.DataBind();/执行绑定 12 protected int returnInt()13 return 1000;48/*我的想法我的想法,我的我的CODE*/绑定单值数据 单值数据绑定主要应用在数据绑定控件上。ASP.NET对具有 DataBinding 事件的对象(如GridView、DataList、Reapter控件)提供数据绑定表达式支持Eval()方法用于单向绑定,一般用于显示数据,被绑定的数据不能被更新;Bind()方法用于双向绑定,支持数据的读和写。0102 03 asp:Label ID=商品ID runat=server Text=/04 asp:Tex
38、tBox ID=商品名称 runat=server Text=/05 06 0749/*我的想法我的想法,我的我的CODE*/绑定集合数据当待绑定数据源是集合时(如数组、哈希表、数据库查询结果集),最常用的数据显示方式就是将集合绑定到集合类型的控件。如DropDownList、ListBox、CheckBoxList、RadioButtonList等列表类控件。实现过程设置DataSource属性ddlGoodType.DataSource=ds.Tablesgtype;ddlGoodType.DataTextField=tName;ddlGoodType.DataValueField=“tI
39、D”;调用DataBind方法 dlGoodType.DataBind();50/*我的想法我的想法,我的我的CODE*/案例探讨显示商品类别?51/*我的想法我的想法,我的我的CODE*/SqlDataSource控件一个数据源控件代表数据在系统内存中的映像,并能够在Web页面上通过数据绑定控件展示出来。SqlDataSource可用于任何具有关联ADO.NET提供程序的数据库,包括Microsoft SQL Server、OLE DB、ODBC或Oracle数据库。案例实现使用SqlDataSource实现商品信息展示(配置向导)使用数据源控件绑定数据52/*我的想法我的想法,我的我的CO
40、DE*/参数化查询01 SelectCommand=SELECT gdID,gdCode,gdName,gdPrice FROM Goods 02 DeleteCommand=DELETE FROM Goods WHERE gdID=gdID 03 InsertCommand=INSERT INTO Goods(gdCode,gdName,gdPrice)04 VALUES(gdCode,gdName,gdPrice)05 UpdateCommand=UPDATE Goods SET gdCode=gdCode,gdName=gdName,06 gdPrice=gdPrice WHERE gd
41、ID=gdID07 08 09 10 11 12 参数化查询定义参数53/*我的想法我的想法,我的我的CODE*/案例演示使用SqlDataSource实现商品信息的模糊查询54/*我的想法我的想法,我的我的CODE*/GridView控件概述GridView控件以表格的形式显示数据源的值,每列表示一个字段,每行表示一条记录。该控件提供了内置排序功能、内置更新和删除功能、内置分页功能、内置行选择功能、以编程方式访问GridView对象模型以动态设置属性以及处理事件等功能。可以通过主题和样式进行自定义外观,实现多种样式的数据展示。4.6 GridView控件55/*我的想法我的想法,我的我的CO
42、DE*/GridView控件常用属性属 性 名 称功 能 说 明AutoGenerateColumns设置是否为数据源中的每个字段自动创建绑定字段。这个属性默认为true,但在实际开发中很少使用自动创建绑定列Columns获取GridView控件中列字段的集合AllowPaging设置是否启用分页功能PageCount获取在GridView控件中显示数据源记录所需的页数PageIndex获取或设置当前显示页的索引PagerSetting设置GridView的分页样式PageSize设置GridView控件每次显示的最大记录条数AllowSorting设置是否启用排序功能56/*我的想法我的想法
43、,我的我的CODE*/GridView控件常用方法方 法 名 称功 能 说 明RowCommand单击GridView控件内列中的某个按钮时触发RowDataBound当GridView控件绑定数据到某行时触发SelectedIndexChanging单击GridView控件内某一行中CommandName属性值为“Select”的按钮时触发RowEditing单击GridView控件内某一行中CommandName属性值为“Edit”的按钮时触发RowUpdating单击GridView控件内某一行中CommandName属性值为“Update”的按钮时触发RowDeleting单击Grid
44、View控件内某一行中CommandName属性值为“Delete”的按钮时触发57/*我的想法我的想法,我的我的CODE*/启用分页和排序通过编程方式实现分页AllowPaging属性设置为TruePageSize属性设置页的大小PageIndex属性设置GridView控件的当前页PagerSettings属性进行分页的UI设计分页和排序58/*我的想法我的想法,我的我的CODE*/PageSettings属性分 页 模 式说 明NextPrevious由“上一页”和“下一页”按钮组成的分页控件NextPreviousFirstLast由“上一页”、“下一页”、“首页”、“末页”按钮组成的
45、分页控件Numeric由用于直接访问页的带编号的链接按钮组成的分页控件NumericFirstLast由带编号的链接按钮及“首页”和“末页”链接按钮组成的分页控件59/*我的想法我的想法,我的我的CODE*/案例探讨GridView控件实现商品信息的分页和排序?60/*我的想法我的想法,我的我的CODE*/4.6.3 自定义列61/*我的想法我的想法,我的我的CODE*/列 的 类 型说 明BoundField绑定字段,以文本的方式显示数据CheckBoxField复选框字段,如果数据库是bit字段,则以此方式显示HyperLinkField用超链接的形式显示字段值ImageField用于显示
46、存放Image图像的URL字段数据ButtonField显示按钮列CommandField显示可执行操作的列,可以执行编辑或者删除等操作。可以设置它的ButtonType属性来决定显示成普通按钮、图片按钮或者超链接TemplateField自定义数据的显示方式,可以使用所熟悉的HTML控件或者Web服务器控件GridView中列的类型62/*我的想法我的想法,我的我的CODE*/BoundField绑定列,以文本的方式显示数据。CheckBoxField复选框列,用于显示布尔型数据字段的值HyperLinkField超链接列,用超链接的形式显示列值GridView中列的类型63/*我的想法我的
47、想法,我的我的CODE*/ImageField图像列,以图像方式显示数据。ButtonField和CommanField按钮列和命令列,创建用于“编辑”、“更新”、“取消”和“删除”功能的按钮。GridView中列的类型64/*我的想法我的想法,我的我的CODE*/GridView中列的类型TemplateField模板列,提供开发人员自定义数据显示方式。模 板 类 型说 明AlternatingItemTemplate交替项模板,定义GridView中的交替行样式EditItemTemplate编辑项模板,定义列的编辑样式FooterTemplate脚模板,即脚注部分要显示的内容,不可以进行
48、数据绑定HeaderTemplate头模板,即表头部分要显示的内容,不可以进行数据绑定ItemTemplate项模板,提供在GridView中显示数据列的样式0102 03 asp:Label ID=Label1 runat=server Text=/04 0565/*我的想法我的想法,我的我的CODE*/任务实施商品信息查询66/*我的想法我的想法,我的我的CODE*/任务实施步骤1.还原数据库备份步骤2.新建网站FindGoodsDemo,添加Web窗体FindGoods.aspx步骤3.在FindGoods.aspx上添加界面元素67/*我的想法我的想法,我的我的CODE*/任务实施步骤
49、4.浏览页面效果68/*我的想法我的想法,我的我的CODE*/任务实施步骤5.为页面中ddGType对象添加DataBound事件。01 /程序名称:FindGoods.aspx.cs02 /程序功能:实现商品多条件查询03 protected void ddlGType_DataBound(object sender,EventArgs e)04 05 ListItem item=new ListItem(所有类别,0);06 ddlGType.Items.Insert(0,item);07 69/*我的想法我的想法,我的我的CODE*/任务实施步骤6.为页面中“搜索”按钮添加Click事件
50、08 protected void btnFind_Click(object sender,EventArgs e)09 10sqlGoods.SelectParameters.Clear();/清空数据源控件的参数集11grdGoods.DataSourceID=null;/清空GridView控件grdGoods的数据源12string sqlstr=sqlGoods.SelectCommand;13switch(rdltSaleQty.SelectedIndex)14 15 case 0:sqlstr+=where gdSaleQty=0;break;16 case 1:sqlstr+=