我有一个有2列的DataGridView
Column1类型: DataGridViewCheckBoxColumn Column2类型: DataGridViewTextBoxColumn
当单击Column1中的单元格时,卡雷特/光标应该移动到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;
}
}
}任何帮助都将不胜感激。
问候
合子
发布于 2015-05-12 16:57:04
有两种解决办法:
if-statement的计算结果为false,但是即使它通过了,下一行也会抛出一个错误。1.修复
声明:
if (Convert.ToBoolean(_row.Cells[0].Value))当第一次单击单元格时,当False是null时,计算结果为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);
}
}https://stackoverflow.com/questions/30195302
复制相似问题