C# 在c中单击CheckBoxCell时,将插入符号移动到DataGridViewTextBoxCell#

C# 在c中单击CheckBoxCell时,将插入符号移动到DataGridViewTextBoxCell#,c#,datagridview,C#,Datagridview,我有一个DataGridView,有两列 Column1类型:DataGridViewCheckBoxColumn Column2类型:DataGridViewTextBoxColumn 单击列1中的单元格时,插入符号/光标应移动到列2 下面是代码,但它不起作用 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { DataGridView

我有一个DataGridView,有两列

Column1类型:DataGridViewCheckBoxColumn
Column2类型:DataGridViewTextBoxColumn

单击
列1
中的单元格时,插入符号/光标应移动到
列2

下面是代码,但它不起作用

    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;
            }
        }   
    }
任何帮助都将不胜感激

问候
合子

两种解决方案:

  • 修复两个错误:
    if语句
    的计算结果为
    false
    ,但即使它通过了,下一行也会抛出错误
  • 简洁明了的方法

  • 1。修复程序

    声明:

    if (Convert.ToBoolean(_row.Cells[0].Value))
    
    当第一次单击单元格时,
    Value
    null
    时,计算结果为
    False
    。将此更改为:

    if (_row.Cells[0] is DataGridViewCheckBoxCell)
    
    当计算结果为
    True
    时,以下行抛出
    InvalidCastException

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

  • 将索引1更改为0
  • 尝试将行单元格[1]作为DataGridViewCheckBoxCell。但是
    chk
    将为
    null
  • 拆下管路。你无论如何都不会用它
  • 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);
      }
    }
    
    请参阅: