Создание объектов в апдейтере с нумерацией:

 

        private void CreateDocumentWith100Positions()

        {

            var document = this.ObjectSpace.CreateObject<Document>();

 

            for (int i = 1; i <= 100; i++)

            {

                var pos = this.ObjectSpace.CreateObject<Position>();

                pos.Name = "Position_" + i;

                pos.Document = document;

            }

            this.ObjectSpace.CommitChanges();

    this.ObjectSpace.IndexNumerator().UseDirectSql = false/true;

            this.ObjectSpace.IndexNumerator().NumerateCollection(document.Positions[0]);

        }

Применение индекса при создании нового объекта, например, с помощью контроллера на детальной форме:

 

        protected override void OnActivated()

        {

            base.OnActivated();

 

            if (!this.ObjectSpace.IsNewObject(this.View.CurrentObject))

                return;

 

            var obj = this.View.CurrentObject as IIndexNumberSupport;

 

            if (obj == null)

                return;

 

     this.ObjectSpace.IndexNumerator().UseDirectSql = false/true;

            this.ObjectSpace.IndexNumerator().Apply(obj);

        }

Удаление со смещением. Для списковой формы отслеживается выполнение действия контроллера удаления:

 

        protected override void OnViewControlsCreated()

        {

            base.OnViewControlsCreated();

 

            var deleteController = this.Frame.GetController<DeleteObjectsViewController>();

            deleteController.DeleteAction.Executing += DeleteAction_Executing;

 }

 

        void DeleteAction_Executing(object sender, CancelEventArgs e)

        {

            var service = this.ObjectSpace.IndexNumerator();

     service.UseDirectSql = false/true;

            service.AdjustAfterRemove(this.View.SelectedObjects[0] as <IIndexNumberSupport>);

 }

 

 

При пересчете диапазона значений, а также в случае перемещения объекта в начало или конец списка происходит пресчет не всех объектов, а только тех, которые необходимо пересчитать. Например, если у объекта порядковый номер равен 50, и будет вызван метод MoveToTop(Position_8), то ему будет присвоен номер 10 (данный номер вычисляется по минимальному номеру в коллеции).

Перемещение объекта в начало списка:

 

        private void moveToTopAction_Execute(object sender, SimpleActionExecuteEventArgs e)

        {

            this.ObjectSpace.IndexNumerator().UseDirectSql = false/true;

            this.ObjectSpace.IndexNumerator().MoveToTop(this.View.SelectedObjects[0] as IIndexNumberSupport);

 }

Перемещение в конец списка

 

        private void moveToLast_Execute(object sender, SimpleActionExecuteEventArgs e)

        {

            this.ObjectSpace.IndexNumerator().UseDirectSql = false/true;

            this.ObjectSpace.IndexNumerator().MoveToLast(this.View.SelectedObjects[0] as IIndexNumberSupport);

 }

Присвоение произвольного номера. Например, можно вручную измененить номера в списке объектов. Предлагается реализация с помощью контроллера:

 

    public partial class ChangeIndexViewController : ViewController<ListView>

    {

        public ChangeIndexViewController()

        {

            InitializeComponent();

            TargetObjectType = typeof (Position);

        }

 

        private int _selectedObjectIndex;

 

        protected override void OnViewControlsCreated()

        {

            base.OnViewControlsCreated();

            this.View.SelectionChanged += View_SelectionChanged;

            var editor = this.View.Editor as GridListEditor;

            editor.GridView.CellValueChanged += GridView_CellValueChanged;

        }

        

        void View_SelectionChanged(object sender, EventArgs e)

        {

            //сохраняем текущий порядковый номер выделенного объекта для построения диапазона для пересчета

            _selectedObjectIndex = ((sender as ListView).SelectedObjects[0] as IIndexNumberSupport).IndexNumber;

        }

        void GridView_CellValueChanged(object sender, CellValueChangedEventArgs e)

        {

this.ObjectSpace.IndexNumerator().UseDirectSql = false/true;                        this.ObjectSpace.IndexNumerator().AdjustInRangeByObject(this.View.SelectedObjects[0] as IIndexNumberSupport, selectedObjectIndex, (Int32)e.Value);

        }

    }