Asp.net 从DetailsView ItemUpdate中删除参数
这是设置Asp.net 从DetailsView ItemUpdate中删除参数,asp.net,objectdatasource,detailsview,tableadapter,Asp.net,Objectdatasource,Detailsview,Tableadapter,这是设置 我有一个DetailsView,它的DataSource是一个ObjectDataSource ObjectDataSource有两个方法,select和update,它们是在TableAdapter中定义的存储过程 Select存储过程接受一个参数——记录id——并返回在DetailsView中填充的字段 Update存储过程接受三个参数——记录id和两个数据字段 选择过程工作正常 但是,当我提交更新时,出现以下错误: ObjectDataSource找不到具有参数:[所有21个
- 我有一个
,它的DetailsView
是一个DataSource
李>ObjectDataSource
有两个方法,select和update,它们是在ObjectDataSource
中定义的存储过程李>TableAdapter
存储过程接受一个参数——记录id——并返回在Select
中填充的字段李>DetailsView
存储过程接受三个参数——记录id和两个数据字段Update
ObjectDataSource
找不到具有参数:[所有21个表列]的非泛型方法Update
我试图只将(3)个必需字段传递给Update
存储过程,但是DetailsView
显然试图使用从Select
接收到的所有字段进行更新
我知道我可以从DetailsViewUpdateEventArgs
访问NewValues
集合,但我看不到删除任何参数以使其与存储过程、TableAdapter
和ObjectDataSource
中的定义匹配的方法
有什么想法吗?也许可以提供一些见解。只要您在数据源中指定更新方法和更新参数,这应该可以正常工作。我现在可以解决这个问题,只需从
DetailsViewUpdateEventArgs
中的NewValues
集合中删除不需要的值即可。但是,这并不是最优的,因为如果存储过程或表单发生更改,我已经添加了另一个失败点
我仍然想知道
TemplateField
是否可以像BoundField
那样设置为ReadOnly
。好的,我们的方向是正确的。在Aaron链接到的教程中,我发现了以下内容:“确保ObjectDataSource调用[correct]UpdateProduct重载…我们需要将GridView限制为仅包含ProductName和UnitPrice的可编辑字段。这可以通过删除其他BoundFields和CheckBoxFields、将这些其他字段的ReadOnly属性设置为true或通过两者的某种组合来实现。”现在的问题是,我的DetailsView中的所有字段都是TemplateFields,它们没有只读属性。仅删除EditItemTemplate不起作用,在本例中,我无法在DetailsViewMode.Edit期间完全删除字段。因此,虽然我对这个过程有了更深入的了解,但我仍然没有说服.NET使用正确的更新方法。