protected override void UpdateEditorInternal(IEditableObject item, Control editor)
        {
            CheckBoxList cbl = (CheckBoxList) editor;
            cbl.Items.AddRange(GetListItems(item));

            PropertyCollection dc = item.GetDetailCollection(Name, false);
            if (dc != null)
            {
                foreach (object detail in dc)
                {
                    string value = GetValue(detail);
                    ListItem li = cbl.Items.FindByValue(value);
                    if (li != null)
                    {
                        li.Selected = true;
                    }
                    else
                    {
                        li = new ListItem(value);
                        li.Selected = true;
                        li.Attributes["style"] = "color:silver";
                        cbl.Items.Add(li);
                    }
                }
            }
        }
        public override bool UpdateItem(IEditableObject item, Control editor)
        {
            PropertyCollection detailCollection = item.GetDetailCollection(Name, true);
            BaseDetailCollectionEditor detailCollectionEditor = (BaseDetailCollectionEditor) editor;

            List<PropertyData> propertyDataToDelete = new List<PropertyData>();

            // First pass saves or creates items.
            for (int i = 0; i < detailCollectionEditor.Editors.Count; i++)
            {
                if (!detailCollectionEditor.DeletedIndexes.Contains(i))
                {
                    PropertyData existingDetail = (detailCollection.Count > i) ? detailCollection.Details[i] : null;
                    object newDetail;
                    CreateOrUpdateDetailCollectionItem((ContentItem) item, existingDetail, detailCollectionEditor.Editors[i], out newDetail);
                    if (newDetail != null)
                        if (existingDetail != null)
                            existingDetail.Value = newDetail;
                        else
                            detailCollection.Add(newDetail);
                }
                else
                {
                    propertyDataToDelete.Add(detailCollection.Details[i]);
                }
            }

            // Do a second pass to delete the items, this is so we don't mess with the indices on the first pass.
            foreach (PropertyData propertyData in propertyDataToDelete)
                detailCollection.Remove(propertyData);

            return detailCollectionEditor.DeletedIndexes.Count > 0 || detailCollectionEditor.AddedEditors;
        }
 public override bool UpdateItem(IEditableObject item, Control editor)
 {
     CheckBoxList cbl = (CheckBoxList) editor;
     IEnumerable selected = GetSelectedItems(cbl.Items.Cast<ListItem>().Where(li => li.Selected));
     PropertyCollection dc = item.GetDetailCollection(Name, true);
     dc.Replace(selected);
     return true;
 }
 protected override void UpdateEditorInternal(IEditableObject item, Control editor)
 {
     BaseDetailCollectionEditor detailCollectionEditor = (BaseDetailCollectionEditor) editor;
     PropertyCollection detailCollection = item.GetDetailCollection(Name, true);
     PropertyData[] details = new PropertyData[detailCollection.Count];
     detailCollection.CopyTo(details, 0);
     detailCollectionEditor.Initialize(details);
 }
        public override bool UpdateItem(IEditableObject item, Control editor)
        {
            CheckBoxList cbl = editor as CheckBoxList;
            List<Items.Role> roles = new List<Items.Role>();
            foreach (ListItem li in cbl.Items)
                if (li.Selected)
                {
                    Items.Role role = Context.Current.Resolve<IWebSecurityManager>().GetRole(li.Value);
                    roles.Add(role);
                }

            PropertyCollection dc = item.GetDetailCollection(Name, true);
            dc.Replace(roles);

            return true;
        }
 protected override void UpdateEditorInternal(IEditableObject item, Control editor)
 {
     CheckBoxList cbl = editor as CheckBoxList;
     PropertyCollection dc = item.GetDetailCollection(Name, false);
     if (dc != null)
     {
         foreach (Items.Role role in dc)
         {
             ListItem li = cbl.Items.FindByValue(role.Name);
             if (li != null)
             {
                 li.Selected = true;
             }
             else
             {
                 li = new ListItem(role.Name);
                 li.Selected = true;
                 li.Attributes["style"] = "color:silver";
                 cbl.Items.Add(li);
             }
         }
     }
 }