目前发现的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.
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:
Stack Trace:
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协同工作的唯一办法
希望大家能给我指出条更好的途径
自从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:
并不是我的设置缺少了什么 根据错误提示 是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协同工作的唯一办法
希望大家能给我指出条更好的途径