} // DeleteObjectClass()

        /// <summary>
        /// Set the default value for an object class prop, and cascade the change to all existing NodeTypeProps
        /// </summary>
        /// <param name="ObjectClassProp"></param>
        /// <param name="Value"></param>
        /// <param name="SubFieldName">Optional. Use the default subfield if null.</param>
        ///
        public void SetObjectClassPropDefaultValue(CswNbtMetaDataObjectClassProp ObjectClassProp, object Value, CswEnumNbtSubFieldName SubFieldName = null)
        {
            if (null != ObjectClassProp)
            {
                SubFieldName = SubFieldName ?? ObjectClassProp.getFieldTypeRule().SubFields.Default.Name;
                ObjectClassProp.DefaultValue.SetPropRowValue(SubFieldName, ObjectClassProp.getFieldTypeRule().SubFields[SubFieldName].Column, Value);
                // We're going to regret this day
                ObjectClassProp.DefaultValue.SetPropRowValue(CswEnumNbtSubFieldName.Gestalt, CswEnumNbtPropColumn.Gestalt, Value);

                foreach (CswNbtMetaDataNodeTypeProp NodeTypeProp in ObjectClassProp.getNodeTypeProps())
                {
                    //NodeTypeProp.DefaultValue.SetPropRowValue( ObjectClassProp.getFieldTypeRule().SubFields[SubFieldName].Column, Value );
                    //NodeTypeProp.DefaultValue.SetPropRowValue( CswEnumNbtSubFieldName.Gestalt, CswEnumNbtPropColumn.Gestalt, Value );
                    NodeTypeProp.getDefaultValue(true).SetSubFieldValue(SubFieldName, Value);
                }
            }
        }
        /// <summary>
        /// Update the attributes of an Object Class Prop, and cascade changes to existing NodeTypeProps
        /// </summary>
        public void UpdateObjectClassProp(CswNbtMetaDataObjectClassProp ObjectClassProp, CswEnumNbtObjectClassPropAttributes AttributeColumnName, object Value)
        {
            if (AttributeColumnName != CswResources.UnknownEnum)
            {
                string AttributeColumnNameString = CswNbtMetaDataObjectClassProp.getObjectClassPropAttributesAsString(AttributeColumnName);
                object DBValue = CswConvert.ToDbVal(Value);
                if (ObjectClassProp._DataRow[AttributeColumnNameString] != DBValue)
                {
                    ObjectClassProp._DataRow[AttributeColumnNameString] = DBValue;
                    if (AttributeColumnName == CswEnumNbtObjectClassPropAttributes.setvalonadd)
                    {
                        ObjectClassProp._DataRow[CswNbtMetaDataObjectClassProp.getObjectClassPropAttributesAsString(CswEnumNbtObjectClassPropAttributes.display_col_add)] = DBNull.Value;
                        ObjectClassProp._DataRow[CswNbtMetaDataObjectClassProp.getObjectClassPropAttributesAsString(CswEnumNbtObjectClassPropAttributes.display_row_add)] = DBNull.Value;
                    }
                    _CswNbtMetaDataResources.ObjectClassPropTableUpdate.update(ObjectClassProp._DataRow.Table);

                    foreach (CswNbtMetaDataNodeTypeProp NodeTypeProp in ObjectClassProp.getNodeTypeProps())
                    {
                        CswNbtFieldTypeAttribute attr = NodeTypeProp.getFieldTypeRule().getAttributes().FirstOrDefault(a => a.Column == AttributeColumnName);
                        if (null != attr)
                        {
                            CswNbtNodePropWrapper attrProp = NodeTypeProp.DesignNode.AttributeProperty[attr.Name];
                            attrProp.SetSubFieldValue(attrProp.NodeTypeProp.getFieldTypeRule().SubFields.Default, DBValue);
                        }
                        if (AttributeColumnName == CswEnumNbtObjectClassPropAttributes.setvalonadd)
                        {
                            if (CswConvert.ToBoolean(Value))
                            {
                                NodeTypeProp.updateLayout(CswEnumNbtLayoutType.Add, true);
                            }
                            else
                            {
                                NodeTypeProp.removeFromLayout(CswEnumNbtLayoutType.Add);
                            }
                        }
                    }
                }
            }
        } // UpdateObjectClassProp()
        } // makeMissingNodeTypeProps()

        /// <summary>
        /// Deletes an object class prop and all nodetype props from the database and metadata collection
        /// </summary>
        public Collection <CswNbtMetaDataNodeTypeProp> DeleteObjectClassProp(CswNbtMetaDataObjectClassProp ObjectClassProp, bool DeleteNodeTypeProps)
        {
            Collection <CswNbtMetaDataNodeTypeProp> Ret = new Collection <CswNbtMetaDataNodeTypeProp>();
            //Collection<CswNbtMetaDataNodeTypeProp> DoomedProps = new Collection<CswNbtMetaDataNodeTypeProp>();
            Collection <CswNbtObjClassDesignNodeTypeProp> DoomedProps = new Collection <CswNbtObjClassDesignNodeTypeProp>();

            foreach (CswNbtMetaDataNodeTypeProp Prop in ObjectClassProp.getNodeTypeProps())
            {
                if (DeleteNodeTypeProps)
                {
                    DoomedProps.Add(Prop.DesignNode);
                }
                else
                {
                    Prop.DesignNode.ObjectClassPropName.Text = string.Empty;
                    Prop.DesignNode.postChanges(false);
                    //Prop._DataRow["objectclasspropid"] = DBNull.Value;
                    //_CswNbtMetaDataResources.NodeTypePropTableUpdate.update( Prop._DataRow.Table );
                    Ret.Add(Prop);
                }
            }

            foreach (CswNbtObjClassDesignNodeTypeProp Prop in DoomedProps)
            {
                //DeleteNodeTypeProp( Prop, true );
                Prop.InternalDelete = true;
                Prop.Node.delete(false, true);
            }

            // Update MetaData
            _CswNbtMetaDataResources.ObjectClassPropsCollection.clearCache();

            // Delete the Object Class Prop
            ObjectClassProp._DataRow.Delete();
            _CswNbtMetaDataResources.ObjectClassPropTableUpdate.update(ObjectClassProp._DataRow.Table);

            return(Ret);
        } // DeleteObjectClassProp()