2

ローカル ASP.NET ページの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 コントロールがあります。ddlStartTimeddlEndTimeddlActionddlFilter1ddlFilter2

次の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は間違って使用されていますか?

4

2 に答える 2

7

ObjectDataSourceから、私はあなたがTypeName間違って使用していると言うでしょう。MSDN の記事では、メソッドの戻り値の型ではなく、メソッドをホストするクラスを参照しています。

に変更TypeName="System.Data.DataTable"してみてくださいTypeName="AcpServiceNS.Reporter"

于 2013-10-10T16:00:14.963 に答える