我有一个Datagridview,我需要在某些行上验证用户输入,并根据它的值进行更改。例如,如果用户输入了数据库中不存在的产品代码,则搜索产品对话框会引发并搜索产品并返回正确的代码。 所以经过大量阅读后,我决定处理CellFormating事件:但我遇到了两个问题:
这就是为什么我把mbox放在事件处理程序中,现在程序什么都不做,只显示mbox。
这里的要点是,即使表格是新创建的,事件也会引发很多,每当我将mose指针移到任何单元格上时,事件都会再次出现。
这里最好的选择是什么? bellow是事件处理程序中的代码:
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
try
{
if (e.ColumnIndex == 0 && !dataGridView1.Rows[e.RowIndex].IsNewRow)
{
if (!Rep.Cajero_ProductoExiste(double.Parse(e.Value.ToString())))
{
BuscarEIngresarProducto(ref e);
}
}
MessageBox.Show("Event handler raised");
}
catch
{
e.FormattingApplied = false;
}
}
Rep.Cajero_ProductoExiste
是一种方法,如果产品存在,则返回bool = true,方法BuscarEIngresarProducto()
如下:
private void BuscarEIngresarProducto(ref DataGridViewCellFormattingEventArgs e)
{
Busqueda b = new Busqueda(Rep, 2);
if (b.ShowDialog() == DialogResult.OK)
{
e.Value = b.ProductoCodigo;
dataGridView1.CurrentRow.Cells["pk"].Value = b.Producto;
e.FormattingApplied = true;
}
}
任何帮助都将得到帮助。在此先感谢(PD:对不起4我的英语,我是西班牙语的说话者)
答案 0 :(得分:1)
您可以尝试处理CurrentCellDirtyStateChanged并检查IsCurrentCellDirty属性。如果是真的 - 验证输入。