Entwickler-Ecke
WinForms - datagridView: Bestimmte Zelle markieren
yndaso - Mo 11.05.09 06:43
Titel: datagridView: Bestimmte Zelle markieren
Hallo zusammen,
mein DatagridView besteht aus 3 Spalten. Spalte 1 und 2 ist ReadOnly=true. In der Spalte 3 sollen
Werte eingegeben werden.
Wie schaffe ich es nun, den Fokus auf die 3. Spalte zu setzen, damit dort sofort Werte eingegeben werden
können. Also Zeile markieren und direkt eintippen, ohne vorher mit TAB auf die Zelle zu navigieren. Ich
kriege zwar hiermit die richtige Spalte markiert, kann aber trotzdem nicht direkt die Werte eingeben:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void dataGridView1_SelectionChanged(object sender, EventArgs e) { if (dataGridView1.Rows[0].Cells[0].Selected || dataGridView1.Rows[0].Cells[1].Selected) { dataGridView1.ClearSelection(); dataGridView1.Rows[0].Cells[2].Selected = true; } } |
Abgesehen davon, dass es nicht funktioniert, finde ich den Code doof, weil ich für jede Zeile so eine If Abfrage bräuchte...
JüTho - Mo 11.05.09 08:36
Hallo,
versuch es einmal unter Verwendung von:
C#-Quelltext
1:
| dataGridView1.CurrentCell = dataGridView1.CurrentRow.Cells[2]; |
Bitte beachte, dass SelectionChanged durch eine solche Änderung neu aufgerufen wird; das passt also höchstwahrscheinlich ganz und gar nicht. "Richtig" dürfte das
RowEnter-Ereignis sein; dort bekommst du auch
e.RowIndex und kannst die gewünschte Zelle direkt festlegen:
C#-Quelltext
1: 2: 3: 4:
| private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) { dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[2]; } |
Gruß Jürgen
yndaso - Mo 11.05.09 08:57
Hallo,
habe deinen Vorschlag integriert
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) { if (dataGridView1.CurrentCell != null && dataGridView1.CurrentCell != dataGridView1.Rows[e.RowIndex].Cells[2]) { dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[2]; } } |
Nun bekomme ich aber folgende Exception:
System.InvalidOperationException wurde nicht behandelt.
Message="Der Vorgang ist ungültig, da er einen Wiedereintrittsaufruf an die SetCurrentCellAddressCore-Funktion zur Folge hat."
JüTho - Mo 11.05.09 09:12
Oh, das wundert mich. Ich hätte erwartet, dass RowEnter nicht erneut ausgelöst wird.
Dann versuche dies (unter Einbeziehung deines ersten Versuchs):
C#-Quelltext
1: 2: 3: 4:
| private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) { dataGridView1.Rows[e.RowIndex].Cells[2].Selected = true; } |
Jürgen
yndaso - Mo 11.05.09 09:22
Hier tritt wieder mein Problem auf.
Wenn ich nun auf die erste Zelle klicke, wird die 3. Zelle zwar markiert, nur
ist diese nicht aktiv.
d.h.:
Ich klick auf Zelle1 -> Zelle3 wird nun markiert .
Nun versuche ich etwas einzugegeben -> geht nicht.
Erst wenn ich wirklich die 3. Zelle anklicke kann ich dort auch Werte eintippen.
yndaso - Mo 11.05.09 09:28
Hier tritt wieder mein Problem auf.
Wenn ich nun auf die erste Zelle klicke, wird die 3. Zelle zwar markiert, nur
ist diese nicht aktiv.
d.h.:
Ich klick auf Zelle1 -> Zelle3 wird nun markiert .
Nun versuche ich etwas einzugegeben -> geht nicht.
Erst wenn ich wirklich die 3. Zelle anklicke kann ich dort auch Werte eintippen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!