2010-02-23 43 views
1

删除参数这里的设置从DetailsView控件ItemUpdating

  • 我有一个DetailsView,其DataSourceObjectDataSource
  • ObjectDataSource有两种方法,select和update,它们是在TableAdapter中定义的存储过程。
  • Select存储过程需要1个参数 - 记录ID - 并返回DetailsView中填充的字段。
  • Update存储过程需要三个参数 - 记录标识和两个数据字段。

选择过程正常。

然而,当我提交了更新,我得到以下错误:

ObjectDataSource could not find a non-generic method Update that has parameters: [all 21 table columns]

我想只传递给Update存储过程(3)必要的字段,但DetailsView显然是想使用从Select收到的所有字段进行更新。

我知道,我可以从DetailsViewUpdateEventArgs访问NewValues收藏,但我没有看到一个方法来去除任何的参数,以便它们匹配在存储过程的定义,TableAdapterObjectDataSource

任何想法?

回答

0

也许this tutorial可以提供一些见解。只要你指定你的数据源的更新方法和更新参数,这应该可以正常工作。

+0

好的,我们正朝着正确的方向前进。在Aaron链接到的教程中,我发现: “为了确保ObjectDataSource调用[正确] UpdateProduct重载...我们需要限制GridView具有仅用于ProductName和UnitPrice的可编辑字段。通过删除其他BoundFields和CheckBoxFields,通过将其他字段的ReadOnly属性设置为true或通过两者的某种组合来完成。“ – dneaster3 2010-02-23 17:27:24

+0

现在的问题是,我的DetailsView中的所有字段都是TemplateFields,并且它们没有ReadOnly属性。只是删除EditItemTemplate不起作用,在这种情况下,我不能在DetailsViewMode.Edit中完全删除这些字段。所以虽然我对这个过程有了更多的了解,但我还是没有说服.NET使用正确的更新方法。 – dneaster3 2010-02-23 17:30:58

0

我已经能够解决这个问题,现在只需从DetailsViewUpdateEventArgs中的NewValues集合中删除不需要的值即可。但是,这不是最佳的,因为如果存储过程或表单发生更改,我又添加了另一个失败点。

我还想知道TemplateField是否可以设置为ReadOnly的方式,即BoundField(请参阅Aaron的答案下面的评论)。

相关问题