Подскажите пожалуйста, как ограничить минимальное количество записей в реестре?
Т.е. как сделать чтобы пользователь не смог удалить все записи? Должна остатся как минимум одна запись. И кнопка "Удалить" должна стать не активной.
В принципе достаточно события которое происходит при любом обновлении реестра. И на него повесить чтото типа :
Для того, чтобы изменить количество выводимых строк, следует в обработчике события PageLoadComplete добавить следующую строку:
Page.DataSource.PageRowsCount=20;
где 20 – количество записей, которые следует загружать.
Изменения следует вносить в тот реестр, где нам нужно больше(меньше) строк, либо в базовый реестр, от которого мы наследуем все остальные (если нужно для всех реестров).
Возможно, стоит повесить эту логику на события датасорса в окне реестра: "После сохранения записи", "После удаления записи" и "После загрузки данных" (для учёта первого открытия и смены записи в основном реестре, если это деталь). Но не уверен, достаточно ли их.
Дмитрий, мне надо запретить пользователю удалять запись если она последняя, а не общее количестов выводимых строк в реестре.
Александр, так и делаю, хотелось более аакуратного решения, например событие Refresh у грида, но найти такое событие не получилось.
Возникло две проблемы:
1. если подписатся на событие "DataSourceBeforeRemove" то оно не срабатывает перед удалением.
2. если я из кода устанавливаю
Page.DeleteButton.SetEnabled(false);
то через секунду кнопка сама восстанавливает свое состояние (становится активна)
С кнопкой разобрался, достаточно использовать свою кнопку помещенную в отдельный контейнер.
А с событиями проблема.
При удалении работает только "DataSourceRemoved", а при добавлении не работает ни одно событие, вот список : "DataSourceBeforeInsert, DataSourceInserted, DataSourceBeforeSave, DataSourceSaved".
Точнее при добавлении записи срабатывает "DataSourceLoaded", но при срабатывании
Page.DataSource.Rows.Count
равен 1 всегда.
Вопрос, как получить количество записей в реестре после добавления записи, и в зависимости от этого выполнить
Илья, после любой операции, будь то добавление, удаление, изменение записи - происходит обновление DataSouce'а, соответственно в общем случае всегда будет выполнятся одно событие:
DataSourceLoadRowsResponseRegistered
Соответственно, я думаю необходимо в Вашей странице определить это событие, затем отправить процесс в базовое событие, а уже после базового добавить скрипт:
var dataSourceRowsCount = Page.DataSource.Rows.Count;if(dataSourceRowsCount <2){
Page.DeleteButton.SetEnabled(false)}
Дмитрий, спасибо, событие действительно происходит, но при добавлении записи Page.DataSource.Rows.Count всегда равен 1.
Как можно посмотреть реальное количество записей не выполняя SELECT к базе?
выполняются всегда, если их раскоментировать. Нужно их убрать и поместить в if.
Если так сделаете - то зацикливание произойдет только тогда, когда Вы добавляете первую запись в реестр (до этого было 0). Можно добавить какой-то int параметр i = 0 в процесс, и в условие добавить