Frage

Grüße!

Ich erstelle eine User Control, die Daten in einem Gridview-Steuerelement angezeigt wird. Wir sind mit n-Tier-Architektur und die betreffenden Daten sind aus unserer Datenbank abgerufen und an uns zurückgeschickt als Readonlycollection. OurNewObject ist eine Klasse mehr Eigenschaften und einen leeren Konstruktor enthält, die keine Parameter - es ist im folgenden Namespace:. Acme.ObjectModel

In der Benutzerkontrolle, ich habe folgende:

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

In dem Code des User Control hinten, ich habe die folgende öffentliche Methode:

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

Wenn ich die User Control auf einem Web-Formular platzieren und ausführen, bekomme ich die folgende Meldung:

Object 'ourDataSource' könnte eine nicht-generische Methode 'GetTopUsers' nicht finden, die keine Parameter haben.

Also meine Fragen sind:

  1. Bin ich mit dem Object falsch?
  2. Gibt es einen richtigen Weg, um die Object in dieser Situation zu benutzen?

Danke.

War es hilfreich?

Lösung

Ich glaube, das Problem zwei Attribute fehlt.

Zuerst auf GetTopUsers () Methode hinzufügen, um dieses Attribut

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

Dann auf der tatsächlichen OurNewObject Klasse hinzufügen, um dieses Attribut

[System.ComponentModel.DataObject]

Andere Tipps

Normalerweise würden Sie ein eigenes Objekt erstellen, die Ihre Datenzugriffsmethode (n) enthält, anstatt die Methoden in dem Code-Behind setzen. Das separate Objekt kann eine Instanz oder statisch sein, sondern das Objekt selbst muss einen parameterlosen Konstruktor (oder keinen Konstruktor überhaupt) hat.

Auch die Typename-Eigenschaft auf dem Object sollte die Typnamen der oben genannten separaten Objekt verweisen. Beispiel:

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

Die Attribute oben erwähnt:  [System.ComponentModel.DataObject (true)] auf Klassenebene und  [System.ComponentModel.DataObjectMethod (DataObjectMethodType.Select)] bei der Getter-Methode sind nicht erforderlich, wird aber durch Ausfiltern andere Arten in Entwurfszeitunterstützung unterstützen, wenn für die Klassen suchen yer Object anschließen zu.

Versuchen

Hinzufügen des DataKeyNames (fügen Sie den Primärschlüssel) Attribut der GridView und sehen, ob das funktioniert?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top