- Klasicky, dialogovým okénkem
MessageBox.Show(...)
. - Nastavit chybu řádky
dgv.Rows[e.RowIndex].ErrorText = "Chyba"
(pozor, pak se tato chyba musí mazat při EndEdit()). - Nastavit chybu buňky
dgv.Rows[e.ColumnIndex, e.RowIndex].ErrorText = "Chyba"
. Ale chybový obrázek se neobjeví, pokud se buňka edituje. Workaround pro toto je třeba v DataGridView FAQ. - Zobrazit ToolTip.
//deklarace
private ToolTip toolTip = new ToolTip();
...
// incializace, treba v konstruktoru
this.toolTip.ToolTipIcon = ToolTipIcon.Error;
this.toolTip.ToolTipTitle = Properties.Resources.TitleError;
this.dataGridView.CellEndEdit += new DataGridViewCellEventHandler(dataGridView_CellEndEdit);
this.dataGridView.CellValidating +=new DataGridViewCellValidatingEventHandler(dataGridView_CellValidating);
...
// Schovej tool tip po dokonceni editace.
void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (this.toolTip.Active)
{
this.toolTip.Hide(this);
}
}
private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
...
if (error)
{
this.CellValidatingError(e, "Nastala chyba XYZ.");
return;
}
...
}
// Zobraz tooltip, pipni, nastav e.Cancel na true.
public void CellValidatingError(DataGridViewCellValidatingEventArgs e, string msg)
{
e.Cancel = true;
// tooltip
Rectangle cellBounds = this.dataGridView.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
Point location = new Point(cellBounds.Left + this.dataGridView.Location.X, cellBounds.Bottom + this.dataGridView.Location.Y);
this.toolTip.Show(msg, this, location, 3000);
// beep
System.Media.SystemSounds.Beep.Play();
}
Poznámka: při
ToolTip.Hide()
a ToolTip.Show()
se nastaví na prvek Control, ve kterém je DataGridView vložené, v tomto příkladě je to this
.