Я пытаюсь закодировать 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 не работает?
+1. Спасибо за это предложение. Теперь я получаю это: 'ObjectDataSource 'dsReport' не смог найти не-общий метод 'Reporter.GetData', который имеет параметры: startDate, startTime, endDate, endTime, action1, filter1, filter2.' Confusing. – jp2code
Вы собираетесь пинать себя;) Попробуйте сделать метод 'public' – Khan
Я попытался установить метод' public', но это не помогло. То, что, казалось, решило проблему (и почему я не могу объяснить), входило в конструктор и выбирало мои предметы из Мастера. My ** ObjectDataSource ** выглядит так же, как и с указанным выше типом TypeName, но, делая это в дизайнере вместо HTML, он работал. Итак, вы были правы! Благодарю. – jp2code