private void SaveDictionaryFields(TreeNodeCollection nodes, ContentDomain provider)
        {
            List<Guid> oldDictionaries = this.PreviouseDictionaries;

            foreach (TreeNode item in nodes)
            {
                if (item.Checked && item.Parent != null)
                {
                    string[] vals = item.Value.Split(',');
                    Guid id = new Guid(vals[0]);
                    int order = orderCounter;
                    if (vals.Length > 1 ) order = Convert.ToInt32(vals[1]);
                    if (!oldDictionaries.Contains(id))
                    {
                        orderCounter++;
                        provider.AddUserField(this.User.ID, RequestClassificationTreeID, id, new Guid(item.Parent.Value), FieldPlaceHolderID, /*orderCounter*/order);
                    }
                    else
                    {
                        helperDictList.Add(id);
                    }
                }
                this.SaveDictionaryFields(item.ChildNodes, provider);
            }
        }
        public void BindDictionaryTreeView(Guid parentID, TreeNode parentNode, ContentDomain domain, List<ITreeNode> parents)
        {
            using (DictionaryProvider provider = new DictionaryProvider())
            {
                //bind child dictionaries
                List<ITreeNode> list = new List<ITreeNode>();
                if (parentID.Equals(Guid.Empty))
                {
                    List<DictionaryTree> list1 = provider.GetDictionaryTreeList(parentID, this.Roles);
                    var q = from l in list1.Where(f => f.ClassificationID.HasValue)
                            join m in parents on l.ClassificationID.Value equals m.ID
                            select new DictionaryTree
                            {
                                ID = l.ID,
                                ParentID = l.ParentID,
                                Name = string.Format("{0} ({1})", l.Name, m.Name)
                            } as ITreeNode;
                    //l as ITreeNode;
                    list = q.ToList();
                }
                else
                {
                    list = provider.GetList(parentID, User.ID, Roles);
                }
                foreach (ITreeNode item in list)
                {
                    TreeNode node = new TreeNode(item.Name, item.ID.ToString());
                    node.SelectAction = TreeNodeSelectAction.Expand;
                    if (parentNode != null) parentNode.ChildNodes.Add(node);
                    else DictionaryTreeView.Nodes.Add(node);

                    this.BindDictionaryTreeView(item.ID, node, domain, parents);
                }
                //bind fields
                if (parentNode != null && !parentID.Equals(Guid.Empty))
                {
                    DictionaryTree entity = provider.DictionaryTrees.SingleOrDefault(d => d.ID == parentID);
                    List<IUserField> fields = domain.GetUserFields(this.User.ID, RequestClassificationTreeID, this.FieldPlaceHolderID).Where(uf => uf.DictionaryTreeID == parentID).ToList();

                    List<Guid> previous = this.PreviouseDictionaries;
                    previous.AddRange(fields.Select(f => f.DictionaryProperty.ID));
                    this.PreviouseDictionaries = previous;

                    //List<DictionaryProperty> source = entity.Dictionary.DictionaryProperties.ToList();
                    List<DictionaryProperty> source = provider.GetAvailableDictionaryProperties(this.Roles, entity.DictionaryID);

                    foreach (DictionaryProperty prop in source)
                    {
                        TreeNode node = new TreeNode(prop.Name, prop.ID.ToString());
                        node.SelectAction = TreeNodeSelectAction.None;
                        IUserField field = fields.Find(f => f.DictionaryProperty.ID == prop.ID);
                        if (field != null)
                        {
                            node.Checked = true;
                            node.Value = string.Format("{0},{1}", node.Value, field.Sequence);
                        }
                        else node.Checked = false;
                        parentNode.ChildNodes.AddAt(0, node);
                    }
                }
                //--
            }
        }
        public void BindGeneralProperty(ContentDomain provider, List<ITreeNode> parents)
        {
            //List<Property> source = provider.Properties.ToList();
            List<Property> source = provider.GetAvailableProperties(this.Roles);
            List<Property> fields = provider.GetUserProperties(this.User.ID, this.RequestClassificationTreeID, this.FieldPlaceHolderID);
            this.PreviouseProperties = fields.Select(f => f.ID).ToList();

            var q = from s in source.Where(f => f.ClassificationID.HasValue)
                    join l in parents on s.ClassificationID.Value equals l.ID
                    select new Property()
                    {
                        ID = s.ID,
                        Name = string.Format("{0} ({1})", s.Name, l.Name)
                    };
            source = q.ToList();

            foreach (Property item in fields)
            {
                Property entity = source.Find(f => f.ID == item.ID);
                if (entity != null) entity.Selected = true;
            }
            GeneralColumnRepeater.DataSource = source;
            GeneralColumnRepeater.DataBind();
        }