gpt4 book ai didi

c# - 从 GridView 添加 DataRow 时如何捕获 ConstraintException?

转载 作者:行者123 更新时间:2023-11-30 18:11:29 24 4
gpt4 key购买 nike

我正在使用 DevExpress GridControl 创建一个表单,使用户能够输入一些数据。网格绑定(bind)到 DataTable,其中一列定义为唯一的数据源。

DataTable dtDetail = new DataTable();
dtDetail.Columns.Add("ProductID", typeof(int));
dtDetail.Columns.Add("ProductName", typeof(string));
dtDetail.Columns.Add("OrderQty", typeof(int));
dtDetail.Columns.Add("LossTolerance", typeof(decimal));

dtDetail.Columns["ProductID"].Unique = true;

gridView.DataSource = dt;

通常我们可以使用以下代码添加行并处理约束冲突:

try
{
dtDetail.Rows.Add(1, "Some product name", 10, 2);
}
catch (ConstraintException ex)
{
// The default ex.Message is something like: Column 'ProductID' is constrained to be unique. Value xxxx is already present.
// I need to display this message in my local language.
}

我设计的表单是一个数据输入表单,因此数据来自最终用户通过网格。当用户添加行时,dtDetail.Rows.Add 方法以某种方式被调用,我不知道如何正确处理 ConstraintException,因为添加的行来自网格,而不是直接来 self 的代码。

当要添加重复的ProductID时,ex.Message中会出现一个MessageBox,里面的文字完全一样,有两个YesNo按钮,询问我们是否要更正值与否。

我的目标是保持DataTable 内的所有行都是唯一的。我需要处理 ConstraintException 以便我可以向最终用户显示自定义错误消息。我搜索了一些关于 SO 和 Microsoft 文档的帖子,例如这些帖子:

但它并没有给我关于如何做到这一点的线索。

有人可以帮我怎么做吗?实际上,我的代码运行正常,我只需要处理异常。对不起,我的英语不好。英语不是我的母语。谢谢。

最佳答案

正如 Oleg 在评论部分评论使用 ValidateRow 事件时,我能够使用与该事件实际相关的另一个事件来解决我的要求,即 InvalidRowException

private void gridView_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
{
// Get the type of exception
if (e.Exception.GetType() == typeof(ConstraintException))
{
// Get the unique constraint column
using (DataColumn constraintColumn = ((UniqueConstraint)dtDetail.Constraints[0]).Columns[0])
{
// Get the value that violates unique constraint
object value = ((DataRowView)e.Row).Row[constraintColumn];

DialogResult dr = XtraMessageBox.Show(string.Format("Kolom {0} diatur sebagai Unique. Nilai {1} telah ada sebelumnya. Apakah Anda ingin memperbaiki barisnya?", constraintColumn.ColumnName, value.ToString()), "Informasi", MessageBoxButtons.YesNo, MessageBoxIcon.Information);

if (dr == DialogResult.Yes)
{
// No action. User can correct their input.
e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction;
}
else
{
// Duplicate row will be removed
e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.Ignore;
}
}
}
}

通过使用上面的代码,我可以处理 ConstraintException 并为我的用户显示自定义错误消息。

谢谢。

关于c# - 从 GridView 添加 DataRow 时如何捕获 ConstraintException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58073562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com