2016-12-12 2 views
0

Ich hoffe, Sie können mir bei diesem Problem helfen.Erhalten Sie alle Elemente einer Liste in Listbox

Ich kann meine Biere nicht in der Listbox bekommen. Wenn ich versuche, dies zu tun, bekomme ich diese in meinem Listbox: enter image description here

Ich weiß nicht, wie ich dieses Objekt in einer Listbox erhalten

ich es mit dem folgenden Code versucht: Hier bitte ich um die Datenbank zu Wählen Sie alle Merkmale aus dem Beertable.

public List <Beer> ReadBeers() 
{ 
    string query = "SELECT * FROM beer"; 
    MySqlCommand cmd = new MySqlCommand(query, conn); 
    List<Beer> beerList = new List <Beer>(); 

    using (MySqlDataReader reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      string name = reader.GetString(1); 
      string brand = reader.GetString(2); 
      int dato = reader.GetInt32(3); 
      int beerType = reader.GetInt32(4); 
      Beer myBeer = new Beer(name, brand, dato, beerType); 
      beerList.Add(myBeer); 
      Console.WriteLine(); 
     } 
    } 
    return beerList; 
}  

Dies ist die listbox von der Form i mit korrekten Informationen füllen wollen!

private void fillListbox_Click(object sender, EventArgs e) 
{ 
    beerlistBox.Items.Clear(); 
    dbbeer.DatabaseConnect(); 
    List<Beer> beerList = dbbeer.ReadBeers(); 
    foreach (Beer beer in beerList) 
    { 
     beerlistBox.Items.Add(beer); 
    } 
    dbbeer.DatabaseDisconnect(); 
} 

The Class Beer:

class Beer 
{ 
    private Database databaseconnection = new Database(); 

    public enum Biersoort 
    { 
     Alcoholarm, 
     Alcoholvrij, 
     Ale, 
     Alt, 
     Amber, 
     Blond, 
     Bock, 
     Champagnebier, 
     Cider, 
     Dortmunder, 
     Dubbel, 
     Dunkel_weizen, 
     Eisbock, 
     Faro, 
     Fruit, 
     Gerstebier, 
     Gerstewijn, 
     Geuze, 
     Gose, 
     Gruit, 
     Herfstbok, 
     Honingbier, 
     Kellerbier, 
     Koffiebier, 
     Kriek, 
     Lager, 
     Lambiek, 
     Lentebier, 
     Lentebok, 
     Light, 
     Mexicaans, 
     Oud_bruin, 
     Pale_Ale, 
     Pils, 
     Porter, 
     Quadrupel_bier, 
     Radler, 
     Rosé, 
     Saison, 
     Schwarzbier, 
     Stout, 
     Tequila_bier, 
     Tripel_bier, 
     Vruchtenbock, 
     Weizen, 
     Whiskeybier, 
     Winterbier, 
     Wit 
    }; 


    private string name; 
    private string brand; 
    private int dato; 
    private int beertype; 

    public Beer(string pName, string pBrand, int pDato, int pBeertype) 
    { 
     name = pName; 
     brand = pBrand; 
     dato = pDato; 
     beertype = pBeertype; 
    } 

    public void insertDatabase() 
    { 
     databaseconnection.DatabaseInsert("INSERT INTO beer(name, brand, dato, beertype) VALUES('" + name + "' , '" + brand + "' ,'" + dato + "' , '" + beertype + "')"); 
    } 

} 

}

+0

Wenn Sie die Anwendung Debugging durch die While-Schleife debuggen, welche Werte erhalten Sie für die Reader-Objekte .. auch würde ich empfehlen, die Reader-Felder von deren Name nicht Indexposition – MethodMan

+0

Wie kann ich das machen? –

+0

Verwenden Sie auch nicht '*' in Ihrer Abfrage. Dies führt in den meisten Fällen dazu, dass Sie Indizes umgehen oder eine indexierte Suche verwenden oder einfach nur die Daten aus einem Index verwenden, sofern verfügbar (dies führt auch dazu, dass Spalten verwendet werden, die Sie niemals zum Abrufen verwenden). Und schließlich, weil Sie nach Index suchen, was passiert, wenn die Spalten jemals neu geordnet werden? –

Antwort

3

Sie benötigen List<Beers> als DataSource auf Ihre ListBox und stellen Sie die richtige DataTextField Eigenschaft zu binden. Stellen Sie sicher, dass Beer Klassenvariablen, die in Wert- oder Textfeldern verwendet werden, als Public markiert sind.

beerlistBox.DataSource = dbbeer.ReadBeers(); 
beerlistBox.DataTextField = "name"; // This should be beer's name property 
beerlistBox.DataBind(); 
+0

DataTextField nicht angezeigt, wenn ich versuche, Ihren Vorschlag zu tun. –

+0

Sie geben uns die Beer-Klassendefinition nicht, also vermutete ich, dass die Namenseigenschaft "Name" heißt. Ändere das auf die Namenseigenschaft des Bieres. – JanneP

+0

Ich werde die Klasse Bier hinzufügen, vielleicht können Sie Ihre Antwort verbessern –

0

Sie hinzufügen, das Objekt selbst, also ToString() Methode der Basisklasse aufgerufen wird (alle Objekte in .NET erben Object Class sind Ihre Bier-Klasse) und das Verfahren die ProjectName.ClassName zurückkehrt. Sie müssen die Eigenschaft Ihres Bier Klasse verwenden: name

beheben diese Zeile: beerlistBox.Items.Add(beer.name);

private void fillListbox_Click(object sender, EventArgs e) 
{ 
    beerlistBox.Items.Clear(); 
    dbbeer.DatabaseConnect(); 
    List<Beer> beerList = dbbeer.ReadBeers(); 
    foreach (Beer beer in beerList) 
    { 
     beerlistBox.Items.Add(beer.name); // use the property "name" 
    } 
    dbbeer.DatabaseDisconnect(); 
} 

alternative Lösung ist der Code zu halten, ohne jede Änderung und überschreiben die ToString() Methode innerhalb Bier Klasse zum Beispiel:

Verwandte Themen