public override void ToJSON( JObject ParentObject )
        {
            ParentObject[_SelectedViewIdsSubField.ToXmlNodeName()] = SelectedViewIds.ToString();
            ParentObject["selectmode"] = SelectMode.ToString();
            ParentObject[_CachedViewNameSubField.ToXmlNodeName()] = CachedViewNames.ToString();
            ParentObject[ElemName_Options] = new JObject();

            CswCheckBoxArrayOptions CBAOptions = new CswCheckBoxArrayOptions();
            CBAOptions.Columns.Add( "Include" );

            DataTable ViewsTable = ViewsForCBA();
            foreach( DataRow ViewRow in ViewsTable.Rows )
            {
                bool isSelected = SelectedViewIds.Contains( ViewRow[KeyColumn] );
                if( IsEditModeEditable || isSelected )
                {
                    CswCheckBoxArrayOptions.Option Option = new CswCheckBoxArrayOptions.Option();
                    Option.Key = ViewRow[KeyColumn].ToString();
                    Option.Label = ViewRow[NameColumn].ToString();
                    Option.Values.Add( CswConvert.ToBoolean( ViewRow[ValueColumn] ) );
                    CBAOptions.Options.Add( Option );
                }
            }
            CBAOptions.ToJSON( (JObject) ParentObject[ElemName_Options] );

        } // ToJSON()
        public void RefreshViewName()
        {
            CachedViewNames.Clear();
            if( SelectedViewIds.Count > 0 )
            {
                if( SelectMode != CswEnumNbtPropertySelectMode.Multiple && CswConvert.ToInt32( SelectedViewIds[0] ) > 0 )
                {
                    CswNbtView ThisView = _CswNbtResources.ViewSelect.restoreView( new CswNbtViewId( CswConvert.ToInt32( SelectedViewIds[0] ) ) );
                    if( null != ThisView )
                    {
                        CachedViewNames.Add( ThisView.ViewName );
                    }
                }
                else
                {
                    Collection<Int32> SelectedViewIdCollection = SelectedViewIds.ToIntCollection();
                    foreach( Int32 ViewId in SelectedViewIdCollection )
                    {
                        CswNbtView ThisView = _CswNbtResources.ViewSelect.restoreView( new CswNbtViewId( ViewId ) );
                        if( null != ThisView )
                        {
                            CachedViewNames.Add( ThisView.ViewName );
                        }
                    } // foreach( Int32 ViewId in SelectedViewIdCollection )
                }
            } // if( SelectedViewIds.Count > 0 )

            this.PendingUpdate = false;
        } // RefreshViewName()
        public DataTable ViewsForCBA()
        {
            DataTable _ViewsForCBA = new CswDataTable( "viewpicklistdatatable", "" );
            _ViewsForCBA.Columns.Add( KeyColumn, typeof( Int32 ) );
            _ViewsForCBA.Columns.Add( NameColumn, typeof( string ) );
            _ViewsForCBA.Columns.Add( ValueColumn, typeof( bool ) );

            foreach( CswNbtView ThisView in Views.Values )
            {
                DataRow NewViewRow = _ViewsForCBA.NewRow();
                NewViewRow[NameColumn] = ThisView.ViewName;
                NewViewRow[KeyColumn] = ThisView.ViewId.get();
                NewViewRow[ValueColumn] = ( ( SelectedViewIds.Contains( ThisView.ViewId.get() ) ) ||
                                          ( ( Views.Values.First() == ThisView ) && Required && SelectedViewIds.Count == 0 ) );
                _ViewsForCBA.Rows.Add( NewViewRow );
            }
            return _ViewsForCBA;
        } // ViewsForCBA
        } // ToJSON()

        public override void ReadDataRow( DataRow PropRow, Dictionary<string, Int32> NodeMap, Dictionary<Int32, Int32> NodeTypeMap )
        {
            SelectedViewIds.FromString( CswTools.XmlRealAttributeName( PropRow[_SelectedViewIdsSubField.ToXmlNodeName()].ToString() ) );
            PendingUpdate = true;
        }