Markierte Zeile in DataGridView ermitteln

cuchulainn

Mitglied
Hallo,

ich arbeite mich gerade mit einem kleinen Programm in C# ein. In diesem Programm verwende ich ein DataGridView. Nun möchte ich herausfinden, welche Zeile der Benutzer angeklickt und markiert hat. Ich versuche es mit der Eigenschaft selectedRows, aber da komme ich leider nicht weiter.

Kann mir jemand einen Tipp geben?
 

sheel

I love Asm
Nur zum Zahl bekommen weiß ich jetzt auf Anhieb auch nichts, aber auch möglich wäre ein Event:
System.Windows.Forms.DataGridViewCellEventHandler in das Attribut RowEnter der DataGridView
 

freakbrother

Mitglied
Implementiere z.B. das Event RowEnter deiner DataGridView und du bekommst über DataGridViewCellEventArgs e
(e.RowIndex) die aktuell angewählte Zeilennummer
 

cuchulainn

Mitglied
Vielen Dank für deine Antwort. Ich habe eine Lösung gefunden. Und zwar greife ich mit myDataGridView.selectedRows[i] auf die ausgewählten Zeilen zu und kann sie in einem Objekt vom Typ DataGridViewRow speichern. Mit der Eigenschaft .cells kann ich wiederum auf die einzelnen Zellen der Zeile zugreifen.
Code:
// Erste ausgewählte Zeile.
DataGridViewRow row = myDataGridView.SelectedRows[0];
int zelle1 = (int)row.Cells[0].Value;
int zelle2 = (int)row.Cells[1].Value;

Vielleicht interessiert das irgendwann ja noch jemand anderen ;)
 

freakbrother

Mitglied
No probs :).

Jo geht natürlich auch dann würde ich es aber so machen das ich wirklich alle markierten Zeilen und alle markierten Spalten in einer KeyValue List speichere. Wegen multiselect ;-)
Außerdem musst du aufpassen: du kannst nicht immer davon ausgehen das dein row.Cells - Value wert in einen int - Wert geparst werden kann ;-) Würd ich mit Int.TryParse abfangen.

grobes Beispiel:

List<KeyValuePair<int, DataGridViewCell>> listKeyValRowCell = new List<KeyValuePair<int, DataGridViewCell>>(20);
foreach (DataGridViewRow row in DataGridView.SelectedRows)
foreach (DataGridViewCell cell in row.Cells)
if (cell.Selected)
listKeyValRowCell.Add(new KeyValuePair<int, DataGridViewCell>(row.Index, cell));

aber es gibt viele Wege .. :)
 
Zuletzt bearbeitet: