public static FilterTreeNode AddRootNode(TreeView tree, Filter rootItem)
 {
     FilterTreeNode root = new FilterTreeNode();
     root.Item = rootItem;
     tree.Nodes.Add(root);
     return root;
 }
 protected override bool SetValue(int rowIndex, object value)
 {
     bool ret = false;
     string str = value as string;
     if (str != null)
     {
         if (string.IsNullOrWhiteSpace(str))
         {
             if (this._item != null)
             {
                 // delete item
                 string message = "Вы действительно хотите удалить фильтр?\n" +
                     "Все связанные с ним данные будут недоступны при анализе.\n\n" +
                     "Продожить?";
                 DialogResult res = MessageBox.Show(message, "Удаление фильтра", MessageBoxButtons.OKCancel);
                 if (res == DialogResult.OK)
                 {
                     DB.DBManager.DeleteItem(this._item);
                     if (this._itemType == typeof(SpendFilter))
                     {
                         SpendFilter item = (SpendFilter)this._item;
                         DB.DBManager.SpendFilters.Where(kvp => kvp.Key.Id == item.Type).First().Value.Remove(item);
                     }
                     else
                     {
                         IncomeFilter item = (IncomeFilter)this._item;
                         DB.DBManager.IncomeFilters.Remove(item);
                     }
                     this._item = null;
                     if (this.ItemRemoved != null)
                         this.ItemRemoved(this, new DataGridViewCellEventArgs(this.ColumnIndex, this.RowIndex));
                 }
             }
             ret = true;
         }
         else if (this._item == null)
         {
             // create new item
             if (_itemType == typeof(IncomeFilter))
             {
                 IncomeFilter item = new IncomeFilter(str);
                 this._item = item;
                 DB.DBManager.IncomeFilters.Add(item);
             }
             else if (_itemType == typeof(SpendFilter))
             {
                 var col = this.OwningColumn as DataGridViewFilterTypeColumn;
                 var item = new SpendFilter(str, col != null ? col.FilterType.Id : null);
                 this._item = item;
                 DB.DBManager.SpendFilters[col.FilterType].Add(item);
             }
             DB.DBManager.CreateOrUpdateItem(this._item);
             ret = true;
         }
         else
         {
             // update existing
             this._item.Name = str;
             DB.DBManager.CreateOrUpdateItem(this._item);
             ret = true;
         }
     }
     else if (value is Filter)
     {
         this._item = (Filter)value;
         ret = true;
     }
     if (ret) RaiseCellValueChanged(new DataGridViewCellEventArgs(this.ColumnIndex, this.RowIndex));
     return ret;
 }