尝试更改CellEndEdit事件调用上的选定单元格

时间:2019-04-03 17:12:06

标签: c# winforms datagridview

首先,这是我第一次发布问题,因此非常感谢任何批评,建议或指导。

在用户选择有效输入后,我试图更改当前选定的单元格。我创建了一个DataGridView,它一次使用两行作为用户输入。用户在“固定”单元格中完成编辑后,将调用CellEndEdit事件,我将为另一组输入添加并自定义另外两行。然后,我希望显示给用户的选定单元格是新的“修复”单元格(Dgv2.Row [i] .Cells [2])。

我首先尝试了简单的Dgv2.CurrentCell = Dgv2.Rows [cSelect] .Cells [2]; 在先前的项目中为我工作过...目前看来对我没有任何帮助。我已经尝试了BeginEdit = true和上面的代码,但还是没有。

我还尝试取消选择当前单元格,并尝试突出显示然后设置当前单元格,如下面的代码所示。在过去的两天里,我已经仔细阅读了MSDN和任何相关的Stack Overflow帖子,发现自己已经尝试过了。您可以在下面的代码段中看到我正在尝试的操作。

再次提出任何批评,指点或建议会很有帮助。

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];),所选单元格应更改为我试图指定它的单元格,但是没有。

0 个答案:

没有答案