我有一个包含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;
}
}
}
非常感谢任何帮助。
问候
合子
答案 0 :(得分:0)
两种解决方案:
if-statement
评估为false
,但即使通过,下一行也会产生错误。<强> 1。修复强>
声明:
if (Convert.ToBoolean(_row.Cells[0].Value))
第一次单击该单元格时{p} False
为Value
时,评估为null
。将其更改为:
if (_row.Cells[0] is DataGridViewCheckBoxCell)
当此评估结果为True
时,以下行会抛出InvalidCastException
:
DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)_row.Cells[1];
或者:
_row.Cells[1] as 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);
}
}