Go4Expert

Go4Expert (http://www.go4expert.com/)
-   ASP.NET (http://www.go4expert.com/articles/asp-net-tutorials/)
-   -   Using INotifyPropertyChanged Event Handler (http://www.go4expert.com/articles/using-inotifypropertychanged-event-t19463/)

naimish 17Sep2009 08:24

Using INotifyPropertyChanged Event Handler
 

Introduction



Changing values in databse when a property changes is cumbersome to make it easier we can use propertchanged Event as in the solution.

Background



A script is generated for every property changed when the user wishes to update (Save button clicked) we can run this script.

We do not require to create query for all properties the same function can be used accross all properties thus making it much easier for us to update.

The code




Code: .NET

Code:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Data;
using System.ComponentModel;
namespace Addresses
{
    class Phone : BaseConnection, IAdd, INotifyPropertyChanged
    {
        string phoneNo;
        string carrier;
        //public string CmdStr;
        string tableName = "PhoneNo";
        bool IsNew;
        public string PhoneNo
        {
            get
            {
                return phoneNo;
            }
            set
            {
                phoneNo = value;
                NotifyPropertyChanged(PhoneNo.GetType(), "PhoneNo", value);
                //CmdStr += "UPDATE PhoneNo SET PhoneNo=" + value + ";";
            }
        }
        public string Carrier
        {
            get
            {
                return carrier;
            }
            set
            {
                carrier = value;
                NotifyPropertyChanged(Carrier.GetType(),"Carrier", value);
                //CmdStr += "UPDATE PhoneNo SET Carrier=" + value + ";";
            }
        }
        public Phone(string PhoneId)
            : base()
        {
            cmd.CommandText = "SELECT PhoneNo, Carrier FROM PhoneNo WHERE PhoneNo='" + PhoneId+"';";
            if (conn.State!=ConnectionState.Open)
                conn.Open();
               
            OleDbDataReader rdr = cmd.ExecuteReader();
            rdr.Read();
            phoneNo = rdr[0].ToString();
            carrier = rdr[1].ToString();
            rdr.Close();
            if (ConnectionOpener == this.GetType())
                conn.Close();
            IsNew = false;
           
        }
        public Phone(string phNo, string carr)
            : base()
        {
            phoneNo = phNo;
            carrier = carr;
            IsNew = true;
            AddToBuffer();
        }
        #region IAdd Members
        public void Add(IAdd add)
        {
            Phone phone = (Phone)add;
            cmd.CommandText = "INSERT INTO PhoneNo (PhoneNo, Carrier) VALUES( @phoneNo,@Carrier)";
            OleDbParameter p1 = new OleDbParameter("@phoneNo", phone.phoneNo);
            OleDbParameter p2 = new OleDbParameter("@Carrier", phone.Carrier);
            cmd.Parameters.Add(p1);
            cmd.Parameters.Add(p2);
            if (conn.State != ConnectionState.Open)
                conn.Open();
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch
            {
            //    throw new Exception();
            }
            if (ConnectionOpener == this.GetType())
                conn.Close();
        }

        public void AddToBuffer()
        {
            CmdStr = " INSERT INTO PhoneNo (PhoneNo, Carrier) VALUES( "+this.phoneNo+","+this.carrier+");";
        }
        #endregion
        #region INotifyPropertyChanged Members
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(Type type,string propertyName,String propertyValue)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyValue));
            }
            switch(type.Name)
            {
                case "String":
            CmdStr += " UPDATE " + this.tableName + " SET "+propertyName+"=" + propertyValue + ";";
                    break;
                case "Int32":
                    CmdStr += " UPDATE " + this.tableName + " SET "+propertyName+"=" + propertyValue + ";";
                break;
                default:
                    break;
            }
        }
 
        #endregion
    }
}


shabbir 3Oct2009 17:06

Re: Using INotifyPropertyChanged Event Handler
 
Nomination for Article of the month - Sep 2009 Started. Nominate this article.


All times are GMT +5.5. The time now is 19:20.