在c#中单击CheckBoxCell时将Caret移动到DataGridViewTextBoxCell

时间:2015-05-12 15:26:14

标签: c# datagridview

我有一个包含2列的DataGridView

  

Column1类型:DataGridViewCheckBoxColumn
     Column2类型:DataGridViewTextBoxColumn

单击Column1中的单元格时,应将Caret / Cursor移动到Column2

代码如下,但不起作用。

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        DataGridViewRow _row = dataGridView1.Rows[e.RowIndex];
        if (Convert.ToBoolean(_row.Cells[0].Value))
        {
            DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)_row.Cells[1];
            _row.Cells[1].ReadOnly = false;
            DataGridViewCell textBoxCell = _row.Cells[1];
            if (textBoxCell != null)
            {
                dataGridView1.CurrentCell = textBoxCell;
                dataGridView1.BeginEdit(true);
                ((TextBox)dataGridView1.EditingControl).SelectionStart = 0;
            }
        }   
    }

非常感谢任何帮助。

问候
合子

1 个答案:

答案 0 :(得分:0)

两种解决方案:

  1. 修正您的两个错误:if-statement评估为false,但即使通过,下一行也会产生错误。
  2. 清洁简洁的方法。
  3. <强> 1。修复

    声明:

    if (Convert.ToBoolean(_row.Cells[0].Value))
    
    第一次单击该单元格时{p} FalseValue时,

    评估为null。将其更改为:

    if (_row.Cells[0] is DataGridViewCheckBoxCell)
    

    当此评估结果为True时,以下行会抛出InvalidCastException

    DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)_row.Cells[1];
    

    或者:

    1. 将索引1更改为0.
    2. 试试_row.Cells[1] as DataGridViewCheckBoxCell。不过,chk将是null
    3. 删除该行。无论如何你还没有使用它。
    4. <强> 2。清理

      替换整个方法:

      private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
      {
        if (dataGridView1.CurrentCell is DataGridViewCheckBoxCell)
        {
          dataGridView1.CurrentCell = dataGridView1.CurrentRow.Cells[e.ColumnIndex + 1];
          dataGridView1.BeginEdit(true);
        }
      }