Zum Inhalt springen

C# DataGridView Selektierte Row


bi0s

Empfohlene Beiträge

Tag zusammen,

ich habe ein DataGridView mit einer Datenbank verbunden,

nun möchte ich das wenn ich eine Row komplett selektiere und auf entfernen drücke, diese auch in meiner SQL Datenbank verschwindet...

Das Event:

private void dataGridView3_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)

habe ich bereits, wird auch wunderbar ausgelöst..

Ich kann dann einfach per SQL befehl:

DELETE FROM userWHERE UserID= '12'

den kunden löschen..

Alles wunderbar, nur ist mein DataGribView dynamisch, sprich ich weiss nicht welche UserID wer nun hat.. Sprich:

Ich suche einen Befehl wie ich an die ID komme aus der Row die ich gerade selektiert habe...

Sprich sowas wie:

dataGridView3[0, Zahl_der_Row].Value.ToString()

Mein Problemdabei ist, wie komme ich an Zahl_der_Row ?

Vielen dank schonmal im vorraus !

Grüße, Patrick

Link zu diesem Kommentar
Auf anderen Seiten teilen

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)

        {

            textBox1.Text = Convert.ToString(dataGridView1.Rows[dataGridView1.SelectedCells[0].RowIndex].Cells[dataGridView1.SelectedCells[0].ColumnIndex].Value);

        }

Da muss man allerdings auf den jeweiligen Zelleninhalt klicken, ich schau mal nachher, wenn ich noch Zeit find, ob ich was besseres für dich finde :D:D:D

Link zu diesem Kommentar
Auf anderen Seiten teilen

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)

        {

            textBox1.Text = Convert.ToString(dataGridView1.Rows[dataGridView1.SelectedCells[0].RowIndex].Cells[dataGridView1.SelectedCells[0].ColumnIndex].Value);

        }

Da muss man allerdings auf den jeweiligen Zelleninhalt klicken, ich schau mal nachher, wenn ich noch Zeit find, ob ich was besseres für dich finde :D:D:D

Vielen dank schonmal,

leider funktioniert es bei mir nicht so wie erhofft ^^

Wenn ich oben auf die Reiter klicke, bekomme ich ne messagebox mit null inhalt..

Hab dein Code halt inner MSGBox gehauen..

Ich bräuchte die row zahl..

Sprich:

Name - User - ID - Email

bi0s - 12 - 12 - 12@12.de

heinz - 13 - 13 - 13@13.de

peter - 14 - 14 - 14@14.de

wenn ich nun heinz vorne anklicke, wird die ganze row ja nach links ausgewählt, wenn ich dann Entf drücke verschwindet heinz komplett aus dem dataGridView, um sie auch aus der SQL DB zu löschen, bräuchte aber seine ID, und an die komme ich nur, wenn ich die row zahl weiss.. Sprich in dem fall die 2 oder wenn man bei 0 anfängt zu zählen die 1..

Hoffe du weisst was ich meine ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mach das nicht so, der Ansatz ist falsch.

Du hast ja nicht das Grid an die Datenbank an die Datenbank gebunden sondern die DataTable oder ein Dataview. Wenn du die Row aus der .NET Table löscht, kannst du im Anschluss den DataAdapter oder TableAdapter nehmen mit dem die DataTable befüllt wurde, und myAdapter.Update( myDataTable ) verwenden. Der erkennt die gelöschte Row automatisch und generiert das SQL Command automatisch.

Jetzt musst du nur noch wissen wie du die DataRow aus der DataTable entfernst: Auch das funktioniert automatisch! Du musst im DataGridView die Property AllowUserToDeleteRows auf True setzen, das wars.

Die ID der ersten selektierten Zeile ermittelst du übrigens so:

if (this.dataGridView1.SelectedRows.Count > 0)

{

int rowPosition = this.dataGridView1.SelectedRows[0].Index;

}

Aber wie gesagt...brauchst du ja nicht...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht ist noch zu sagen das man für das löschen aus dem Grid Entf drücken muss und vorher die komplette Row markiert sein muss. Willst du einen eigenen Löschen Button bauen machst du einfach ein:

foreach (DataRow selectedRow in this.dataGridView1.SelectedRows)

{

selectedRow.Delete();

}

myTableAdapter.Update ( myDataSet );

Bearbeitet von Argbeil
Link zu diesem Kommentar
Auf anderen Seiten teilen

HI,

danke für deine Antwort !

Ich hab nur das Problem das ich garkein Adapter benutze...

Mein Code um das DatagridView zu füllen sieht so aus:



private void Form1_Load(object sender, EventArgs e)

        {

            InitializeDataGridView();

            dataGridView1.Rows.Clear();


            MySqlConnection myConne

ction = new MySqlConnection(myConnectionString);


            MySqlCommand command = myConnection.CreateCommand();

            command.CommandText = "SELECT * FROM artikel";

            MySqlDataReader Reader;

            myConnection.Open();

            Reader = command.ExecuteReader();

            while (Reader.Read())

            {

                string row = "";

                for (int i = 0; i < Reader.FieldCount; i++)

                {

                    row += Reader.GetValue(i).ToString() + ", ";

                }

                string rowArtNr = Reader.GetValue(0).ToString();

                string rowName = Reader.GetValue(1).ToString();

                string rowPreisEK = Reader.GetValue(2).ToString();

                string rowPreisVK = Reader.GetValue(3).ToString();

                string rowMenge = Reader.GetValue(4).ToString();

                string rowKat = Reader.GetValue(5).ToString();


                dataGridView2.Rows.Add(new string[] { rowArtNr, rowName, rowKat, rowMenge, rowPreisEK, rowPreisVK });

            }

            myConnection.Close();

}


Damit holt er die datenbank ins datagribview...

Dein Code mit dem

int rowPosition = this.dataGridView1.SelectedRows[0].Index;

funktioniert bei mir leider nicht so...

entweder bekomme ich ne null wieder,

oder nen fehler

System.ArgumentOutOfRangeException: Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein.

Parametername: index

Wenn ich die if schleife drum lasse tut sich garnichts :(

Mit dem Adapter hört sich verdammt gut an, das würde mir einiges vereinfachen... ich update auch die datenbank warscheinlich viel zu kompliziert wenns mit dem adapter mit einem befehl getan ist :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Hi, du hast geschrieben dass Problem wäre das du keinen DataAdapter verwendest. Das ist allerdings richtig ;-)

Wie bereits geschrieben ist dein Ansatz nicht richtig für eine .NET Applikation. Du kannst das Problem zwar so lösen, aber es ist keine optimale Vorgehensweise, ADO.NET ist ja gerade deswegen so mächtig weil es dir große Teile des SqlCodes automatisch generiert. zudem wird der Code mit der DataTable wesentlich kleiner.

Bei den MySql .NET Tools muss auch ein MySqlDataAdapter dabei sein. Du nimmst deine Connection und dein bestehendes Command und machst dann sowas:

MySqlDataAdapter adapter = new MySqlDataAdapter ( connection, command);

MySqlCommandBuilder builder = new SqlCommandBuilder ( adapter );

DataTable myDataTable = new DataTable();

adapter.Fill( myDataTable );

dataGrid.DataSource = myDataTable;

- fertig!

Die Änderungen werden jetzt in deiner DataTable durchgefüht. Um die Änderungen in der Datenbank zu sicher machst du ein:

adapter.Update ( myDataTable );

-- und das wars. An der Stelle werden die durch den Command Builder generierten SqlStatements verwendet und die Änderungen durch ein DiffGramm innerhalb der DataTable nachvollzogen und in die Datenbank geschrieben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...