bi0s Geschrieben 5. Juni 2008 Teilen Geschrieben 5. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SoL_Psycho Geschrieben 5. Juni 2008 Teilen Geschrieben 5. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bi0s Geschrieben 5. Juni 2008 Autor Teilen Geschrieben 5. Juni 2008 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 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SoL_Psycho Geschrieben 6. Juni 2008 Teilen Geschrieben 6. Juni 2008 Muss leider gleich zur Arbeit, aber hast du dir schonmal die ActiveRow angeschaut? Laut Beschreibung wäre es das, was du suchst... Ich schaus mir heut Nachmittag mal an, wenn es doch nicht das erhoffte sein sollte Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 6. Juni 2008 Teilen Geschrieben 6. Juni 2008 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SoL_Psycho Geschrieben 6. Juni 2008 Teilen Geschrieben 6. Juni 2008 Wenn wir hier schon nen Experten haben (schöne Lösung :uli): Was für ein Event wird eigentlich getriggered, wenn ich ne Zeile anklicke im Gridview? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 6. Juni 2008 Teilen Geschrieben 6. Juni 2008 (bearbeitet) 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 6. Juni 2008 von Argbeil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 6. Juni 2008 Teilen Geschrieben 6. Juni 2008 Das mit der Zeile weiß ich nicht auswendig, vermutlich SelectedRowChanged oder SelectionChanged...RowSelected, RowClicked oder sowas in der Art, das kannste aber in dem Event-Inspektor sehr schnell rausfinden denke ich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SoL_Psycho Geschrieben 6. Juni 2008 Teilen Geschrieben 6. Juni 2008 Super, schau ich nachher mal, danke jedenfalls schonma Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SoL_Psycho Geschrieben 6. Juni 2008 Teilen Geschrieben 6. Juni 2008 Yup SelectionChanged wars... Habe ein wenig gebraucht, bis ich das unterschiedliche Anzeigen von den vorhandenen Events zwischen VB.NET und C# verstanden habe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bi0s Geschrieben 6. Juni 2008 Autor Teilen Geschrieben 6. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bi0s Geschrieben 7. Juni 2008 Autor Teilen Geschrieben 7. Juni 2008 Keiner mehr ne Idee wie ich sonst an die Row ID rankomme ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
msc84 Geschrieben 17. Juni 2008 Teilen Geschrieben 17. Juni 2008 Stichwörter SelectedRow, Currentrow... Weiss es grade nicht mehr auswendig. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Argbeil Geschrieben 17. Juni 2008 Teilen Geschrieben 17. Juni 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.