Laden...

Ausgewähltes Item in ListView aus Mysql Datenbank löschen

Erstellt von Ivy vor 13 Jahren Letzter Beitrag vor 12 Jahren 3.641 Views
I
Ivy Themenstarter:in
64 Beiträge seit 2010
vor 13 Jahren
Ausgewähltes Item in ListView aus Mysql Datenbank löschen

verwendetes Datenbanksystem: Mysql
Hey,
ich bin gerade dabei daten die ein benutzer eingibt in einer myswql datenbank zu speichern und in einer listview anzuzeigen. das funktioniert auch alles einwandfrei. Jedoch möchte ich jetzt, dass der benutzer ein Item in der listview auswählt un diesen über einen Button löschen kann mit dem DELETE-befehl.
jedoch weiß ich nicht wie es funktionieren soll, dass mein programm weiß welches item gerade selektiert ist und gelöscht werden soll?!

vielleicht kann mir ja jemand helfen.

danke
ivy

J
24 Beiträge seit 2011
vor 13 Jahren

Hi,
ich denke damit kannst du rausfinden welches Item gerade ausgewählt ist:
ListView.SelectedItem
http://msdn.microsoft.com/de-de/library/system.windows.forms.listview.selecteditems.aspx

Gruß
Martin

I
50 Beiträge seit 2010
vor 13 Jahren

Hi,

du könntest das ganze über eine Checkbox machen und abfragen ob das Item checked ist oder nicht.

Oder eben mit dem Focus:

listView1.FocusedItem.Index

Das gibt dir eben den Index des momentan markierten Items zurück und um dann z.B. den Datensatz aus der Listview zu löschen sagst du einfach

listView1.Items.RemoveAt(listView1.FocusedItem.Index);
I
Ivy Themenstarter:in
64 Beiträge seit 2010
vor 13 Jahren

hmm ja ich habe das davor schon mit sowas schon probiert:

if (ListView1.SelectedIndices.Count != 0) {
   int index = ListView1.SelectedIndices[0]; 
}

jedoch gibt das ja eine zahl zurück, also zeile 1,2,3 oder 4
Wenn ich eben den DELEtE befehl ausführe dann bringt mir ja eine zahl nicht wikrlich was??!

I
50 Beiträge seit 2010
vor 13 Jahren
DELETE FROM TABELLENNAME WHERE ID = '" + listView1.Items[listView1.FocusedItem.Index].Subitems[0].Text + "'

So würde zum Beispiel dein SQL-Statement heißen wenn du in der 1. Spalte der Listview deine eindeutige ID hast.
Mit näheren Infos könnte man dir auch evtl besser helfen bei den Statements.

I
Ivy Themenstarter:in
64 Beiträge seit 2010
vor 13 Jahren

hmm, ja eine id haben meine einträge bis jetz noch nicht^^ aber könnte ich ja nachtragen.
jedoch glaube ich gibt es ein problem, weil in der listview werden die werte sortiert, dann stimmen die ID's von der DB und die zeilen der listview ja nicht mehr überrein 🤔
was für infos braucht ihr denn noch??

I
50 Beiträge seit 2010
vor 13 Jahren

Naja wäre schön zu wissen wie deine Listview und die Tabelle der Datenbank aufgebaut ist. Dann könnte man den Source theoretisch posten.

Aber du musst das nicht unbedingt an Hand einer ID löschen du kannst die 0 bei Subitems[] mit der jeweiligen "TabellenID" ersetzen und musst halt dann das ID im SQL-Statement dem entsprechend mit dem jeweiligen Spaltennamen ersetzen.

I
Ivy Themenstarter:in
64 Beiträge seit 2010
vor 13 Jahren

ahja^^ das mus ich jetzt paar mal durchlesen um es zu blicken^^ 😁

ja also meine tabelle hat 6 Spalten... dort werden name etc gespeichert. meine listview hat dann natürlich auch 6 spalten wo dann wieder alles was der Benutzer eigegben hat ausgegeben wird.

3.511 Beiträge seit 2005
vor 13 Jahren

@icemanns:
Bitte nicht solche Stringfrickeleien als Beispiel posten. Das ist ein absolutes NoGo.

Immer Parameter benutzen: [Artikelserie] Parameter von SQL Befehlen

Zum Problem:
Jede ListViewItem eine Tag Property. Daran kannst du z.B. das User-Objekt kleben. Wenn jetzt ein Eintrag gelöscht wird, holst du dir einfach das Objekt aus dem Tag und nimmst dann die entsprechende ID. Btw. ist für sowas wohl eher ein DataGridView angebrachter.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

I
50 Beiträge seit 2010
vor 13 Jahren

@Khalid: Danke für den Hinweis werde ich in Zukunft beachten. Hoffe so passt es jetzt.

@Ivy

private void example()
{
	int iTmp = listView1.FocusedItem.Index;
	string sName = listView1.Items[iTmp].Subitems[1].Text;
	string sSQL;
			
	sSQL = "DELETE FROM tblKunden WHERE Name = '" + sName + "'";	
}

Ich geh jetzt mal davon aus das du in der zweiten Spalte in der Listview den Namen hast. Und das die Spalte in der Datenbanktabelle ebenfalls Name heißt.
Dann sollte das hier oben eigentlich funktionieren hab jetzt leider kein VS hier um es zu kompilieren.
Gibt wahrscheinlich auch elegantere Lösung.

I
Ivy Themenstarter:in
64 Beiträge seit 2010
vor 13 Jahren

hey,
super das funktioniert einwandfrei =) danke!!!!

114 Beiträge seit 2006
vor 12 Jahren

@Khalid: Danke für den Hinweis werde ich in Zukunft beachten. Hoffe so passt es jetzt.

Nein tut es nicht, ich geb Dir mal einen Hinweiß und den Tipp auch wirklich Kahilds Link zu folgen.

SQL = "DELETE FROM tblKunden WHERE Name = '" + sName + "'";

And in addition to the darkness there was also me.
And I moved upon the face of the darkness and I saw that I was alone.
Let There Be Light!