3 Stimmen

Anforderungen für die Datenquelle zur Entwurfszeit in Report Viewer 2010

Welche Voraussetzungen müssen erfüllt sein, damit eine benutzerdefinierte Datenquelle in der Dropdown-Liste "Datenquelle" aufgeführt wird, wenn einem .rdlc-Bericht in Report Viewer 2010 ein Dataset hinzugefügt wird?

Wie auf dem Screenshot zu sehen ist, werden aus irgendeinem Grund potenzielle Quellen aus einer Vielzahl von referenzierten Baugruppen aufgelistet, aber ich kann kein offensichtliches Muster erkennen, warum diese ausgewählt werden.

alt text

GeneralDataSet" macht Sinn, da es sich um eine stark typisierte Dataset-Klasse handelt, aber ich bin mir ziemlich sicher, dass die meisten anderen nicht so sind, und dennoch werden sie im Entwurfsdialog aufgeführt.

Ich möchte meine eigene benutzerdefinierte Datenquelle einrichten und würde es vorziehen, wenn sie aus dieser Liste ausgewählt werden könnte.

0voto

Phil Punkte 3772

Ich glaube, es durchsucht Ihre Projektdatei nach Methoden, die Lists<> und so weiter zurückgeben.

Also etwa so:

public class Person
{
    public string name { get; set; }
    public int age { get; set; }
}

public class GetPeople
{
   public List<Person> GetPeopleList()
   {
      return null;
   }

   public IEnumerable<Person> GetPeopleIEnumerable()
   {
      return null;
   }

   public IQueryable<Person> GetPeopleIQueryable()
   {
      return null;
   }
}

Alle drei tauchen auf, also wählen Sie aus. (Der Code ist gerade durchforstet, ignorieren Sie schlechte Namen/Praktiken :))

Wenn Sie jedoch einen ReportViewer verwenden, müssen Sie die Datasets manuell festlegen. Wenn man sie im Bericht auswählt, wird im Grunde nur mitgeteilt, welche Daten zu erwarten sind. Fügen Sie also eine ObjectDataSource hinzu oder legen Sie sie einfach im Code dahinter fest.

0voto

Jafin Punkte 3563

Ich habe festgestellt, dass der Datensatz nicht angezeigt wird, wenn die Quelle als Eigenschaft und nicht als Methode dargestellt wird.

d.h. es handelt sich nicht um eine auswählbare Datenquelle.

public class FooData 
{
    public List<string> Data {get;set;}
}

aber dies wird als Datenquelle angezeigt

public class FooData 
{
    public List<string> GetData();
}

0voto

WraithNath Punkte 17028

Ich hatte auch gerade ein Problem damit,

meine Klasse gab zwar Listen zurück, wurde aber nicht in der Liste der Datenquellen angezeigt.

Ich fügte dann einen parameterlosen Konstruktor hinzu, und es begann zu zeigen, bis (es gab nicht ein vor) ich assmume dies ist, so dass der Reportviewer erstellen kann und Instanz von ihm.

z. B:

public MyObject()
{
}

0voto

Ric Bailey Punkte 21

Ich habe ein ähnliches Problem mit benutzerdefinierten Listen, die von List erben, gehabt. Sie können es umgehen, wenn Ihr System die Vererbung ohne Verwendung von Schnittstellen zulässt. Unseres tut das nicht.

Das Projekt, das diese Klasse enthält, wird in der Dropdown-Liste DataSource angezeigt, und die Klasse selbst erscheint in der Dropdown-Liste DataSet:

public class AccountList : List<AccountData>
{}

Diese Klasse wird NICHT als Dataset erscheinen, was verhindert, dass ihr Projekt als DataSource erscheint (beachten Sie das "I" vor AccountData):

public class AccountList : List<IAccountData>
{}

Dies ist ein Problem, da andere Aspekte unseres Systems erfordern, dass die Listen von einer Schnittstelle und nicht von einer konkreten Klasse erben. Ich weiß nicht, warum es nicht funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X