Как предотвратить добавление дублирующейся строки в DevExpress gridControl
У меня есть привязка gridcontrol к Datatable, в моей сетке я позволяю пользователям выбирать продукты для обработки.
Проблема в том, что я не хочу, чтобы пользователи добавляли один и тот же код продукта дважды в таблицу.
Есть ли способ предотвратить добавление одного и того же кода продукта дважды?
Я уже попробовал Unique attirbute в моем DataTable, но он не совсем работал так, как мне нужно.
Любая помощь будет оценена
2 ответа
Я обычно использую событие GridView.ValidateRow, которое должно сработать, когда пользователь закончит редактирование строки. Аргументы событий обеспечивают доступ к объекту строки через e.Row, сообщение об ошибке через e.ErrorText и действительный статус через e.Valid, поэтому нужно просто взять код продукта из обновленной строки и найти его в данные.
Я думал о чем-то вроде этого
gridViewDefault.RowLoaded += gridViewDefault_RowLoaded;
Hashtable hashTable = new Hashtable();
void gridViewDefault_RowLoaded(object sender, RowEventArgs e)
{
var obj = ( sender as GridView ).GetRow(e.RowHandle) as OrderDocument;
var uniqueId = obj.Document.DocumentId;
if( hashTable[uniqueId] == null )
hashTable.Add(uniqueId, 1);
else
( sender as GridView ).DeleteRow(e.RowHandle);
}
но потом увидел, что событие RowLoaded происходит только в режиме мгновенной обратной связи
Очевидно, что нет немедленного события после того, как DataSource завершил загрузку.
Поэтому вместо основанных на событиях я бы выбрал функцию, аналогичную той, которую я написал, которая выполняет итерацию всего GridView после того, как у вас есть все данные.