Entwickler-Ecke
WinForms - DataGridView alle markierten Zeilen durchlaufen
Talemantros - Mo 21.04.14 13:32
Titel: DataGridView alle markierten Zeilen durchlaufen
Hallo,
ich würde gern in einem DataGridView alle markierten Zeilen durchlaufen und den Wert der ersten Spalte einlesen.
Zum Test wollte ich es mir hier in einer MessageBox ausgeben lassen (später soll es an eine Methode übergeben werden)
C#-Quelltext
1: 2: 3: 4: 5: 6:
| foreach (DataGridViewRow zeile in dgvModul.SelectedRows) { neuPermission.ModulId = (long)zeile.Cells[0].Value;
MessageBox.Show(neuPermission.ModulId.ToString()); } |
Leider erscheint keine Messagebox und irgendwie fühlt es sich so an als ob er in die Schleife nicht rein läuft
Es handelt sich hier um ein DataGridview mit MultiSelect = True;
Danke
Gruß
EDII:
Es hat funktioniert.
Der Fehler lag darin, dass die Eigenschaft SelecetionMode des DataGrids nicht auf "FullRowSelect" gesetzt war.
Ralf Jansen - Mo 21.04.14 18:48
Ähm wenn das ein gebundenes DataGridView ist dann solltest du eher über die gebundenen Objekte gehen und dir deine Informationen da rausholen anstatt aus den Zellen. Ein simple Umformatierung des Grids z.B. die Spaltenreihenfolge und dein Code funktioniert nicht mehr ohne das der Compiler das merkt sondern nur du mit Glück eventuell zur Laufzeit.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| foreach (var row in dgvModul.SelectedRows) { Modul modul = row.DataBoundItem as Modul; if (modul != null) neuPermission.ModulId = modul.ModulId; } |
Talemantros - Do 01.05.14 13:59
Hi,
wie immer möchte ich gern alle Vorschläge annehmen, verstehen und umsetzen.
Also ich hoffe ihr seid noch nicht von den ganzen Fragen genervt ^^
Ich müsste hier mal "doof" 2 Sachen fragen:
1.) Woher kommt das "Modul" bei "Modul modul = row.DataBoundItem as Modul";
2.) Woher weiß er, dass er die Spalte 0 "einlesen" soll?
Vielen Dank
Gruß
Ralf Jansen - Do 01.05.14 14:55
Modul war einfach nur geraten ;) Da die Spalte die du suchtest ModulId hieß hab ich einfach mal angenommen das du eine Menge von Modul Klassen an das Grid gebunden hast.
Und natürlich weiß man da auch nix von Spalte 0. Das Spalte 0 das ist was du suchst wäre doch eher Zufall oder? Üblicherweise darf ein User die Spaltenreihenfolge tauschen oder sie wechseln aus irgendeinem anderen Grund. Insofern sollte man zumindest die Spalten per Namen ansprechen und nicht anhand der Position.
Aber da ich scheinbar das falsche geraten habe was hast du denn wirklich an das Grid gebunden?
Talemantros - Do 01.05.14 15:34
Hi,
das DataGridView enthält Daten, die über eine Methode an das die DataSource Eigenschaft des DataGridViews gebunden wurde.
Die Methode liefert ein DataTable zurück.
Dieses enthält eine Spalte "berechtigungmodulid" und eine Spalte "beschreibung".
Die id soll beim Speichern in eine Datenbank geschrieben werden und deswegen wollte ich sie da auslesen.
Gruß
Ralf Jansen - Do 01.05.14 15:38
Dann eher so
C#-Quelltext
1: 2: 3: 4: 5:
| foreach (var row in dgvModul.SelectedRows) { DataRow row = ((DataRowView)row.DataBoundItem).Row; neuPermission.ModulId = row["berechtigungmodulid"]; } |
Talemantros - Do 01.05.14 16:02
Vielen Dank
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!