Exemple #1
0
        public override void SetUp()
        {
            base.SetUp();

            _values    = new IBusinessObject[5];
            _values[0] = (IBusinessObject)TypeWithString.Create("0", "A");
            _values[1] = (IBusinessObject)TypeWithString.Create("1", "A");
            _values[2] = (IBusinessObject)TypeWithString.Create("2", "B");
            _values[3] = (IBusinessObject)TypeWithString.Create("3", "B");
            _values[4] = (IBusinessObject)TypeWithString.Create("4", "C");

            _newValues    = new IBusinessObject[2];
            _newValues[0] = (IBusinessObject)TypeWithString.Create("5", "C");
            _newValues[1] = (IBusinessObject)TypeWithString.Create("6", "D");

            _typeWithStringClass = BindableObjectProviderTestHelper.GetBindableObjectClass(typeof(TypeWithString));

            _typeWithStringFirstValuePath  = BusinessObjectPropertyPath.CreateStatic(_typeWithStringClass, "FirstValue");
            _typeWithStringSecondValuePath = BusinessObjectPropertyPath.CreateStatic(_typeWithStringClass, "SecondValue");

            _typeWithStringFirstValueSimpleColumn = new BocSimpleColumnDefinition();
            _typeWithStringFirstValueSimpleColumn.SetPropertyPath(_typeWithStringFirstValuePath);

            _typeWithStringSecondValueSimpleColumn = new BocSimpleColumnDefinition();
            _typeWithStringSecondValueSimpleColumn.SetPropertyPath(_typeWithStringSecondValuePath);

            _bocList    = new BocListMock();
            _bocList.ID = "BocList";
            NamingContainer.Controls.Add(_bocList);

            _bocList.LoadUnboundValue(_values, false);
            _bocList.SwitchListIntoEditMode();

            Assert.That(_bocList.IsListEditModeActive, Is.True);
        }
            public override IBusinessObjectBoundEditableWebControl Create(BocSimpleColumnDefinition column, int columnIndex)
            {
                var control = (BusinessObjectBoundEditableWebControl)base.Create(column, columnIndex);

                control.Required = true;
                return(control);
            }
        protected bool IsColumnEditable(BocSimpleColumnDefinition column)
        {
            if (column == null)
            {
                return(false);
            }

            if (column.IsReadOnly)
            {
                return(false);
            }

            var propertyPath = column.GetPropertyPath();

            if (propertyPath.IsDynamic)
            {
                return(false);
            }

            if (propertyPath.Properties.Count > 1)
            {
                return(false);
            }

            return(true);
        }
        public virtual void SetUp()
        {
            _stringValueClass = BindableObjectProviderTestHelper.GetBindableObjectClass(typeof(TypeWithString));

            _stringValuePropertyPath = BusinessObjectPropertyPath.CreateStatic(_stringValueClass, "FirstValue");

            _stringValueColumn = new BocSimpleColumnDefinition();
            _stringValueColumn.SetPropertyPath(_stringValuePropertyPath);

            _factory = EditableRowControlFactory.CreateEditableRowControlFactory();
        }
        public void GetComparer_WithPropertyPathNull()
        {
            var column = new BocSimpleColumnDefinition();

            column.SetPropertyPath(null);

            var comparer = ((IBocSortableColumnDefinition)column).CreateCellValueComparer();

            Assert.That(comparer, Is.InstanceOf <BusinessObjectPropertyPathBasedComparer>());
            Assert.That(((BusinessObjectPropertyPathBasedComparer)comparer).PropertyPath, Is.InstanceOf <NullBusinessObjectPropertyPath>());
        }
        public void GetComparer_WithPropertyPathSet()
        {
            var propertyPath = MockRepository.GenerateStub <IBusinessObjectPropertyPath>();

            var column = new BocSimpleColumnDefinition();

            column.SetPropertyPath(propertyPath);

            var comparer = ((IBocSortableColumnDefinition)column).CreateCellValueComparer();

            Assert.That(comparer, Is.InstanceOf <BusinessObjectPropertyPathBasedComparer>());
            Assert.That(((BusinessObjectPropertyPathBasedComparer)comparer).PropertyPath, Is.SameAs(propertyPath));
        }
        public virtual IBusinessObjectBoundEditableWebControl Create(BocSimpleColumnDefinition column, int columnIndex)
        {
            ArgumentUtility.CheckNotNull("column", column);
            if (columnIndex < 0)
            {
                throw new ArgumentOutOfRangeException("columnIndex");
            }

            IBusinessObjectBoundEditableWebControl control = column.CreateEditModeControl();

            if (control == null)
            {
                control = CreateFromPropertyPath(column.GetPropertyPath());
            }

            return(control);
        }
        public override void SetUp()
        {
            base.SetUp();

            _editModeHost                           = new FakeEditModeHost();
            _editModeHost.ID                        = "BocList";
            _editModeHost.RowIDProvider             = new FakeRowIDProvider();
            _editModeHost.EditModeControlFactory    = EditableRowControlFactory.CreateEditableRowControlFactory();
            _editModeHost.EditModeDataSourceFactory = new EditableRowDataSourceFactory();

            _editableRow    = new EditableRow(_editModeHost);
            _editableRow.ID = "Row";
            NamingContainer.Controls.Add(_editableRow);

            _value01 = (IBusinessObject)TypeWithAllDataTypes.Create("A", 1);

            _typeWithAllDataTypesClass = BindableObjectProviderTestHelper.GetBindableObjectClass(typeof(TypeWithAllDataTypes));

            _typeWithAllDataTypesStringValuePath = BusinessObjectPropertyPath.CreateStatic(_typeWithAllDataTypesClass, "String");
            _typeWithAllDataTypesInt32ValuePath  = BusinessObjectPropertyPath.CreateStatic(_typeWithAllDataTypesClass, "Int32");

            _typeWithAllDataTypesStringValueSimpleColumn = new BocSimpleColumnDefinition();
            _typeWithAllDataTypesStringValueSimpleColumn.SetPropertyPath(_typeWithAllDataTypesStringValuePath);

            _typeWithAllDataTypesStringValueSimpleColumnAsDynamic = new BocSimpleColumnDefinition();
            _typeWithAllDataTypesStringValueSimpleColumnAsDynamic.SetPropertyPath(BusinessObjectPropertyPath.CreateDynamic("StringValue"));
            _typeWithAllDataTypesStringValueSimpleColumnAsDynamic.IsDynamic = true;

            _typeWithAllDataTypesInt32ValueSimpleColumn = new BocSimpleColumnDefinition();
            _typeWithAllDataTypesInt32ValueSimpleColumn.SetPropertyPath(_typeWithAllDataTypesInt32ValuePath);

            _typeWithAllDataTypesStringValueFirstValueCompoundColumn = new BocCompoundColumnDefinition();
            _typeWithAllDataTypesStringValueFirstValueCompoundColumn.PropertyPathBindings.Add(
                new PropertyPathBinding(_typeWithAllDataTypesStringValuePath));
            _typeWithAllDataTypesStringValueFirstValueCompoundColumn.PropertyPathBindings.Add(
                new PropertyPathBinding(_typeWithAllDataTypesStringValuePath));
            _typeWithAllDataTypesStringValueFirstValueCompoundColumn.FormatString = "{0}, {1}";

            _typeWithAllDataTypesStringValueCustomColumn = new BocCustomColumnDefinition();
            _typeWithAllDataTypesStringValueCustomColumn.SetPropertyPath(_typeWithAllDataTypesStringValuePath);
            _typeWithAllDataTypesStringValueCustomColumn.IsSortable = true;

            _commandColumn      = new BocCommandColumnDefinition();
            _rowEditModeColumn  = new BocRowEditModeColumnDefinition();
            _dropDownMenuColumn = new BocDropDownMenuColumnDefinition();
        }
        public virtual void CreateControls(IBusinessObject value, BocColumnDefinition[] columns)
        {
            ArgumentUtility.CheckNotNull("value", value);
            ArgumentUtility.CheckNotNullOrItemsNull("columns", columns);

            if (_dataSourceFactory == null)
            {
                throw new InvalidOperationException(
                          string.Format("BocList '{0}': DataSourceFactory has not been set prior to invoking CreateControls().", _editModeHost.ID));
            }

            if (_controlFactory == null)
            {
                throw new InvalidOperationException(
                          string.Format("BocList '{0}': ControlFactory has not been set prior to invoking CreateControls().", _editModeHost.ID));
            }

            CreatePlaceHolders(columns);

            _dataSource = _dataSourceFactory.Create(value);

            _rowEditModeControls = new IBusinessObjectBoundEditableWebControl[columns.Length];

            for (int idxColumns = 0; idxColumns < columns.Length; idxColumns++)
            {
                BocSimpleColumnDefinition simpleColumn = columns[idxColumns] as BocSimpleColumnDefinition;

                if (IsColumnEditable(simpleColumn))
                {
                    IBusinessObjectBoundEditableWebControl control = _controlFactory.Create(simpleColumn, idxColumns);

                    if (control != null)
                    {
                        control.ID         = idxColumns.ToString();
                        control.DataSource = _dataSource;
                        IBusinessObjectPropertyPath propertyPath = simpleColumn.GetPropertyPath();
                        control.Property = propertyPath.Properties[0];
                        SetEditControl(idxColumns, control);

                        _rowEditModeControls[idxColumns] = control;
                    }
                }
            }
            _isRowEditModeValidatorsRestored = false;
        }
        private void InitializeListFieldViews()
        {
            IBusinessObjectProperty endDate = ListField.Property.ReferenceClass.GetPropertyDefinition("EndDate");

            BocSimpleColumnDefinition endDateColumnDefinition = new BocSimpleColumnDefinition();

            endDateColumnDefinition.ColumnTitle = "EndDate";
            endDateColumnDefinition.SetPropertyPath(BusinessObjectPropertyPath.CreateStatic(new[] { endDate }));

            BocListView emptyView = new BocListView();

            emptyView.Title = "Empty";
            emptyView.ColumnDefinitions.AddRange(new BocColumnDefinition[] {});

            BocListView datesView = new BocListView();

            datesView.Title = "Dates";
            datesView.ColumnDefinitions.AddRange(new BocColumnDefinition[] { endDateColumnDefinition });

            ListField.AvailableViews.AddRange(new BocListView[] { emptyView, datesView });
        }
