Задание критериев фильтра строк, которые будут оцениваться в обработчиках событий DataTable - PullRequest
1 голос
/ 25 января 2011

У нас есть собственная мини-прикладная среда для удовлетворения наших индивидуальных потребностей.Мы используем таблицы данных в наших бизнес-классах для хранения коллекций (например, подробных данных).Наша структура идентифицирует любые свойства типа данных, объявленные в бизнес-объекте, и присоединяет несколько обработчиков событий для предоставления таких услуг, как контроль авторизации, отслеживание изменений и т. Д. Все работает хорошо, но сегодня небольшое требование меня немного озадачило.

Помимо всех требований авторизации, например, доступа на основе ролей для редактирования таблицы данных, редактирования некоторых столбцов таблицы данных и т. Д., Наши разработчики теперь требуют указать критерий для таблицы данных, и тогда все соответствующие строки (удовлетворяющие этим критериям) будут защищены от редактирования..

Например, если есть таблица данных со значениями, как показано ниже -


SettingName |Значение |IsPolicyControlled


Setting1 |10 |False

Setting2 |20 |True


Разработчики хотят указать критерии в рамках нашей бизнес-структуры, как показано ниже -

someBusinessObject.MakeReadOnly ("Настройки", "IsPolicyControlled == true");

первый параметр - имя, которое можно датировать, а второй - критерий для строк, доступных только для чтения.Теперь, как разработчик фреймворка, моя обязанность состоит в том, чтобы запретить любое редактирование в любых строках, которые соответствуют указанному условию.

Для этого я могу прикрепить некоторый обработчик событий к этому датабильному элементу для мониторинга любых изменений, которые вносятся, например, яможет обрабатывать RowChanging для мониторинга вносимых изменений.Теперь мне нужно проверить, соответствует ли изменяемая строка указанному условию.Что-то вроде

if (RowMatchesCondition (e.Row)) // изменения блока

Теперь я не смог найти оптимизированный механизм для достижения этой цели.Одна вещь, которая пришла к моей находке, это использовать метод DataTable.Select () с этим условием и проверить, существует ли текущая строка (в RowChanging) в возвращенном массиве DataRow.Но я ищу немного лучшее решение.

Спасибо за помощь, друзья.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...