Я использую DevExpress GridControl для создания формы, позволяющей пользователю вводить данные.Сетка привязана к 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
, поскольку добавленная строка исходит из сетки, а не напрямую из моего кода.
Когда будет добавлен дубликат ProductID
, появится MessageBox
с точным текстом в ex.Message, с двумя кнопками YesNo, спрашивающими, хотим ли мы исправить значения или нет.
Моя цель - сохранить все строки в пределах DataTable
уникальными.Мне нужно обработать ConstraintException
, чтобы я мог отобразить пользовательское сообщение об ошибке для конечного пользователя.Я искал некоторые сообщения в документации SO и Microsoft, например:
но это не дает мне понять, как это сделать.
Может ли кто-нибудь помочь мне, как это сделать?На самом деле, мой код работает правильно, мне просто нужно обработать исключение.Извините за мой плохой английский.Английский не мой родной язык.Спасибо.