一起谈.NET技术,在ASP.NET 2.0中数据绑定的实现方法

1、为什么ASP.NET 2.0中的数据绑定控件不需要写代码就能完成更新、删除、新建等数据操作?

  ASP.NET 1.x时,DataGrid等控件使用DataBinder.Eval(Container.DataItem,"ColumnName")这样的表达式可以将数据源中的数据绑定到控件上,但并不能在更新数据时自动将控件中的新值取出,更新回数据库。所以ASP.NET 2.0中的数据绑定分为两种:单向数据绑定(即表达式或ReadOnly设为True的BoundField,只提供从数据源到控件的数据绑定)和双向数据绑定(,不但可以将数据从数据源绑定到控件,而且可以在操作数据时将控件中的数据提供给数据源控件),所以ASP.NET 2.0操作数据时就不需要写大量e.Item.FindControl()这样的代码了。

  2、在Update和Insert过程中,GridView/DetailsView/FormView是如何把值传递给数据源控件,以便数据源控件完成数据操作方法的调用的?

  更新时,GridView会提供两套值给数据源控件,一套新值,汇集所有ReadOnly不为True的列的值和模板中所有表达式的值,另一套旧的值,则从当前行对应的DataKey中获得(DataKey的值在绑定数据时就会被GridView保存到视图状态中),可以在GridView的Updating事件处理程序中看到这一特征。旧的那套值提供给数据源控件后,它的Key会被数据源控件根据OldValuesParameterFormatString重命名。比如,GridView中的DataKeyNames设为ProductID,数据源控件的OldValuesParameterFormatString为original_{0},那么GridView在更新时传给数据源控件的参数中就会有一个original_ProductID。

  新的那套值和老的那套值合起来要刚好和数据源控件需要的参数列表相匹配,不能多也不能少,这是初学者使用GridView更新数据时遇到最多的问题。

  实际使用过程中如果主键列对应的参数(比如,ProductID),没有像Strong named Dataset那样取名为original_ProductID,则需要更改数据源的OldValuesParameterFormatString,比如改成{0},这样才能和实现方法的参数对应起来。

  3、如何实现开放式并发?

  开放式并发的更新和删除语句会有一个很长的where 子句,比如:   

update Table1 set Column1 = @Column1 ,
Column2 = @Column2
where ID = @original_ID
and Column1 = @orignal_Column1
and Column2 = @original_Column2;

  强类型数据集通过在高级选项上选中开放式并发的选钩可以自动生成这样的命令。根据我们第2点的论述,只需在GirdView的DatakeyNames属性中把所有的字段都加进去,这样就会自动的把旧的值放进老值集合中,满足数据源的要求。由此,我们可以理解为什么DataGrid的DataKeyField(单数)属性会被替换为DataKeyNames属性(复数)。

时间: 2024-09-20 06:42:43

一起谈.NET技术,在ASP.NET 2.0中数据绑定的实现方法的相关文章

在ASP.NET 2.0中数据绑定的实现方法

