Entwickler-Ecke

WinForms - dataGridView eine einzelne Zelle auswählen


okrim - Do 10.04.14 13:35
Titel: dataGridView eine einzelne Zelle auswählen
Hallo an alle,

hätte mal wieder eine Frage und zwar habe ich ein dataGridView wo kommplet ReadOnly true ist, möchte jetzt mit der Maus eine Zeile markieren, wenn ich nun auf den Button Bearbeiten gehe soll in der Markierten Reihe die Spalte "grid_stunden" ReadOnly false sein.

Ich habe folgendes ohne Probleme hinbekommen:

C#-Quelltext
1:
dataGridView1.Rows[1].Cells["grid_stunden"].ReadOnly = false;                    


nur habe ich so ja die zweite Reihe und ich möchte aber das er die Merkierte Reihe nimmt,
wenn ich es so schreibe

C#-Quelltext
1:
dataGridView1.SelectedRows.Cells["grid_stunden"].ReadOnly = false;                    


dann kommt wieder ein Fehler bei Cells, habe schon alles mögliche ausprobiert und auch schon gegooglet aber komm nicht drauch.
Würde mich freuen wenn mir von euch einer einen Tipp geben könnte.

Gruß Mirko


Ralf Jansen - Do 10.04.14 13:51

Wie wars mit dataGridView1.CurrentRow? Oder gleich mit dataGridView1.CurrentCell?


okrim - Do 10.04.14 17:43

Hallo Ralf,

danke für deine Antwort, geht es auch so das ich eine Zeile Markier und dann wenn ich auf bearbeiten gehe wird nur die Zelle "grid_stunden" in der Markierten Zeile ReadOnly false.

Mit folgenden Code:

C#-Quelltext
1:
dataGridView1.CurrentCell.ReadOnly = false;                    

ist es so das ich den Button Bearbeiten drück und dann die Zelle ReadOnly wir die ich danach anklicke.


Ich tu auf folgende weis eine ganze Zeile löschen

C#-Quelltext
1:
2:
3:
4:
foreach (DataGridViewRow drv in dataGridView1.SelectedRows)
{
     dataGridView1.Rows.Remove(drv);
}

kann ich das vieleicht auch irgendwie auf diese Art machen?


Gruß Mirko


Ralf Jansen - Do 10.04.14 17:59

Äh ... ich hab dich wahrscheinlich nicht verstanden rate aber mal trotzdem was du willst;
Wen du ein Bearbeitenmodus für die grid_stunden Spalte willst; Dann setzt alle Spalten des Grid auf ReadOnly (nicht das Grid selbst). Und lass den Bearbeiten Button das ReadOnly Attribut der grid_stunden Spalte ändern;

dataGridView1.Columns["grid_stunden"].ReadOnly = false// oder true

Wenn das Bearbeiten nach dem Verlassen der gerade in Bearbeitetung befindlichen Zelle sofort vorbei sein soll dann setze ReadOnly der Spalte im CellLeave des Grids wieder auf false;


okrim - Do 10.04.14 18:11

ja so in der art soll es sein, nur soll die Spalte grid_stunden nur in der zuvor Selecktierten zeile ReadOnly = false sein.


okrim - Fr 11.04.14 08:58

Hallo Ralf,

vielen Dank nochmal, hab es hin bekommen!!!

Gruß Mirko


okrim - Fr 11.04.14 22:57

Misst das klappt doch nicht, mein Problem ist ich habe ein dataGridView mit drei Spalten, wenn ich eine Zeile Selektiere ist immer eine ganze Zeile Selektiert, also alle drei Zellen.

Jetzt möchte ich gerne das wenn ich eine Zeile Selektiere egal in welche Zelle ich Klicke das nur die dritte Zelle „grid_stunden“ ReadOnly = false ist.

Geht das überhaupt?

Wenn ich es mit

C#-Quelltext
1:
dataGridView1.CurrentCell.ReadOnly = false;                    

probiere, habe ich halt das Problem das wenn ich als Beispiel in die erste Zelle Klicke, dann ist die ganze Zelle Selektiert und wenn ich auf den Button Bearbeiten Klicke, dann ist die erste Zelle ReadOnly = false.

Gruß Mirko


okrim - Fr 11.04.14 23:12

Jetzt so geht es glaube ich

C#-Quelltext
1:
2:
            int zeile = dataGridView1.CurrentCell.RowIndex;
            dataGridView1.Rows[zeile].Cells["grid_stunden"].ReadOnly = false;


Danke nochmal an alle.