Прежде всего, это первый раз, когда я задаю вопрос, поэтому любая критика, предложения или рекомендации будут высоко оценены.
Я пытаюсь изменить текущую выбранную ячейку после того, как пользователь выбрал допустимый ввод. Я создал DataGridView, который использует две строки одновременно для ввода данных пользователем. После того, как пользователь закончил редактирование в ячейке «Fix» и вызвано событие CellEndEdit, я добавляю и настраиваю еще две строки для другого набора входных данных. Затем я хочу, чтобы выбранная ячейка, отображаемая пользователю, была новой ячейкой «Fix» (Dgv2.Row [i] .Cells [2]).
Сначала я попробовал простое Dgv2.CurrentCell = Dgv2.Rows [cSelect] .Cells [2];
который работал для меня в предыдущем проекте ... он, кажется, ничего не делает для меня в настоящее время. Я попытался BeginEdit = true и приведенный выше код, но все равно ничего.
Я также пытался отменить выбор текущей ячейки и выделить ее, а затем установить текущую ячейку, как показано в коде ниже. За последние два дня я просмотрел MSDN и все соответствующие сообщения о переполнении стека и нашел только то, что уже пытался сделать. Вы можете увидеть то, что я пытаюсь сделать в моем фрагменте кода ниже.
Опять любая критика, указатели или советы очень полезны.
private void Dgv2_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
int rwIndex = Dgv2.CurrentRow.Index;
int Count = Dgv2.RowCount;
DataGridViewTextBoxCell fixCell = new DataGridViewTextBoxCell();
DataGridViewTextBoxCell latCell = new DataGridViewTextBoxCell();
DataGridViewTextBoxCell longCell = new DataGridViewTextBoxCell();
DataGridViewTextBoxCell ElevCell = new DataGridViewTextBoxCell();
fixCell.Value = "";
latCell.Value = "";
longCell.Value = "";
ElevCell.Value = "";
for (int i = 0; i < Count; i++)
{
if (Dgv2.Rows[i].Index == (Count - 2))
{
if (Dgv2.Rows[i].Cells[2].Value != null)
{
fixCell.Value = Dgv2.Rows[i].Cells[2].Value;
}
}
}
if (fixCell.Value.ToString() != "")
{
Autotext1.Text = fixCell.Value.ToString().ToUpper();
fixCell.Value = Autotext1.Text;
int index = Airports.IndexOf(Autotext1.Text);
if (Autotext1.Text != "" && Autotext1.TextLength == 3 && index <= 7184 && index > 0)
{
// Update all other properties of row
string latitude = Latitude[index];
string longitude = Longitude[index];
string elevation = Elevation[index];
latCell.Value = latitude;
longCell.Value = longitude;
ElevCell.Value = elevation;
for (int i = 0; i < Count; i++)
{
if (Dgv2.Rows[i].Index == (Count - 2))
{
Dgv2.Rows[i].Cells[2].Value = fixCell.Value;
Dgv2.Rows[i].Cells[3].Value = latCell.Value;
Dgv2.Rows[i].Cells[4].Value = ElevCell.Value;
}
if (Dgv2.Rows[i].Index == (Count - 1))
{
Dgv2.Rows[i].Cells[3].Value = longCell.Value;
}
}
//if current row is last row add two new rows and get style
if ((Count - 2) == rwIndex && latCell.Value.ToString() != "")
{
Dgv2.Rows.Add(2);
Dgv2GetSpecColumns();
int cSelect = (Dgv2.RowCount - 2);
Dgv2.BeginEdit(true);
// Deselect current row
Dgv2.Rows[rwIndex].Cells[2].Selected = false;
// Highlight last waypoint
Dgv2.Rows[cSelect].Cells[2].Selected = true;
// Select last waypoint
Dgv2.CurrentCell = Dgv2.Rows[cSelect].Cells[2];
}
}
}
}
Итак, я ожидаю, что когда я добавляю две новые строки, и эта строка из моего примера проходит (Dgv2.CurrentCell = Dgv2.Rows [cSelect] .Cells [2];) выбранная ячейка должна измениться на Ячейка, которую я пытаюсь обозначить, но это не так.