1

ご挨拶!

GridView コントロールにデータを表示するユーザー コントロールを作成しています。n 層アーキテクチャを使用しており、問題のデータはデータベースから取得され、ReadOnlyCollection として返されます。OurNewObject は、いくつかのプロパティと、パラメーターをとらない空のコンストラクターを含むクラスです。名前空間 Acme.ObjectModel にあります。

ユーザーコントロールには、次のものがあります。

<asp:GridView ID="ourGrid" runat="server" DataSourceID="ourDataSource">
    <columns>
    <asp:BoundField DataField="Name" HeaderText="Full Name" />
    <asp:BoundField DataField="Gender" HeaderText="Gender" />
    <asp:BoundField DataField="BirthYear" HeaderText="Year of Birth" />
    <asp:BoundField DataField="JoinDate" HeaderText="Date Joined" />
  </columns>
</asp:GridView>
<asp:ObjectDataSource ID="ourDataSource" runat="server" SelectMethod="GetTopUsers" TypeName="Acme.Model.OurNewObject">
</asp:ObjectDataSource>

ユーザー コントロールのコード ビハインドには、次のパブリック メソッドがあります。

public ReadOnlyCollection<OurNewObject> GetTopUsers()
{
    return (OurDataProxy.GetJustTheTopUsers());
}

ユーザー コントロールを Web フォームに配置して実行すると、次のメッセージが表示されます。

ObjectDataSource 'ourDataSource' は、パラメーターを持たない非ジェネリック メソッド 'GetTopUsers' を見つけることができませんでした。

だから私の質問は:

  1. ObjectDataSource を間違って使用していますか?
  2. この状況で ObjectDataSource を使用するより適切な方法はありますか?

ありがとう。

4

3 に答える 3

2

通常、分離コードにメソッドを配置するのではなく、データ アクセス メソッドを含む別のオブジェクトを作成します。個別のオブジェクトはインスタンスまたは静的にすることができますが、オブジェクト自体にはパラメーターなしのコンストラクターが必要です (またはコンストラクターがまったくない)。

また、ObjectDataSource の TypeName プロパティは、上記の別のオブジェクトの型名を参照する必要があります。例:

public class SampleDataObject
{
  public ICollection<OurNewObject> GetTopUsers()
  {
    //[...]
  }
}

上記の属性: クラス レベルの [System.ComponentModel.DataObject(true)] とゲッター メソッドの [System.ComponentModel.DataObjectMethod(DataObjectMethodType.Select)] は必須ではありませんが、 ObjectDataSource をフックするクラスを探すときに、他のタイプを除外します。

于 2008-12-03T02:15:02.650 に答える
0

この問題には 2 つの属性が欠けていると思います。

最初に GetTopUsers() メソッドにこの属性を追加します

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Select, true)]

次に、実際の OurNewObject クラスにこの属性を追加します

[System.ComponentModel.DataObject]
于 2008-11-19T21:51:18.020 に答える
0

DataKeyNames(主キーを追加) 属性を に追加してみて、GridViewそれが機能するかどうかを確認してください。

于 2008-12-01T06:09:26.267 に答える