2013-10-10 3 views
1

Я пытаюсь закодировать ObjectDataSource для локальной страницы ASP.NET.InvalidOperationException: ObjectDataSource не смог найти не общий метод, который имеет параметры:

Чтение файлов справки в MSDN всегда оставляет мне почесывать голову, задаваясь вопросом, что именно они могут подразумевать. Например, я не уверен, что должен быть мой TypeName (хотя эта ссылка имеет интересный пример).

Как только я получу основы для работы, я отправлюсь в более глубокие воды.

Первая строка моего * .aspx файл содержит мои определения:

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

В этой странице у меня есть элементы управления TextBox с именем txtStartDate и txtEndDate и ряд элементов управления DropDownList имени ddlStartTime, ddlEndTime, ddlAction, ddlFilter1 , и ddlFilter2.

У меня также есть следующие ObjectDataSource:

<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> 

GridView управления будет на * .aspx странице, и будет использоваться для отображения данных:

<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> 

Чтобы получить это для загрузки пустого набора данных, я создал этот простой заглушка в своем коде:

namespace AcpServiceNS { 

    public partial class Reporter : System.Web.UI.Page { 

    protected void Page_Load(object sender, EventArgs e) { 
    } 

    [DataObjectMethod(DataObjectMethodType.Select)] 
    protected static DataTable GetData(string startDate, string startTime, string endDate, string endTime, 
     string action1, string filter1, string filter2) { 
     var table = new DataTable(); 
     table.Columns.Add("Op_ID", typeof(string)); 
     table.Columns.Add("Serial_Number", typeof(string)); 
     table.Columns.Add("Date_Time", typeof(DateTime)); 
     table.Columns.Add("Test_Result", typeof(string)); 
     return table; 
    } 

    } 

} 

Да! Все, что указано выше, - это в основном определение таблицы, но для начала моей страницы * .aspx должно быть достаточно.

Когда я пытаюсь запустить это, я получаю следующее исключение:

System.InvalidOperationException: ObjectDataSource «dsReport» не смог найти, не универсальный метод «GetData», который имеет параметры: STARTDATE, STARTTIME, endDate, endTime, action1, filter1, filter2.

Похоже, что я правильно и правильно выполнил все параметры, так что я сделал неправильно? Возможно, TypeName не работает?

ответ

5

От ObjectDataSource, я бы сказал, да, вы используете TypeName неправильно. В статье MSDN это относится к классу, который содержит метод, а не к типу возвращаемого метода.

Try изменения TypeName="System.Data.DataTable" в TypeName="AcpServiceNS.Reporter"

+0

+1. Спасибо за это предложение. Теперь я получаю это: 'ObjectDataSource 'dsReport' не смог найти не-общий метод 'Reporter.GetData', который имеет параметры: startDate, startTime, endDate, endTime, action1, filter1, filter2.' Confusing. – jp2code

+1

Вы собираетесь пинать себя;) Попробуйте сделать метод 'public' – Khan

+0

Я попытался установить метод' public', но это не помогло. То, что, казалось, решило проблему (и почему я не могу объяснить), входило в конструктор и выбирало мои предметы из Мастера. My ** ObjectDataSource ** выглядит так же, как и с указанным выше типом TypeName, но, делая это в дизайнере вместо HTML, он работал. Итак, вы были правы! Благодарю. – jp2code

1

Ваш имяТипа должен показать тип услуги, как показано ниже;

   <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" где ваш метод сервиса писать здесь путь (например, сильное имя ;-)