Exemple #11
0
        public void SetUp()
        {
            Column             = new BocSimpleColumnDefinition();
            Column.ColumnTitle = "TestColumn1";
            Column.CssClass    = c_columnCssClass;

            Initialize();

            var editModeController = MockRepository.GenerateMock <IEditModeController>();

            editModeController.Stub(mock => mock.RenderTitleCellMarkers(Html.Writer, Column, 0)).WhenCalled(
                invocation => ((HtmlTextWriter)invocation.Arguments[0]).Write(string.Empty));

            List.Stub(mock => mock.EditModeController).Return(editModeController);

            List.Stub(mock => mock.IsClientSideSortingEnabled).Return(true);
            List.Stub(mock => mock.IsShowSortingOrderEnabled).Return(true);

            _bocListQuirksModeCssClassDefinition = new BocListQuirksModeCssClassDefinition();

            _renderingContext =
                new BocColumnRenderingContext <BocSimpleColumnDefinition> (new BocColumnRenderingContext(HttpContext, Html.Writer, List, Column, 0, 0));
        }
        public void RenderSimpleColumnCellEditModeControl(
            HtmlTextWriter writer,
            BocSimpleColumnDefinition column,
            IBusinessObject businessObject,
            int columnIndex)
        {
            ArgumentUtility.CheckNotNull("writer", writer);
            ArgumentUtility.CheckNotNull("column", column);
            ArgumentUtility.CheckNotNull("businessObject", businessObject);

            if (!HasEditControl(columnIndex))
            {
                return;
            }

            ControlCollection validators = GetValidators(columnIndex);

            IBusinessObjectBoundEditableWebControl editModeControl = _rowEditModeControls[columnIndex];

            bool enforceWidth = column.EnforceWidth &&
                                !column.Width.IsEmpty &&
                                column.Width.Type != UnitType.Percentage;

            if (enforceWidth)
            {
                writer.AddStyleAttribute(HtmlTextWriterStyle.Width, column.Width.ToString(CultureInfo.InvariantCulture));
            }

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "bocListEditableCell");
            writer.RenderBeginTag(HtmlTextWriterTag.Span); // Span Container

            if (_editModeHost.ShowEditModeValidationMarkers)
            {
                bool  isCellValid           = true;
                Image validationErrorMarker = _editModeHost.GetValidationErrorMarker();

                for (int i = 0; i < validators.Count; i++)
                {
                    BaseValidator validator = (BaseValidator)validators[i];
                    isCellValid &= validator.IsValid;
                    if (!validator.IsValid)
                    {
                        if (string.IsNullOrEmpty(validationErrorMarker.ToolTip))
                        {
                            validationErrorMarker.ToolTip = validator.ErrorMessage;
                        }
                        else
                        {
                            validationErrorMarker.ToolTip += "\r\n";
                            validationErrorMarker.ToolTip += validator.ErrorMessage;
                        }
                    }
                }
                if (!isCellValid)
                {
                    validationErrorMarker.RenderControl(writer);
                }
            }

            writer.AddAttribute(HtmlTextWriterAttribute.Class, "control");
            writer.RenderBeginTag(HtmlTextWriterTag.Span); // Span Control

            editModeControl.RenderControl(writer);

            writer.RenderEndTag(); // Span Control

            foreach (BaseValidator validator in validators)
            {
                writer.RenderBeginTag(HtmlTextWriterTag.Div);
                validator.RenderControl(writer);
                writer.RenderEndTag();

                if (!validator.IsValid &&
                    validator.Display == ValidatorDisplay.None &&
                    !_editModeHost.DisableEditModeValidationMessages)
                {
                    if (!string.IsNullOrEmpty(validator.CssClass))
                    {
                        writer.AddAttribute(HtmlTextWriterAttribute.Class, validator.CssClass);
                    }
                    else
                    {
                        writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClassEditModeValidationMessage);
                    }
                    writer.RenderBeginTag(HtmlTextWriterTag.Div);
                    writer.Write(validator.ErrorMessage); // Do not HTML encode.
                    writer.RenderEndTag();
                }
            }

            writer.RenderEndTag(); // Span Container
        }
        override protected void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            IBusinessObjectProperty dateOfBirth = CurrentObject.BusinessObjectClass.GetPropertyDefinition("DateOfBirth");
            IBusinessObjectProperty dateOfDeath = CurrentObject.BusinessObjectClass.GetPropertyDefinition("DateOfDeath");
            IBusinessObjectProperty height      = CurrentObject.BusinessObjectClass.GetPropertyDefinition("Height");
            IBusinessObjectProperty gender      = CurrentObject.BusinessObjectClass.GetPropertyDefinition("Gender");
            IBusinessObjectProperty cv          = CurrentObject.BusinessObjectClass.GetPropertyDefinition("CV");
            IBusinessObjectProperty income      = CurrentObject.BusinessObjectClass.GetPropertyDefinition("Income");


            //  Additional columns, in-code generated

            BocSimpleColumnDefinition birthdayColumnDefinition = new BocSimpleColumnDefinition();

            birthdayColumnDefinition.ColumnTitle = "Birthday";
            birthdayColumnDefinition.SetPropertyPath(BusinessObjectPropertyPath.CreateStatic(new [] { dateOfBirth }));

            BocSimpleColumnDefinition dayofDeathColumnDefinition = new BocSimpleColumnDefinition();

            dayofDeathColumnDefinition.ColumnTitle = "Day of Death";
            dayofDeathColumnDefinition.SetPropertyPath(BusinessObjectPropertyPath.CreateStatic(new [] { dateOfDeath }));
            dayofDeathColumnDefinition.Width        = Unit.Parse("9.1em", CultureInfo.InvariantCulture);
            dayofDeathColumnDefinition.EnforceWidth = true;

            BocSimpleColumnDefinition heightColumnDefinition = new BocSimpleColumnDefinition();

            heightColumnDefinition.SetPropertyPath(BusinessObjectPropertyPath.CreateStatic(new [] { height }));

            BocSimpleColumnDefinition genderColumnDefinition = new BocSimpleColumnDefinition();

            genderColumnDefinition.SetPropertyPath(BusinessObjectPropertyPath.CreateStatic(new [] { gender }));

            BocSimpleColumnDefinition cvColumnDefinition = new BocSimpleColumnDefinition();

            cvColumnDefinition.SetPropertyPath(BusinessObjectPropertyPath.CreateStatic(new [] { cv }));

            BocSimpleColumnDefinition incomeColumnDefinition = new BocSimpleColumnDefinition();

            incomeColumnDefinition.SetPropertyPath(BusinessObjectPropertyPath.CreateStatic(new [] { income }));

            BocListView datesView = new BocListView();

            datesView.Title = "Dates";
            datesView.ColumnDefinitions.AddRange(
                new BocColumnDefinition[] { birthdayColumnDefinition, dayofDeathColumnDefinition });

            BocListView statsView = new BocListView();

            statsView.Title = "Stats";
            statsView.ColumnDefinitions.AddRange(
                new BocColumnDefinition[] { heightColumnDefinition, genderColumnDefinition });

            BocListView cvView = new BocListView();

            cvView.Title = "CV";
            cvView.ColumnDefinitions.AddRange(
                new BocColumnDefinition[] { cvColumnDefinition });

            BocListView incomeView = new BocListView();

            incomeView.Title = "Income";
            incomeView.ColumnDefinitions.AddRange(
                new BocColumnDefinition[] { incomeColumnDefinition });

            ChildrenList.AvailableViews.AddRange(new BocListView[] {
                datesView,
                statsView,
                cvView,
                incomeView
            });

            if (!IsPostBack)
            {
                ChildrenList.SelectedView = datesView;
            }

            if (!IsPostBack)
            {
//      ChildrenList.SetSortingOrder (
//          new BocListSortingOrderEntry[] {
//              new BocListSortingOrderEntry ((BocColumnDefinition) ChildrenList.FixedColumns[7], SortingDirection.Ascending) });
            }

            if (!IsPostBack)
            {
                ChildrenList.SwitchListIntoEditMode();
            }

            if (!IsPostBack)
            {
                NumberOfNewRowsField.Value = 1;
            }
            NumberOfNewRowsField.IsDirty = false;
        }
  override protected void OnLoad (EventArgs e)
  {
    base.OnLoad (e);

    IBusinessObjectProperty dateOfBirth = CurrentObject.BusinessObjectClass.GetPropertyDefinition ("DateOfBirth");
    IBusinessObjectProperty dateOfDeath = CurrentObject.BusinessObjectClass.GetPropertyDefinition ("DateOfDeath");
    IBusinessObjectProperty height = CurrentObject.BusinessObjectClass.GetPropertyDefinition ("Height");
    IBusinessObjectProperty gender = CurrentObject.BusinessObjectClass.GetPropertyDefinition ("Gender");
    IBusinessObjectProperty cv = CurrentObject.BusinessObjectClass.GetPropertyDefinition ("CV");
    IBusinessObjectProperty income = CurrentObject.BusinessObjectClass.GetPropertyDefinition ("Income");


    //  Additional columns, in-code generated

    BocSimpleColumnDefinition birthdayColumnDefinition = new BocSimpleColumnDefinition();
    birthdayColumnDefinition.ColumnTitle = "Birthday";
    birthdayColumnDefinition.SetPropertyPath (BusinessObjectPropertyPath.CreateStatic (new []{dateOfBirth}));
    birthdayColumnDefinition.Width = Unit.Parse ("14em");
    birthdayColumnDefinition.EnforceWidth = true;

    BocSimpleColumnDefinition dayofDeathColumnDefinition = new BocSimpleColumnDefinition();
    dayofDeathColumnDefinition.ColumnTitle = "Day of Death";
    dayofDeathColumnDefinition.SetPropertyPath (BusinessObjectPropertyPath.CreateStatic (new []{dateOfDeath}));
    dayofDeathColumnDefinition.Width = Unit.Parse ("7em");
    dayofDeathColumnDefinition.EnforceWidth = true;

    BocSimpleColumnDefinition heightColumnDefinition = new BocSimpleColumnDefinition();
    heightColumnDefinition.SetPropertyPath (BusinessObjectPropertyPath.CreateStatic (new []{height}));

    BocSimpleColumnDefinition genderColumnDefinition = new BocSimpleColumnDefinition();
    genderColumnDefinition.SetPropertyPath (BusinessObjectPropertyPath.CreateStatic (new []{gender}));

    BocSimpleColumnDefinition cvColumnDefinition = new BocSimpleColumnDefinition();
    cvColumnDefinition.SetPropertyPath (BusinessObjectPropertyPath.CreateStatic (new []{cv}));
    cvColumnDefinition.FormatString = "lines=3";

    BocSimpleColumnDefinition incomeColumnDefinition = new BocSimpleColumnDefinition();
    incomeColumnDefinition.SetPropertyPath (BusinessObjectPropertyPath.CreateStatic (new []{income}));

    BocListView datesView = new BocListView();
    datesView.Title = "Dates";
    datesView.ColumnDefinitions.AddRange (new BocColumnDefinition[] {birthdayColumnDefinition, dayofDeathColumnDefinition});

    BocListView statsView = new BocListView();
    statsView.Title = "Stats";
    statsView.ColumnDefinitions.AddRange (new BocColumnDefinition[] {heightColumnDefinition, genderColumnDefinition});

    BocListView cvView = new BocListView();
    cvView.Title = "CV";
    cvView.ColumnDefinitions.AddRange (new BocColumnDefinition[] {cvColumnDefinition});

    BocListView incomeView = new BocListView();
    incomeView.Title = "Income";
    incomeView.ColumnDefinitions.AddRange (new BocColumnDefinition[] {incomeColumnDefinition});

    ChildrenList.AvailableViews.AddRange (new BocListView[] {
      datesView,
      statsView,
      cvView,
      incomeView});

    if (! IsPostBack)
      ChildrenList.SelectedView = datesView;

    if (!IsPostBack)
    {
      ChildrenList.SetSortingOrder (
          new BocListSortingOrderEntry[] {
              new BocListSortingOrderEntry ((IBocSortableColumnDefinition) ChildrenList.FixedColumns[7], SortingDirection.Ascending) });
    }
    if (IsPostBack)
    {
//      BocListSortingOrderEntry[] sortingOrder = ChildrenList.GetSortingOrder();
    }

    if (!IsPostBack)
    {
      JobList.SetSelectedRows (new[] { 1 });
      ChildrenList.SetSelectedBusinessObjects (new[] { ChildrenList.Value[1] });
    }
  }
        public override void SetUp()
        {
            base.SetUp();

            _actualEvents = new StringCollection();

            _values    = new IBusinessObject[5];
            _values[0] = (IBusinessObject)TypeWithAllDataTypes.Create("A", 1);
            _values[1] = (IBusinessObject)TypeWithAllDataTypes.Create("B", 2);
            _values[2] = (IBusinessObject)TypeWithAllDataTypes.Create("C", 3);
            _values[3] = (IBusinessObject)TypeWithAllDataTypes.Create("D", 4);
            _values[4] = (IBusinessObject)TypeWithAllDataTypes.Create("E", 5);

            _newValues    = new IBusinessObject[2];
            _newValues[0] = (IBusinessObject)TypeWithAllDataTypes.Create("F", 6);
            _newValues[1] = (IBusinessObject)TypeWithAllDataTypes.Create("G", 7);

            _class = BindableObjectProviderTestHelper.GetBindableObjectClass(typeof(TypeWithAllDataTypes));

            _stringValuePath = BusinessObjectPropertyPath.CreateStatic(_class, "String");
            _int32ValuePath  = BusinessObjectPropertyPath.CreateStatic(_class, "Int32");

            _stringValueSimpleColumn = new BocSimpleColumnDefinition();
            _stringValueSimpleColumn.SetPropertyPath(_stringValuePath);

            _int32ValueSimpleColumn = new BocSimpleColumnDefinition();
            _int32ValueSimpleColumn.SetPropertyPath(_int32ValuePath);

            _columns    = new BocColumnDefinition[2];
            _columns[0] = _stringValueSimpleColumn;
            _columns[1] = _int32ValueSimpleColumn;

            _editModeHost    = new FakeEditModeHost();
            _editModeHost.ID = "BocList";

            _controller    = new EditModeController(_editModeHost);
            _controller.ID = "Controller";
            NamingContainer.Controls.Add(_controller);

            _controllerInvoker = new ControlInvoker(_controller);

            _editModeHost.NotifyOnEditableRowChangesCanceled  = (i, o) => _actualEvents.Add(FormatChangesCanceledEventMessage(i, o));
            _editModeHost.NotifyOnEditableRowChangesCanceling = (i, o) => _actualEvents.Add(FormatChangesCancelingEventMessage(i, o));
            _editModeHost.NotifyOnEditableRowChangesSaved     = (i, o) => _actualEvents.Add(FormatChangesSavedEventMessage(i, o));
            _editModeHost.NotifyOnEditableRowChangesSaving    = (i, o) => _actualEvents.Add(FormatChangesSavingEventMessage(i, o));
            _editModeHost.NotifyAddRows =
                objects =>
            {
                var oldLength = _editModeHost.Value.Count;
                _editModeHost.Value = ((IBusinessObject[])_editModeHost.Value).Concat(objects).ToArray();
                return(((IBusinessObject[])_editModeHost.Value).Select((o, i) => new BocListRow(i, o)).Skip(oldLength).ToArray());
            };
            _editModeHost.NotifyRemoveRows =
                objects =>
            {
                var removedRows = ((IBusinessObject[])_editModeHost.Value)
                                  .Select((o, i) => new BocListRow(i, o))
                                  .Where(r => objects.Contains(r.BusinessObject))
                                  .ToArray();
                _editModeHost.Value = ((IBusinessObject[])_editModeHost.Value).Except(objects).ToArray();
                return(removedRows);
            };
            _editModeHost.NotifyEndRowEditModeCleanUp  = i => _actualEvents.Add(FormatEndRowEditModeCleanUp(i));
            _editModeHost.NotifyEndListEditModeCleanUp = () => _actualEvents.Add(FormatEndListEditModeCleanUp());
            _editModeHost.NotifyValidateEditableRows   = () => _actualEvents.Add(FormatValidateEditableRows());
            _editModeHost.Value                     = _values;
            _editModeHost.RowIDProvider             = new FakeRowIDProvider();
            _editModeHost.EditModeControlFactory    = EditableRowControlFactory.CreateEditableRowControlFactory();
            _editModeHost.EditModeDataSourceFactory = new EditableRowDataSourceFactory();
            _editModeHost.EnableEditModeValidator   = true;
            _editModeHost.AreCustomCellsValid       = true;
        }