C# Löschen aus der ListBox

AirForce

Lt. Junior Grade
Registriert
Okt. 2010
Beiträge
296
Schreibe ein Programm das eine Auktion simuliert. Die Daten kommen aus der SQL Datenbank. Das auslessen der Daten aus der Datenbank geht ohnge probleme. Jetzt möchte ich das wenn man auf einen eintrag in der ListBox klickt das es aus der Datenbank gelöscht wird.
Der Code zu löschen aus der Datenbank:
Code:
 if (listBox1.SelectedIndex > 0)
            {
                SqlConnection conn = new SqlConnection(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=AukcionVerkauf;Integrated Security=True");
               
  
                SqlCommand delete = new SqlCommand(String.Format("DELETE FROM Aukcion WHERE AukcionID = {0}", listBox1.GetItemText(listBox1.SelectedItem)), conn);
                try
                {
                    conn.Open();
                    delete.ExecuteNonQuery();

                }
                catch(Exception xpe)
                {
                    System.Windows.MessageBox.Show(xpe.ToString());
                }
                finally
                {
                    conn.Close();
                }
            }

Aber ich erhalte folgenden fehler: 'ListView' does not contain a definition for 'GetItemText' and no extension method 'GetItemText' accepting a first argument of type 'ListView' could be found (are you missing a using directive or an assembly reference?)
Habe die Reference Windows.Forms hinzugefügt und der Fehler bleibt.
 
Hi,
ein einfaches "listebox1.SelectedItem.ToString()" enthält ja schon den Text.


ich würde nicht auf "listbox1.SelectedIndex" prüfen (der kann durchaus 0 sein), sondern auf "listbox1.SelectedItem != null"

//Kalleberlin
 
Es läst sich kompilieren doch statt zu löschen wird folgende Fehlermeldung angezeigt: System.Data.SqlClient. SqlException (0x80131904) The multi part idintifier System.Data.DataRowView could not be found.

Die Datenbank:
CREATE TABLE Aukcion
(
AukcionID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
ProduktName nvarchar(20) NOT NULL,
ErstPreis int NOT NULL,
JetzigerPreis int NOT NULL
);
 
Hi, was genau steht denn in der listbox? Ich gehe davon aus das in der listbox nicht die id's sondern der Produktname oder ähnliches stehen, weshalb kalleberlin's Lösung nicht 100%ig ist. Da müsstest du den delete String anpassen.

Für den Fall das der Inhalt der listbox die gleiche Soritierung wie deine Tabelle hat sollte "listBox1.SelectedIndex" funktionieren.

Kleiner Tipp noch, mit "using" kannst du das ganze ohne try catch finally lösen, das finde ich persönlich übersichtlicher ;)

Gruß
njester
 
listBox1.SelectedIndex kann nicht die richtige ID sein, weil wenn man z.B Eintrag 0 per Klick löscht gibt es diesen Eintrag ja nicht mehr in der DB, aber das Item was vorher auf 1 war ist danach 0 (ich gehe davon aus das der sichtbare Eintrag dann auch gelöscht wird, sonst könnte der gelöschte ja nochmal angeklickt werden).
Du musst vielmehr beim erstellen/auslesen der ProduktNamen auch die ID's mit auslesen und in einer Liste merken.

Du kannst auch eine separate Klasse erstellen die die ID für dich merkt z.B so:
Code:
public class ProduktEintrag {
    String strProduktName;
    int ID;

    public ProduktEintrag(String strProduktName, int ID) {
        this.strProduktName = strProduktName;
        this.ID = ID;
    }

    public int getID() {
        return ID;
    }

    public override String ToString() {
        return strProduktName;
    }
}

Dann Einträge aus der DB der listBox hinzufügen:
listBox1.Items.Add(new ProduktEintrag("Hallo", 12));
listBox1.Items.Add(new ProduktEintrag("Welt", 34));

An die ID kommst du dann später wieder per:

Console.WriteLine("ID:" + ((ProduktEintrag)listBox1.SelectedItem).getID() );
 
Zurück
Oben