Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mo 21.04.14 13:32 
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)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 01.05.14 15:38 
Dann eher so

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
foreach (var row in dgvModul.SelectedRows)
{
    DataRow row = ((DataRowView)row.DataBoundItem).Row;    
    neuPermission.ModulId = row["berechtigungmodulid"];
}
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Do 01.05.14 16:02 
Vielen Dank