zoukankan      html  css  js  c++  java
  • ObjectDataSource控件执行Delete操作时,出现“未能找到带参数的非泛型方法”的解决方案

    错误提示如下图所示:


    2、错误分析:

    查阅了一下VS Studio 帮助文档,找到了下面这段话:


    参数合并
    参数从三个来源添加到 DeleteParameters 集合中:

    从 数据绑定控件(在运行时)
    从 DeleteParameters 元素(以声明方式)。

    从 Deleting 方法(以声明方式)。

    首先,将通过数据绑定控件生成的所有参数添加到 DeleteParameters 集合中。例如,如果 ObjectDataSource 控件绑定到具有列 Name 和 Number 的 GridView 控件,则将 Name 和 Number 的参数添加到集合中。参数的确切名称取决于 OldValuesParameterFormatString 属性。这些参数的数据类型是 string。然后,添加 DeleteParameters 元素中列出的参数。如果 DeleteParameters 元素中的参数与 DeleteParameters 集合中的现有参数同名,则修改现有参数以与 DeleteParameters 元素中指定的参数匹配。这通常用于修改参数中的数据类型。最后,可以在 Deleting 事件中以编程方式添加和移除参数,该事件在 Delete 方法运行前发生。合并参数后解析方法。下一节讨论方法解析。

    方法解析
    调用 Delete 方法时,数据绑定控件中的数据字段、DeleteParameters 元素中以声明方式创建的参数和 Deleting 事件处理程序中添加的参数全部合并在一起。(有关更多信息,请参见上一节。)然后,ObjectDataSource 对象尝试查找可以调用的方法。首先,它查找具有 DeleteMethod 属性中指定的名称的一个或多个方法。如果没有找到匹配项,则引发 InvalidOperationException 异常。如果找到了匹配项,它随后将查找匹配的参数名。例如,假设 TypeName 属性指定的类型有两个名为 DeleteARecord 的方法。一个 DeleteARecord 带一个参数 ID,另一个 DeleteARecord 带两个参数 Name 和 Number。如果 DeleteParameters 集合只包含一个名为 ID 的参数,则调用仅带 ID 参数的 DeleteARecord 方法。解析方法时不检查参数类型。参数的顺序无关紧要。

    结合这段话,我们来分析上面的代码:
    在执行Delete操作时,DeleteParameters集合中有两个参数:ID,来自于数据绑定;topicID,来自于DeleteParameters中的声明。因为这两个参数名不同,所以无法完成“修改现有参数以与DeleteParameters元素中指定的参数匹配”的工作。因此,就会出现上述的错误。

    3、解决办法:
    第一种办法:修改Topic类中的DeleteTopic(int topicID),将参数topicID修改为id(不用区分大小写)。然后将DeleteParameters的参数名也改为id
    第二种方法:在gvwTopics的RowDeleting事件处理函数中,对DeleteParameters中的参数进行修改,代码如下:


    1 protected void gvwTopics_RowDeleting(object sender, GridViewDeleteEventArgs e)
    2     {
    3         int id = (int)e.Keys["ID"];
    4         e.Keys.Clear();              //clear all params
    5         e.Keys.Add("topicID", id);   //add new param,
    6     }

    这样就很好的解决了!

    http://kb.cnblogs.com/a/1568516/ 

  • 相关阅读:
    Dot Net WinForm 控件开发 (七) 为属性提下拉式属性编辑器
    WinForm 程序的界面多语言切换
    c#遍历HashTable
    Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
    Dot Net WinForm 控件开发 (六) 为属性提供弹出式编辑对话框
    Dot Net WinForm 控件开发 (一) 写一个最简单的控件
    Dot Net WinForm 控件开发 (四) 设置属性的默认值
    Dot Net WinForm 控件开发 (二) 给控件来点描述信息
    Dot Net WinForm 控件开发 (八) 调试控件的设计时行为
    Dot Net WinForm 控件开发 (五) 复杂属性的子属性
  • 原文地址:https://www.cnblogs.com/chen110xi/p/2430833.html
Copyright © 2011-2022 走看看