Попытка изменить выбранную ячейку при вызове события CellEndEdit - PullRequest
0 голосов
/ 03 апреля 2019

Прежде всего, это первый раз, когда я задаю вопрос, поэтому любая критика, предложения или рекомендации будут высоко оценены.

Я пытаюсь изменить текущую выбранную ячейку после того, как пользователь выбрал допустимый ввод. Я создал 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];) выбранная ячейка должна измениться на Ячейка, которую я пытаюсь обозначить, но это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...