Junior vamos la, gere o evento CellValidating acho que será melhor nesse caso.
Nesse evento compare o que está certo ou errado, supondo que a pessoa não possa escrever abc na coluna:
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (e.FormattedValue.ToString() == "abc")
{
this.dataGridView1.Rows[e.RowIndex].ErrorText = "Escreveu abc";
e.Cancel = true;
}
}
O erro aparecerá com um ! na linha do lado esquerdo, perto do lapis que indica que está editando. Porém fique atento pois quando a pessoa digitar certo lembre de apagar a mensagem de erro, sua funçção ficaria assim:
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (e.FormattedValue.ToString() == "abc")
{
this.dataGridView1.Rows[e.RowIndex].ErrorText = "Escreveu abc";
e.Cancel = true;
}
else
{
this.dataGridView1.Rows[e.RowIndex].ErrorText = string.Empty;
}
}
Caso queira comparar determinada coluna, é só usar o ColumnIndex de e, por exemplo a validação é somente para a coluna 2:
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (e.ColumnIndex == 1)
{
if (e.FormattedValue.ToString() == "abc")
{
this.dataGridView1.Rows[e.RowIndex].ErrorText = "Escreveu abc";
e.Cancel = true;
}
else
{
this.dataGridView1.Rows[e.RowIndex].ErrorText = string.Empty;
}
}
}
Repare que a verificação será quando você tentar sair da coluna.