【问题标题】:Remove a Parameter from DetailsView ItemUpdating从 DetailsView ItemUpdating 中删除参数
【发布时间】:2010-02-23 16:20:28
【问题描述】:

这是设置

  • 我有一个DetailsView,其DataSourceObjectDataSource
  • ObjectDataSource 有两个方法,选择和更新,它们是在TableAdapter 中定义的存储过程。
  • Select 存储过程采用 1 个参数——记录 ID——并返回填充在 DetailsView 中的字段。
  • Update 存储过程采用三个参数——记录 ID 和两个数据字段。

选择过程运行良好。

但是,当我提交更新时,我收到以下错误:

ObjectDataSource 找不到具有参数的非泛型方法Update:[所有 21 个表列]

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

我知道我可以从DetailsViewUpdateEventArgs 访问NewValues 集合,但是我看不到删除任何参数以使其与存储过程中的定义相匹配的方法、TableAdapterObjectDataSource

有什么想法吗?

【问题讨论】:

    标签: asp.net objectdatasource detailsview tableadapter


    【解决方案1】:

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

    【讨论】:

    • 好的,我们正朝着正确的方向前进。在 Aaron 链接到的教程中,我发现:“为确保 ObjectDataSource 调用 [正确] UpdateProduct 重载......我们需要将 GridView 限制为只有 ProductName 和 UnitPrice 的可编辑字段。这可以通过通过将其他字段的 ReadOnly 属性设置为 true 或两者的某种组合来删除其他 BoundFields 和 CheckBoxFields。"
    • 现在的问题是,我的 DetailsView 中的所有字段都是 TemplateFields,并且它们没有 ReadOnly 属性。仅删除 EditItemTemplate 不起作用,在这种情况下,我无法在 DetailsViewMode.Edit 期间完全删除字段。所以虽然我对这个过程有了更深入的了解,但我仍然没有说服 .NET 使用正确的更新方法。
    【解决方案2】:

    我现在可以通过简单地从DetailsViewUpdateEventArgs 中的NewValues 集合中删除不需要的值来解决这个问题。但是,这不是最佳选择,因为如果存储过程或表单发生更改,我会添加另一个故障点。

    我仍然想知道 TemplateField 是否可以像 BoundField 那样设置为 ReadOnly(请参阅 Aaron 答案下方的 cmets)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2014-10-25
      • 2018-11-20
      • 1970-01-01
      相关资源
      最近更新 更多