2016-10-31 1 views
0

Ich versuche, Daten aus der Datenbank zu bekommen, ich benutze ado.net. Ich verwende ein Tutorial, und es funktioniert mit einer anderen Seite enthält die Beziehung zwischen 2 Klassen. Aber damit habe ich ein Problem, alle Daten zu bekommen, und ich habe bereits Daten in der Datenbank. dies ist mein Code:Fehler Zeige Daten asp.net WebForms

private void PopulateClients() 
    { 
     List<Client> allClients = null; 
     using (MyDataBaseEntities dc = new MyDataBaseEntities()) 
     { 
      var clients = (from a in dc.Clients 
           select new 
           { 
            a 
           }); 
      if (clients != null) 
      { 
       allClients = new List<Client>(); 
      } 

      if (allClients == null || allClients.Count == 0) 
      { 
       //trick to show footer when there is no data in the gridview 
       allClients.Add(new Client()); 
       myGridview.DataSource = allClients; 
       myGridview.DataBind(); 
       myGridview.Rows[0].Visible = false; 
      } 
      else 
      { 
       myGridview.DataSource = allClients; 
       myGridview.DataBind(); 
      } 
     } 
    } 

ich diese tutorial

Lösung

private void PopulateClients() 
    { 
     List<Client> allClients = null; 
     using (MyDataBaseEntities dc = new MyDataBaseEntities()) 
     { 
      var clients = (from a in dc.Clients 
           select new 
           { 
            a 
           }); 
      if (clients != null) 
      { 
       allClients = new List<Client>(); 
       foreach (var i in clients) 
       { 
        allClients.Add(i.a); 
       } 
      } 

      if (allClients == null || allClients.Count == 0) 
      { 
       //trick to show footer when there is no data in the gridview 
       allClients.Add(new Client()); 
       myGridview.DataSource = allClients; 
       myGridview.DataBind(); 
       myGridview.Rows[0].Visible = false; 
      } 
      else 
      { 
       myGridview.DataSource = allClients; 
       myGridview.DataBind(); 
      } 
     } 
    } 

Antwort

1

sehen Sie keine Daten bekommen, weil Sie die Daten nicht aus der Abfrage fecthed verwenden (das sind innerhalb IEnumerable<Clients> clients).
Sie überprüfen nur, dass clients unterscheidet sich von Null und dann erstellen Sie eine andere Einheit List<Clients> und schließlich binden Sie alle Clients, dass es deutlich leer ist.

  var clients = (from a in dc.Clients 
           select new 
           { 
            a 
           }).ToList(); 
      if (clients != null && clients.Any()) 
      { 
       myGridview.DataSource = clients; 
       myGridview.DataBind(); 
       myGridview.Rows[0].Visible = false; 
      } 
      else 
      { 
       myGridview.DataSource = clients; 
       myGridview.DataBind(); 
      } 
+0

Ich erhalte diese Ausnahme Details: System.NotSupportedException: Datenbindung direkt an einen Speicher-Abfrage (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(). Für ASP.NET-WebForms können Sie das Ergebnis des Aufrufs von ToList() für die Abfrage binden oder Modellbindung verwenden. Weitere Informationen finden Sie unter http://go.microsoft.com/fwlink/?LinkId=389592 (möglicherweise in englischer Sprache). – Juste3alfaz

+0

Korrigiert, jetzt sollte es funktionieren. Der Fehler wurde von Clients verursacht, die standardmäßig 'IEnumerable ' und nicht 'List ' – Tinwor

+0

thnx eine Menge, Mein Problem ist, wie Sie schreiben "nicht die Daten aus der Abfrage fechted" – Juste3alfaz