InvalidOperationException:ObjectDataSource找不到具有参数的非泛型方法:

时间:2013-10-10 15:45:39

标签: c# asp.net gridview objectdatasource

我正在尝试为本地ASP.NET页面编写ObjectDataSource代码。

阅读MSDN上的帮助文件总是让我摸不着头脑,想知道他们究竟会暗示什么。例如,我不确定我的TypeName应该是什么(尽管该链接有一个有趣的例子)。

一旦我掌握了基础工作,我就会冒险进入更深的水域。

我的* .aspx文件的第一行包含我的定义:

<%@ Page Title="Reporter" Language="C#" MasterPageFile="~/local.Master"
    AutoEventWireup="true" CodeBehind="Reporter.aspx.cs"
    Inherits="AcpServiceNS.Reporter" %>

在此页面中,我有名为txtStartDatetxtEndDate的TextBox控件以及名为ddlStartTimeddlEndTimeddlAction,{{的多个DropDownList控件1}}和ddlFilter1

我还有以下ObjectDataSource

ddlFilter2

GridView控件将位于* .aspx页面上,并将用于显示数据:

<asp:ObjectDataSource ID="dsReport" runat="server"
     SelectMethod="GetData"
     TypeName="System.Data.DataTable"
     ConvertNullToDBNull="True" >
  <SelectParameters>
    <asp:ControlParameter ControlID="txtStartDate" Name="startDate" PropertyName="Text" Type="String" DefaultValue="" />
    <asp:ControlParameter ControlID="ddlStartTime" Name="startTime" PropertyName="Text" Type="String" DefaultValue="" />
    <asp:ControlParameter ControlID="txtEndDate" Name="endDate" PropertyName="Text" Type="String" DefaultValue="" />
    <asp:ControlParameter ControlID="ddlEndTime" Name="endTime" PropertyName="Text" Type="String" DefaultValue="" />
    <asp:ControlParameter ControlID="ddlAction" Name="action1" PropertyName="Text" Type="String" DefaultValue="" />
    <asp:ControlParameter ControlID="ddlFilter1" Name="filter1" PropertyName="Text" Type="String" DefaultValue="" />
    <asp:ControlParameter ControlID="ddlFilter2" Name="filter2" PropertyName="Text" Type="String" DefaultValue="" />
  </SelectParameters>
</asp:ObjectDataSource>

为了让它加载一个空的数据集,我在我的代码隐藏中创建了这个简单的存根:

<asp:GridView ID="gvReport" AllowSorting="true" AutoGenerateColumns="false" AllowPaging="true" Font-Size="Small" PageSize="30" Width="100%"
  OnRowDataBound="Report_RowDataBound"
  OnRowCommand="Report_RowCommand"
  DataKeyNames="Op_ID,Serial_Number,Date_Time,Test_Result"
  DataSourceID="dsReport"
  runat="server">
  <Columns>
    <asp:TemplateField HeaderText="Op_ID" HeaderStyle-Width="20%">
      <ItemTemplate>
        <asp:LinkButton ID="lbOp_ID" runat="server" CommandArgument='<%# Container.DataItemIndex %>' CommandName="Op_ID" />
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Serial_Number" HeaderStyle-Width="20%">
      <ItemTemplate>
        <asp:LinkButton ID="lbSerial_Number" runat="server" CommandArgument='<%# Container.DataItemIndex %>' CommandName="Serial_Number" />
      </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="Date_Time" HeaderText="Date_Time" SortExpression="Date_Time" HeaderStyle-Width="20%" />
    <asp:BoundField DataField="Test_Result" HeaderText="Test_Result" SortExpression="Test_Result" HeaderStyle-Width="40%" />
  </Columns>
</asp:GridView>

是的!以上所有内容基本上都是表定义,但它应该足以启动我的* .aspx页面。

当我尝试运行此操作时,我收到以下异常:

  

System.InvalidOperationException:ObjectDataSource'dsReport'找不到具有参数的非泛型方法'GetData':startDate,startTime,endDate,endTime,action1,filter1,filter2。

看来我拼写并正确拼写了所有参数,所以我做错了什么? TypeName使用不正确吗?

2 个答案:

答案 0 :(得分:6)

ObjectDataSource,我会说是的,你使用TypeName错了。在MSDN文章中,它引用承载方法的类,而不是方法的返回类型。

尝试将TypeName="System.Data.DataTable"更改为TypeName="AcpServiceNS.Reporter"

答案 1 :(得分:1)

您的typename必须显示您的服务类型,如下所示;

                <asp:ObjectDataSource ID="odsPoint" runat="server" SortParameterName="sortColumns" EnablePaging="True" 
                    StartRowIndexParameterName="startRecord" MaximumRowsParameterName="maxRecords"
                    SelectCountMethod="GetCategoryPoints" SelectMethod="GetCategoryPointsByFilters" 
                    TypeName="EvaluationAssistt.Service.Services.EvaluationReportingService" 
                    UpdateMethod="GetCategoryPointsByFilters">

关心此处:TypeName="EvaluationAssistt.Service.Services.EvaluationReportingService" 您的服务方法在哪里写入路径(例如强名称; - )