Как предотвратить добавление дублирующейся строки в 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 после того, как у вас есть все данные.

Другие вопросы по тегам