目前发现的VS2005 asp.net 数据绑定bug (二) -关于ObjectDatasource 和TableAdapter

(以下内容使用vs2005 teamsuit 英文版本)
自从dataset内部可以内建TableaDapter以后 ,貌似所有人的数据访问类都可以自动过期了
无论你是要login,count(*) , groupby 还是select into  你所要做的只是在相应的数据表的TableAdapter下面Add Query

更可恶的是^_^,貌似这是M$推荐的的 ObjectDataSource的绑定对象——IDE直接生成的唯一的(或者说唯一被我发现的)数据对象。

Well,如果是你推荐的  我自然要学习学习了。让我们来看看M$给我们提供了什么…………

——————————我是分隔线————————————

打开vs2005IDE   New->Website
http://localhost/ObjectDatasourceSite/

点击解决方案管理器 right click website -〉add new item ->dataset->Dataset1.xsd

忽略所有的向导  然后从服务器资源管理器拖拽一个数据表(northwind的Emoloyees看起来不错) ,放到已经打开的Dataset1.xsd里面

ok 我们有了一个装满字母的小房子  ,而且我们的数据访问对象作为地基已经在那里准备好fill something了



按照m$一贯的作风 我们来建立简单的数据绑定访问应用吧
dblclick default.aspx

扔一个GridView到这张新打开的纯洁的画布上
datasourceid->new datasource    -->objectdatasource
继续 objectdatasource向导  指定employoeesTableAdapter为我们的业务类
接着连续next   ,标准的M$操作不是么?

然后回到gridview ,right click  ->show Smart Tag     把里面的增删改对号都打开



看起来我们有了一个不错的M$风格的数据绑定,应该可以正常工作了>_<。

然后我们打开“正常工作”的页面   Edit   
然后Update


哈哈 熟悉的黄色屏幕出现了~


 

Server Error in '/ObjectDatasourceSite' Application.

ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'Update' that has parameters: LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, ReportsTo, PhotoPath, original_EmployeeID, Original_LastName, Original_FirstName, Original_Title, Original_TitleOfCourtesy, Original_BirthDate, Original_HireDate, Original_Address, Original_City, Original_Region, Original_PostalCode, Original_Country, Original_HomePhone, Original_Extension, Original_ReportsTo, Original_PhotoPath.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'Update' that has parameters: LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, ReportsTo, PhotoPath, original_EmployeeID, Original_LastName, Original_FirstName, Original_Title, Original_TitleOfCourtesy, Original_BirthDate, Original_HireDate, Original_Address, Original_City, Original_Region, Original_PostalCode, Original_Country, Original_HomePhone, Original_Extension, Original_ReportsTo, Original_PhotoPath.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

xxxxx....
Version Information:
 Microsoft .NET Framework Version:2.0.50727.42; ASP.NET Version:2.0.50727.42



并不是我的设置缺少了什么  根据错误提示 是Gridview 生成的参数与 Tableadpter的参数不符合。 这绝对是bug

解决问题的步骤

1 把ObjectDataSource Update的参数  最后一个 keyfield  (这个表是EmployeeID)删除
2 把GridView 的datakeyName 删除
3 把GridView 的keyfield列设置成可读可写 
4 reconfig TableAdapter  在高级选项把并发读写那个对号去掉
(后3步是规避这个bug的另外一种表现,生成全null的original_{0}参数)


这样你将得到一个愚蠢的需要更新keyfield的绑定表(用模板列可以规避这个问题,那是后话)而且没有并发检查的能力
目前这是我能让gridview\ObjectDataSource和TableAdapter协同工作的唯一办法
希望大家能给我指出条更好的途径

posted @ 2006-01-17 10:01  MSFT:waywa 韦恩卑鄙  阅读(3709)  评论(15编辑  收藏  举报