我想检查datagridview的空单元格的空白。因为我使用下面的代码,但即使单元格被填充,它也是闪烁的消息。
private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 5 || e.ColumnIndex == 6)
{
if (dataGridView1.CurrentCell.Value == null ||
dataGridView1.CurrentCell.Value == DBNull.Value ||
String.IsNullOrWhiteSpace(dataGridView1.CurrentCell.Value.ToString()))
{
MessageBox.Show("Please enter value");
}
}
}
哪里是错误..
提前感谢...
答案 0 :(得分:1)
每次从单元格导航时都会触发'CellLeave'事件,如果您还没有进入单元格,那么您将不会在该单元格上获得“离开”事件。
如果要检查已编辑的单元格是否为空,则可能需要使用“CellEndEdit”事件。
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
var cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
if (cell.Value == null || string.IsNullOrWhiteSpace(cell.Value.ToString()))
{
MessageBox.Show("Please enter some velue in cell");
}
}
答案 1 :(得分:0)
首先,您要检查两件不同的事情:
e.ColumnIndex
和CurrentCell
最好只使用其中的一个,因此CurrentCell
可以替换为:
dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex]
所以完整的代码变为:
if ((e.ColumnIndex == 5 || e.ColumnIndex == 6) && e.RowIndex != -1)
{
var cellValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
if (cellValue == null || cellValue == DBNull.Value
|| String.IsNullOrWhiteSpace(cellValue.ToString()))
{
MessageBox.Show("Please enter value");
}
}
注意:当你(你猜对了)离开一个单元格(选择另一个,取消选择,等等)时,CellLeave事件会触发。因此,e.ColumnIndex/RowIndex
与您刚刚离开的CurrentCell
不同。如果要检查单击,只需使用单击事件处理程序。
答案 2 :(得分:0)
来自MSDN :
当单元格失去输入焦点但不再是当前单元格时发生。
这意味着dataGridView1.CurrentCell
不再是您想要的单元格。
要获得正确的细胞使用:
dataGridView1[e.ColumnIndex, e.RowIndex]