dataGridView1_CellEndEdit

Liebe/-r Experte/-in,
ich habe folgende code geippt in c#.net2008
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
int X = dataGridView1.CurrentCellAddress.X;
int Y = dataGridView1.CurrentCellAddress.Y;

switch (X)
{
case 0:
if (dataGridView1[0, Y].FormattedValue.ToString() != „“)
{
dataGridView1.CurrentCell = dataGridView1[4, Y];
}

break;

default: break;
}
}

ich möchte dass der Cursor zu Zelle 4 springt wenn die Zelle 0 ungleich 0
bei diesem Code springt aber der cursor zu Zelle 1
gibt’s eine Lösung bei diesen dataGridView1_CellEndEdit

Entschuldige aber ich kann dir nicht wirklich helfen, da ich mehr Experte für VB bin C# oder c++ sind nicht so meine Stärken … … .

Sorry, kenne ,och damit nicht aus.
Gruss

Hallo,

ich bin selber Anfänger in C# und weiß gar nicht, wie ich unter die experten gerutscht bin.

ich kann dir leider nicht weiter helfen, wünsche dir aber viel erfolg bei der problemlösung.

gruß

Moin,

ich kann deinen Code leider nicht nachvollziehen. Sofern ich die CurrentCell innerhalb des Events setzte bekomm ich eine InvalidOperationException. Ich habe eine kleine Klasse geschrieben, bei dem ich den Sprung um 100ms verzögere dann funktioniert es. Nun warum er bei deinem Code auf Zelle eins springt kann ich dir nicht erklären. Es wundert mich auch, dass keine Exception geworfen wird. Axo bei deinem Sprung hasst den Index 4 verwendet da das System 0 basierend ist würdes du eigentlich in Zelle 5 landen.

Schau dir mal meine Klasse an http://pastebin.com/fWebEWpV
Der Konstruktor erwartet einfach dein Datagrid. Du könntest die Klasse einfach im formLoad event initialisieren.

Sollte etwas unklar sein, frag einfach.

Gruß Draco

Hi Nabil,
ich würde sagen, es ist schwer, festzustellen, wo das problem liegt. grundsätzlich scheint deine methode zur festlegung korrekt.

wird der code in der if-anweisung überhaupt aufgerufen?

Mögliche fehler wären, dass das grid überhaupt keine zelle mit der angegebenen position enthält.

Gruß
Salbei

private void dataGridView1_CellEndEdit(object sender,
DataGridViewCellEventArgs e)
{
int X = dataGridView1.CurrentCellAddress.X;
int Y = dataGridView1.CurrentCellAddress.Y;

switch (X)
{
case 0:
if (dataGridView1[0, Y].FormattedValue.ToString() != „“)
{
dataGridView1.CurrentCell = dataGridView1[4, Y];
}

break;

default: break;
}
}

ich möchte dass der Cursor zu Zelle 4 springt wenn die Zelle 0
ungleich 0
bei diesem Code springt aber der cursor zu Zelle 1
gibt’s eine Lösung bei diesen dataGridView1_CellEndEdit

Hallo nabil

Datagridview navigieren ist einwenig mühsam, da sehr viele Events dazwischen schiessen können.
Wenn du die Zelle aktivieren willst, musst du sie noch selektieren nach dem aktiv setzen.
Aber ich glaub nicht, dass der nachstehende code zu deinem gewünschten ergebnis führt, weil er nur funktioniert, wenn du die zeile verlässt (mit Enter oder mit der pfeiltaste). Wenn du mit TAB oder mit der Pfeiltaste auf der gleichen zeile aus der zelle navigierst, bleibt er auf der nächsten zelle (z.B. die der spalte 2) stehen. Hinzu kommt, dass wenn du mit Enter oder mit der Pfeiltaste nach unten navigierst (nach der Eingabe eines wertes in der spalte 0), die zelle in der neuen zeile gewählt wird…
Das Problem liegt an der Reihenfolge der aufgerufenen Events des Datagridviews. CellEndEdit wird z.B. vor RowLeave aufgerufen, und somit hast du dann den komischen effekt, dass er die zelle in der neuen linie auswählt.
evtl. gibt es noch bessere events für den code…probier mal, sonst kommst wieder.

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
if (dataGridView1[0, e.RowIndex].FormattedValue.ToString() != „“)
{
dataGridView1.CurrentCell = dataGridView1[3, e.RowIndex];
dataGridView1[3, e.RowIndex].Selected = true;
}
}
}

Guten Morgen!

Ich würde aus dem Bauch heraus gar nicht über die CurrentCellAdress gehen, sondern eher sowas wie

if (dataGridView1.CurrentRow.Cells[0].FormattedValue.ToString() != „“)
{
dataGridView1.CurrentCell = dataGridView1.CurrentRow.Cells[3];
}

versuchen, weil das direkt auf die Row- und Column-Indizes geht.

Gruß,
René

Danke, habe ausprobiert hat leider nicht geklappt villeicht haben eine andere Lösung