如何正确验证网格单元格

时间:2015-03-17 14:37:17

标签: c# winforms validation gridview

我正在尝试验证网格单元格上的用户输入。我可以验证输入,但我需要重新聚焦在同一个单元格上,因为用户应该再次输入一个有效值。但是如果用户点击进入,焦点将转到下面的单元格,如果选项卡被击中,它会转到下一个单元格它。你可以在下面看到我几乎完成的功能,

private void gv_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
{
   decimal amount = (decimal)gv.GetRowCellValue(e.RowHandle, gv.Columns["AMOUNT"]);
   decimal max_kg = (decimal)gv.GetRowCellValue(e.RowHandle, gv.Columns["MAX_KG"]);

   if (amount > max_kg) {
      gv.SetRowCellValue(e.RowHandle, gv.Columns["AMOUNT"], 0);
      XtraMessageBox.Show("Girilen miktar MAX.KG'dan büyük olamaz.");
      gv.FocusedRowHandle = e.RowHandle;
   }
}

如何让它重新聚焦在同一个单元格上以重新输入金额?

我应该使用其他事件进行验证吗?

1 个答案:

答案 0 :(得分:1)

根据DevExpress documentation on Validating Rows,您应该在ValidateRow事件中设置e.Validate = false并处理InvalidRowException事件

处理InvalidRowException事件将阻止出现错误消息框,从而为用户提供“是”或“否”选项。

private void gv_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
{
  //Suppress displaying the error message box
  e.ExceptionMode = ExceptionMode.NoAction;
}

请阅读链接的文档,以获取有关使用DevExpress组件进行错误处理的其他信息(这个问题的主题是偏离主题,但很高兴知道)