ASP.NET中的数据绑定•1.概述•2.使用%#表达式%进行绑定•3.使用DataSource属性进行绑定•4.使用数据源控件进行绑定•5.高级数据绑定控件ASP.NET中的数据绑定数据绑定概念数据绑定就是将UI元素(界面元素)与底层的数据源(比如DataSet与DataReader、各种DataSource数据源控件等)连接起来的过程。我们主要学习的是服务器端的数据绑定技术,通过绑定和输出服务器上的数据并返回浏览器兼容的HTML代码。实现数据绑定的方法(1)使用%#表达式%(2)使用DataSource属性(3)使用数据源控件(4)使用Eval方法,Bind方法1.概述列表绑定控件连接到数据源并把来自数据源的数据显示出来的Web服务器控件。控件描述CheckBoxList复选框组,可通过数据绑定动态生成DropDownList单选下拉列表框控件ListBox允许单选或多选的列表控件RadioButtonList可通过数据绑定自动生成一组单选按钮GridView像表格中一样分列显示数据源的字段DataList用来显示模板定义的数据绑定列表…..1.概述对于这种绑定方式,无论是Html控件,还是Web服务器控件都是实用的。可以将HTML文本框文本要绑定到页面的一个字段name(注:这个字段必须为公有字段或受保护字段,即访问修饰符为public或protected),在HTML源中可以这样绑定。INPUTtype=textvalue=%#name%INPUTtype=textvalue=%#Mr.+name%注意:需同时在页面中使用Page.DataBind();方法将数据绑定2.使用%#表达式%进行绑定这种绑定方法还可以用于绑定一个方法返回值,例如有个Test()方法(这个方法的访问修饰符也是public或protected),在HTML源中可以这样绑定INPUTtype=textvalue=%#Test()%注意:这里方法后面没有;号另外在网页设计中经常会看到%=%这种语法,在这之间可以放入程序代码。2.使用%#表达式%进行绑定3.使用DataSource属性进行绑定使用list-bound控件显示DataSetDataSet可看成是内存中的一个虚拟的数据库,我们只要将list-bound控件的DataSource属性链接到数据源,ASP.NET会自动给list-bound控件填充数据。把list-bound控件同一个DataSet绑定在一起,必须设置以下属性:属性描述DataSource指定包含数据的DataSetDataMember因为DataSet中可能有多个数据表,所以指定要显示的DataTable表名DataTextField指定将在列表中显示的DataTable字段DataValueField指定DataTable中某字段,此字段将成为列表中被选中的值3.使用DataSource属性进行绑定list-bound控件与DataSet数据源的绑定示例使用DataSource数据源后,还需要调用list-bound控件的DataBind方法来连接DataSet、DataReader等数据源。这里要注意的是DataTextFiled和DataValueField两个属性值,两个属性分别绑定不同的字段,前者表示的是控件显示出的字段,后者表示控件代表的值。当使用类似:Response.Write(this.DrListCompany.SelectedValue);输出所选控件的值时,打印的是你DataValueField属性中绑定的字段--CategoryID的值。3.使用DataSource属性进行绑定3.使用DataSource属性进行绑定list-bound控件与DataReader数据源的绑定示例DataSetDataReader读或写数据只读包含多个来自不同数据库的表使用SQL语句从单个数据库非连接模式连接模式绑定到多个控件只能绑定到一个控件向前或向后浏览数据只能向前较慢的访问速度较快的访问速度DataSet与DataReader的比较3.使用DataSource属性进行绑定ASP.NET中包含多种新的数据访问控件。数据访问控件主要分为两大类:数据源控件和数据绑定控件,可将这两者结合起来,数据源控件负责获取和处理,数据绑定控件负责将数据显示在页面。使用VS.NET编写包含数据源控件的页面时,凭借新控件强大的功能以及设计时支持,几乎可以不编写代码就能完成检索和绑定数据的任务。本节主要介绍两个数据源控件的使用:SqlDataSourceObjectDataSource4.使用数据源控件进行绑定创建SqlDataSourceSqlDataSource听起来好像只能使用SQLServer,但实际情况不是这样,该控件可以从任何OLEDB或符合ODBC的数据源中检索数据,甚至Oracle数据库。可以通过以下步骤添加一个SqlDataSource数据源并绑定到DropDownList控件。4.1SqlDataSource4.1SqlDataSource配置后所生成的代码如下:ConnectionString=%$ConnectionStrings:MyBlogConnectionString%这行代码用于获取web.config中connectionStrings配置节中,键名为MyBlogConnectionString的字符值。4.1SqlDataSource连接字符串的加密在web.config文件中敏感信息是以明文方式存储,这存在一定的安全问题。为连接字符串加密,可以使用ASP.NET提供的命令行工具:aspnet_regiis.exe若要获得该命令的帮助信息,可以在命令行提示下输入:aspnet_regiis/?4.1SqlDataSource若要加密web.config中的ConnectionString配置节,而该文件位于D:\Test目录下,则在命令行提示下面使用命令如下:aspnet_regiis-pef“connectionStrings”“D:\Test”–pef:表示根据文件绝对路径执行加密;-connectionString:要加密的配置节名称;D:\Test:表示web.config所在目录4.1SqlDataSource注:加密过程中使用了一个基于本机的密钥,这意味着解密必须在同一台计算机上,若将加密后的web.config文件移动到其他计算机上,那么web.config文件中的连接字符串不能够正常解密。加密完成后,web.config变化如下:解密使用:aspnet_regiis–pdf“connectionStrings”“D:\Test”4.1SqlDataSource4.1SqlDataSourceSqlDataSource的参数绑定参数源来自于其它控件如下例:设置博客绑定到Blog表,分类绑定到Category表,并设置绑定条件BlogID为博客下拉框所选择的博客。4.1SqlDataSource实现控件的属性值与参数对象绑定特性。其中包含3个关键的属性设置:一是Name,设置绑定的参数名称;二是ControlID,设置提供值的控件名称;三是PropertyName,设置提供值的控件属性名称。注:从生成的HTML源中我们可以看出,SqlDataSource参数的参数绑定仅针对查询有效。4.1SqlDataSource4.1SqlDataSource参数源来自于QueryString例如访问页面时采用:=1可以将来自HTTP请求的QueryString对象值绑定到参数对象上。重点设置以下属性:一是Name,用于设置绑定的参数名称;二是QueryStringField,用于设置QueryString对象的名称。4.1SqlDataSource参数源来自于Session可以将Session对象的值绑定到参数对象上。在设置过程中,需要注意3个重要属性:一是Name,用于设置绑定的参数名称;二是SessionField,用于设置Session对象的名称,以区别不同的Session对象;三是DefaultValue,用于设置该Session对象的默认值,主要是防止Session对象的值为空的情况发生。4.1SqlDataSource参数源来自于Cookie可以实现Cookie对象值与参数对象的绑定,主要设置两个属性:一是Name,用于设置绑定的参数名称;二是CookieName,用于设置Cookie的名称。注:仅支持单值Cookie。4.1SqlDataSource参数源来自于HTML标记的表单可以将表单域的值与参数对象实现绑定。关键设置两个属性:一是Name,用于设置绑定的参数名称;二是FormField,用于设置表单域传出的参数名称。数据源控件虽然对数据源的连接和访问得到了极大简化,但这样的控件却将表示层和业务逻辑层混合在了一起。在应用程序规模较小,功能较为简单的情况下还能应对。但项目在开发时,为了程序的可维护性、代码重用性,都会采用N层架构进行开发(一般使用的是3层架构:界面层、业务逻辑层、数据访问层)。而完全使用DataSource属性进行数据绑定又较为复杂,因此ASP.NET2.0中出现了ObjectDataSource控件,能将来自数据访问层或业务逻辑层的数据对象,与表示层中的数据绑定控件绑定,轻松实现数据的显示、编辑、排序等任务。4.2ObjectDataSource4.2ObjectDataSource表示层数据绑定控件业务逻辑层数据访问层ObjectDataSourceIDataSourceObjectDataSource的应用程序结构图ObjectDataSource控件与SqlDataSource控件的对象模型是类似的。ObjectDataSource没有ConnectionString属性,它暴露了TypeName属性:用于指定需要实例化的执行数据操作的对象类型;DataObjectTypeName属性:用于指定查询结果对应的集合元素类型。ObjectDataSource控件与SqlDataSource的命令属性相似,支持SelectMethod、UpdateMethod、InsertMethod和DeleteMethod等属性,用于指明执行这些数据操作的关联类型的方法。本节将解释建立数据访问层和业务逻辑层组件,并通过ObjectDataSource对象展示ASP.NET数据组件的技术。4.2ObjectDataSource4.2ObjectDataSource配置ObjectDataSource控件时首先选择一个业务对象,然后依次为其选择业务对象所提供的增、删、改、查方法,如果查询方法涉及参数,则还需要设置参数来源。4.2ObjectDataSource4.2ObjectDataSource