2010-02-18 5 views
2

Le contrôle asp.net ReportViewer fonctionne-t-il avec LinqDataSource? Si oui, y a-t-il des exemples? Pourquoi les classes d'entités générées Linq to Sql n'apparaissent-elles pas dans le volet Sources de données du site Web, lors de la modification d'un rapport?Questions ASP.NET ReportViewer et Linq To Sql

Répondre

1

Il apparaît que le volet Sources de données du site Web ne vous montrera que toutes les classes qui ont des méthodes publiques qui retournent IEnumerable, mais il ne montrera pas les propriétés, même si elles renvoient aussi IEnumerable. Par exemple, si vous avez cette classe:

public class Nom

{ 
    public Name(string firstName, string lastName) 
    { 
     FirstName = firstName; 
     LastName = lastName; 
    } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 
public class Class1 
{ 
    public IEnumerable<Name> Names { get; set; } 

    public IEnumerable<Name> GetNamesList() 
    { 
     List<Name> list = new List<Name>(); 
     list.Add(new Name("Al", "Alverson")); 
     list.Add(new Name("Bill", "Billerson")); 
     return list; 
    } 
} 

la seule option qui apparaît dans le volet Sources de données Site Web est "GetNamesList" avec les propriétés Prénom et nom. Puisque vos classes générées Linq-to-SQL ont des propriétés qui sont IQueryable, mais pas des méthodes, vous pouvez ajouter des classes partielles qui ont des méthodes pour exposer ces collections. Donc, si vous avez une propriété Products, créez une classe partielle avec une signature de:

public IEnumerable GetAllProducts();

Mais je ne suis pas sûr que vous pouvez faire fonctionner le ReportViewer avec un contrôle LinqDataSource existant. Au lieu de cela, il fait essentiellement la même chose que LinqDataSource: instancie une classe et appelle la méthode que vous spécifiez pour obtenir des données.

Liens utiles: http://msdn.microsoft.com/en-us/library/ms251692(VS.80).aspx http://forums.asp.net/p/1430385/3667394.aspx