public void Save(ObjectProperties ObjectProperties)
        {
            if (ObjectProperties[ObjectProperties.STATE_PROP_NAME] != null)
            {
                _dataTable.Fill(string.Format("TABLE_NAME = '{0}' AND OBJID = {1}", ObjectProperties.tableContext.Source, ObjectProperties.GetValue(ObjectProperties.tableContext.PkFieldName)));
                
                foreach (System.Data.DataRow dataRow in _dataTable.Rows.Cast<System.Data.DataRow>())
                {
                    dataRow.Delete();
                }

                foreach (var r in ObjectProperties[ObjectProperties.STATE_PROP_NAME].value.GroupBy(p => p.value).
                    Select(p => new { state = p.Key, fields = p.Select(s=>s.key).ToString(",") }))
                {
                    _dataTable.Rows.Add(ObjectProperties.tableContext.Source, r.state, ObjectProperties.GetValue(ObjectProperties.tableContext.PkFieldName), r.fields);
                }

                _dataTable.Update();

                _dataTable.Clear();
            }
        }
        public void Load(ObjectProperties ObjectProperties)
        {
            if (_dataTable != null)
            {
                _dataTable.Fill(string.Format("TABLE_NAME = '{0}' AND OBJID = {1}", ObjectProperties.tableContext.XOTable.Source, ObjectProperties.GetValue(ObjectProperties.tableContext.PkFieldName)));

                foreach (var r in _dataTable.Rows.Cast<System.Data.DataRow>()
                    .Select(p => new { state = p.Field<string>("STATE"), fields = p.Field<string>("COLS").Split(',') }))
                {
                    foreach (string field in r.fields)
                    {
                        ObjectProperties.SetState(field, r.state);
                    }
                }

                _dataTable.Clear();
            }
        }