我在datagridview中遇到问题。我在keydown事件中做了一些代码来更改选项卡焦点但是当tab到达列的最后一个时它会给出错误
“当前单元格不能设置为不可见单元格”。
我让最后一个单元格看不见,因为我不希望看到那个单元格。
我在KeyDown事件中编写了以下代码
private void m3dgvDepositDetails_KeyDown(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Tab && notlastColumn)
{
e.SuppressKeyPress = true;
int iColumn = m3dgvDepositDetails.CurrentCell.ColumnIndex;
int iRow = m3dgvDepositDetails.CurrentCell.RowIndex;
if (iColumn == m3dgvDepositDetails.Columns.Count - 1)
m3dgvDepositDetails.CurrentCell = m3dgvDepositDetails[0, iRow + 1];
else
m3dgvDepositDetails.CurrentCell = m3dgvDepositDetails[iColumn + 1, iRow];
}
}
catch (Exception ex)
{
CusException cex = new CusException(ex);
cex.Show(MessageBoxIcon.Error);
}
}
答案 0 :(得分:4)
错误非常明显:您将CurrentCell
设置为不可见单元格并且禁止使用,这意味着单元格的行或将隐藏单元格的列。为避免这种情况,请勿在设置Visible
之前隐藏行/列或检查CurrentCell
属性。
如果问题是你应该使用的最后一栏:
private void m3dgvDepositDetails_KeyDown(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Tab && notlastColumn)
{
e.SuppressKeyPress = true;
int iColumn = m3dgvDepositDetails.CurrentCell.ColumnIndex;
int iRow = m3dgvDepositDetails.CurrentCell.RowIndex;
if (iColumn >= m3dgvDepositDetails.Columns.Count - 2)
m3dgvDepositDetails.CurrentCell = m3dgvDepositDetails[0, iRow + 1];
else
m3dgvDepositDetails.CurrentCell = m3dgvDepositDetails[iColumn + 1, iRow];
}
}
catch (Exception ex)
{
CusException cex = new CusException(ex);
cex.Show(MessageBoxIcon.Error);
}
}
答案 1 :(得分:0)
尝试选择隐藏的单元格时会发生此错误。此外,您不应该在datagridview中将行设置为不可见,因为它有错误。
一种解决方案不是将行设置为不可见,而只是过滤数据源并仅获取您想要的那些记录。这将是缓慢的,但可以作为一种解决方法。
或强>
您可以尝试使用以下(未测试)
cm.SuspendBinding();
dataGridView1.Rows[0].Visible = false; // Set your datatgridview invisible here
cm.ResumeBinding();