Sample Business Object: ParticleShapeAsc

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using ArchaeologySiteManager.Data;
using ArchaeologySiteManager.State;
using System.Windows.Forms;



namespace ArchaeologySiteManager.Data.Associations
{
    class ParticleShapeAsc : INotifyPropertyChanged
    {

        public int ParticleShapeID 
        { 
            get
            {
                return _ParticleShapeID;
            }
            set
            {
                _ParticleShapeID = value;
                objState.DataState = ObjectState.CHANGED;
                this.NotifyPropertyChanged("ParticleShapeID");
            }
        }
        public int Percent 
        {
            get
            {
                return _Percent;
            }
            set
            {
                _Percent = value;
                objState.DataState = ObjectState.CHANGED;
                this.NotifyPropertyChanged("Percent");
            }
        }
        private int LocusIdentity;
        private int SupplementID;

        private int _ParticleShapeID;
        private int _Percent;

        //private bool LoadedFromTable;
        private ArchDataset.ARCH_Asc_EarthLocusC_ParticleShapeRow row;
        private ArchDataset.ARCH_Asc_EarthLocusC_ParticleShapeDataTable table;
        private ArchDatasetTableAdapters.ARCH_Asc_EarthLocusC_ParticleShapeTableAdapter tad;
        private ObjectState objState;

        public event PropertyChangedEventHandler PropertyChanged;

        public ParticleShapeAsc()
        {
                objState = new ObjectState();
                objState.SourceState = ObjectState.NEW;
                objState.DataState = ObjectState.CHANGED;
                LocusIdentity = 0;
                SupplementID = 0;
                ParticleShapeID = 1;
                Percent = 0;
        }


        public ParticleShapeAsc(ArchDataset.ARCH_Asc_EarthLocusC_ParticleShapeRow r,
            ArchDataset.ARCH_Asc_EarthLocusC_ParticleShapeDataTable t,
            ArchDatasetTableAdapters.ARCH_Asc_EarthLocusC_ParticleShapeTableAdapter ta)
        {        
            table = t;
            tad = ta;
            row = r;
            objState = new ObjectState();
            objState.DataState = ObjectState.UNCHANGED;
            objState.SourceState = ObjectState.LOADED_FROM_DB;
            LocusIdentity = r.LocusIdentity;
            SupplementID = r.SupplementID;
            ParticleShapeID = r.ParticleShapeID;
            Percent = r.Percent;
            
        }

        public bool createdFromDB()
        {
            return objState.SourceState == ObjectState.LOADED_FROM_DB;
        }

        //TODO Implement save logic here - NOTE: The datagridview may not update the
        // LocusID and SupID values and therefore we may need to allow a fix for that here.
        public void save()
        {
            if (objState.SourceState == ObjectState.NEW)
            {
                row = table.NewARCH_Asc_EarthLocusC_ParticleShapeRow();
                saveRow();
                row.EndEdit();
                table.Rows.Add(row);
                tad.Update(row);
                objState.SourceState = ObjectState.LOADED_FROM_DB;
                objState.DataState = ObjectState.UNCHANGED;
            }
            else
            {
                if (objState.DataState == ObjectState.CHANGED)
                {
                    saveRow();
                    row.EndEdit();
                    tad.Update(row);
                    objState.DataState = ObjectState.UNCHANGED;
                }
            }
        }

        /// <summary>
        /// Helper function to set row values from object values.
        /// </summary>
        private void saveRow()
        {
            row.LocusIdentity = this.LocusIdentity;
            row.SupplementID = this.SupplementID;
            row.ParticleShapeID = this.ParticleShapeID;
            row.Percent = this.Percent;
        }

        /// <summary>
        /// Definitely a hack to get around the fact that the DataGridView doesn't assign the 
        /// LocusID and SupplementID values.
        /// </summary>
        /// <param name="lid"></param>
        /// <param name="supid"></param>
        public void save(
            int lid, 
            int supid, 
            ArchDataset.ARCH_Asc_EarthLocusC_ParticleShapeDataTable t,
            ArchDatasetTableAdapters.ARCH_Asc_EarthLocusC_ParticleShapeTableAdapter ta)
        {
            LocusIdentity = lid;
            SupplementID = supid;
            table = t;
            tad = ta;
            save();
        }

        private void NotifyPropertyChanged(string name)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
        
    }
}

ArchaeologyProject/ParticleShapeAsc (last edited 2011-02-09 13:52:35 by 71-88-174-166)