1.为什么ASP.NET 2.0中的数据绑定控件不需要写代码就能完成更新.删除.新建等数据操作? ASP.NET 1.x时,DataGrid等控件使用DataBinder.Eval(Container.DataItem,"ColumnName")这样的表达式可以将数据源中的数据绑定到控件上,但并不能在更新数据时自动将控件中的新值取出,更新回数据库.所以ASP.NET 2.0中的数据绑定分为两种:单向数据绑定(即表达式或ReadOnly设为True的BoundField,只提供从数据源到

在asp.net 2.0中使用存储过程的方法

本文介绍了在asp.net 2.0中使用存储过程的方法. 以下是SQL中两个存储过程: 以下是引用片段: CREATE PROCEDURE dbo.oa_selectalluser AS select * from UserInfo GO CREATE PROCEDURE dbo.oa_SelectByID @id int AS select * from UserInfo where ID=@id GO 一个是带参数的存储过程,一个是不带参数的存储过程.下面介绍怎么在VS2005中使用这两个存

一起谈.NET技术,ASP.NET 4.0 来了

伴随着VS2010的公开测试,ASP.NET4.0也进入了我们的视线.ASP.NET4.0究竟给我们带来了什么,将在哪些方面提高我们的生产力? 在何时你需要使用ASP.NET4.0开发你的网站程序? 需要更严格的遵守Web标准: 需要更流畅的Web Form开发方式: 需要更好的搜索引擎优化: 需要后知后觉的纠正一些不够优良的设计,这些设计甚至可能是在ASP.NET 1.0发布之前就存在的: 需要将现有的功能重新改造为支持server farm或跨application domains: 需要将

一起谈.NET技术,ASP.NET MVC2.0在Tab页中实现异步无刷新分页

概述 很多地方都存在以Tab页来呈现数据的方式,比如网易.新浪.搜狐.QQ等知名的门户网站的首页,还有大家熟知的博客园首页,都是用了tab页来显示数据.大家之所以喜欢用Tab,因为它能大大的增加显示数据的空间,能在固定的空间中显示更多的数据.分页也是为了方便数据的显示,在应用系统中必不可少.这篇文章使用Jquery在ASP.NET MVC中使用Tab页,以及在Tab页中实现异步无刷新的分页功能.估计这个大家都会用得到的. 在ASP.NET MVC中实现分页,在之前的一篇博文:ASP.NET MV

一起谈.NET技术,ASP.NET 4.0 一些隐性的扩展

ASP.NET 4.0在很多方面都做了改进,在这篇ASP.NET 4.0白皮书就描述了很多ASP.NET 4.0的机制改变和改进.在我的博客中,也有几篇关于ASP.NET4.0的特性修改的文章.但是作为一个全新的框架和运行时,内部肯定还会有很多API和扩展点不会暴露的那么明显.比如今天从这篇文章Three Hidden Extensibility Gems in ASP.NET 4的介绍中,我又了解了一些在我平常开发中绝对非常有用的扩展点. PreApplicationStartMethodAt

一起谈.NET技术,ASP.NET MVC 2中使用jQuery UI控件详解

问:我想给我的ASP.NET MVC输入表单添加一个日期选择控件,但模型-视图-控制器(MVC)并没有提供这样的辅助方法,我该如何添加控件? 答:和ASP.NET Web表单不一样,MVC架构没有提供可以在设计面板中拖放的有状态的服务端控件,相反,MVC鼓励使用简单的HTML布局元素和基于数据的标签作为页面布局的要素,功能和最终的布局用客户端JavaScript和CSS样式表控制. MVC提供了一套基于HtmlHelper的扩展方法渲染大部分HTML标签,对于更复杂的功能,你需要自己编写HTML

一起谈.NET技术,Asp.net mvc 2中使用Ajax的三种方式

     在Asp.net MVC中,我们能非常方便的使用Ajax.这篇文章将介绍三种Ajax使用的方式,分别为原始的Ajax调用.Jquery.Ajax Helper.分别采用这三种方式结合asp.net mvc去实现一个史上最简单的留言板.     首先看一下原始的Ajax的调用的:      定义CommentController,代码如下: public class CommentController : Controller{private IList<string> _commen

一起谈.NET技术,分享在MVC3.0中使用jQuery DataTable 插件

前不久在网络上看见一个很不错的jQuery的DataTable表格插件.后来发现在MVC中使用该插件的文章并不多.本文将介绍在MVC3.0如何使用该插件.在介绍该插件之前先简单介绍一下,推荐该插件的原因.在项目中我使用jqgrid比较多.但是发现当进行样式调整时jqgrid的样式常常会让美工头疼.而datatable插件却是一个轻量级的jQuery插件.当我通过浏览器查看该js插件rander后的源码.发现只是一个简单的html table,非常简洁.那么在没有特殊要求的情况下使用这个插件,开发

一起谈.NET技术,ASP.NET 4的Demo实践:URL路由改进支持

从.NET框架3.5 SP1开始,微软推出了ASP.NET路由支持,从而实现了特定资源的URL与其对应的Web服务器上的物理文件之间的彻底解耦.借助于ASP.NET路由支持,开发人员可以定义一组路由规则,从而实现把路由模式映射到一个生成相应内容的类.例如,你可以把URLCategories/CategoryName映射到一个类,该类接收CategoryName而最终生成对应于此种类的产品信息显示于一个网格中的一组HTML标记.有了这样的映射,用户便可以通过访问www.yoursite.com/C