2016-05-17 4 views
0

Ich habe eine Abfrage wie folgt aus:Datenquelle ist ein ungültiger Typ. Es muss entweder ein IListSource, IEnumerable oder IDataSource

var count = db.Employees.Count (x =>(x.Salary >0)); 
Grid1.DataSource = count.ToString(); 
Grid1.DataBind(); 

Es funktioniert gut. Warum zeigt Grid jedoch die Ausgabespalte Spalte an?

+2

Was bedeutet es funktioniert? Ihre Abfrage gibt ein 'int' zurück. Sie können keine Integer als Datenquelle für eine grdiview verwenden. –

+0

wo ich int –

+0

verwendet wurde Hier: 'var count = db.Employees.Count (x => (x.Salary> 0))'. Ersetzen Sie 'var' durch' int' und Sie werden feststellen, dass es kompiliert wird, weil 'Count' ein' int' zurückgibt. Ein Gridview zeigt mehrere Zeilen mit mehreren Spalten an. Vielleicht möchten Sie 'Where' anstelle von' Count' verwenden. –

Antwort

0

Ihre Abfrage gibt eine int zurück. Sie können keine Ganzzahl als Datenquelle für eine Gridview verwenden. Die Fehlermeldung ist selbsterklärend: Die DataSource muss ein Typ sein, der IListSource, IEnumerable oder IDataSource implementiert (eine GridView zeigt normalerweise mehrere Elemente an).

Vielleicht möchten Sie Where statt Count verwenden:

var employeeWithSalary = db.Employees.Where(x => x.Salary > 0); 
Grid1.DataSource = employeeWithSalary; 
Grid1.DataBind(); 
+0

wenn ich über Abfrage ausgeführt wurde, bekomme ich diesen Fehler 'Datenbindung direkt an eine Speicherabfrage (DbSet, DbQuery, DbSqlQuery, DbRawSqlQuery) wird nicht unterstützt. Füllen Sie stattdessen ein DbSet mit Daten aus, z. B. indem Sie Load auf dem DbSet aufrufen und dann an lokale Daten binden. Für WPF binden Sie an DbSet.Local. Für WinForms binden Sie an DbSet.Local.ToBindingList(). ' –

Verwandte Themen