로컬 ASP.NET 페이지에 ObjectDataSource을 코딩하려고합니다.InvalidOperationException : ObjectDataSource가 매개 변수가있는 일반이 아닌 메서드를 찾을 수 없습니다.
MSDN의 도움말 파일을 읽으면 항상 내 머리를 긁적 거리며 정확하게 암시 할 수 있는지 궁금해집니다. 예를 들어 내 TypeName이 무엇이되어야하는지 잘 모르겠습니다 (비록 링크에 흥미로운 예가 있지만).
기본 사항을 익히면 더 깊은 곳으로 모험 할 것입니다. 내가 txtStartDate
및 txtEndDate
및 ddlStartTime
이름이있는 DropDownList 컨트롤의 숫자, ddlEndTime
, ddlAction
, ddlFilter1
라는 이름의 TextBox 컨트롤을 가지고,이 페이지에서
<%@ Page Title="Reporter" Language="C#" MasterPageFile="~/local.Master"
AutoEventWireup="true" CodeBehind="Reporter.aspx.cs"
Inherits="AcpServiceNS.Reporter" %>
:
는내 *에서 .aspx 파일의 첫 번째 줄은 내 정의를 포함 , 및 ddlFilter2
.
나는 또한 ObjectDataSource 다음과 같습니다
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>
것은 얻으려면을 이 빈 데이터 집합을로드하려면 내 코드 숨김에이 간단한 스텁을 만들었습니다.
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 '는 startDate, startTime, endDate, endTime, action1, filter1, filter2.와 같은 매개 변수를 가진 비 제너릭 메소드'Reporter.GetData '를 찾을 수 없습니다. – jp2code
너 자신을 걷어차려고한다.) 메서드를 public으로 해보자. – Khan
메서드를 public으로 설정하려고 시도했지만 도움이되지 않았다. 이 문제를 해결 한 것 (그리고 왜 설명 할 수 없는지)은 디자이너에서 마법사에서 항목을 선택하는 것이 었습니다. 내 ** ObjectDataSource **는 위에서 지적한'TypeName '과 완전히 똑같아 보이지만 HTML 대신 디자이너에서 처리하면 작동합니다. 그래서, 당신 말이 맞았어요! 감사. – jp2code