//end return html
    /// <summary>
    /// ********************* customer target grid update append updated field(s) to history table
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void dxgrdTarget_RowUpdated(object sender, DevExpress.Web.Data.ASPxDataUpdatedEventArgs e)
    {
        if (e.AffectedRecords != 0)
        {
            //for batch save
            TargetHistoryCollection _t = new TargetHistoryCollection();
            string _user = Page.Session["user"] != null ? (string)((UserClass)Page.Session["user"]).UserName : "";
            //to enumerate through values
            string _key = e.Keys[0].ToString(); //this should be TargetID
            System.Collections.Specialized.OrderedDictionary _list = new System.Collections.Specialized.OrderedDictionary();
            _list = (System.Collections.Specialized.OrderedDictionary)e.OldValues;
            int _ix = 0;

            //loop through each entry in dictionary
            foreach (System.Collections.DictionaryEntry _entry in _list)
            {
                string[] _args = new string[3];

                _args[0] = _entry.Key != null?_entry.Key.ToString() : "";

                if (_args[0] != "UpdateUser" && _args[0] != "UpdateDate" && _args[0] != "InsertDate") //we don't need to log changes to these
                {
                    _args[1] = e.OldValues[_ix] != null ? e.OldValues[_ix].ToString() : "";
                    _args[2] = e.NewValues[_ix] != null ? e.NewValues[_ix].ToString() : "";

                    if (_args[2] != _args[1])
                    {
                        TargetHistory _item = new TargetHistory();
                        _item.IDtarget    = wwi_func.vint(_key);
                        _item.FieldName   = wwi_func.uncamel(_args[0]); //field name
                        _item.ChangedFrom = _args[1];
                        _item.ChangedTo   = _args[2];
                        _item.LogDate     = DateTime.Now.Date;
                        _item.LogUser     = _user;
                        //append to history
                        _t.Add(_item);
                    }
                }
                _t.SaveAll();
                _ix++;
            } //end loop
        }     //end if affected records
    }
	    public void Insert(int? IDtarget,DateTime? LogDate,string LogUser,string FieldName,string ChangedFrom,string ChangedTo,byte[] Dbtimestamp)
	    {
		    TargetHistory item = new TargetHistory();
		    
            item.IDtarget = IDtarget;
            
            item.LogDate = LogDate;
            
            item.LogUser = LogUser;
            
            item.FieldName = FieldName;
            
            item.ChangedFrom = ChangedFrom;
            
            item.ChangedTo = ChangedTo;
            
            item.Dbtimestamp = Dbtimestamp;
            
	    
		    item.Save(UserName);
	    }
	    public void Update(int HistoryID,int? IDtarget,DateTime? LogDate,string LogUser,string FieldName,string ChangedFrom,string ChangedTo,byte[] Dbtimestamp)
	    {
		    TargetHistory item = new TargetHistory();
	        item.MarkOld();
	        item.IsLoaded = true;
		    
			item.HistoryID = HistoryID;
				
			item.IDtarget = IDtarget;
				
			item.LogDate = LogDate;
				
			item.LogUser = LogUser;
				
			item.FieldName = FieldName;
				
			item.ChangedFrom = ChangedFrom;
				
			item.ChangedTo = ChangedTo;
				
			item.Dbtimestamp = Dbtimestamp;
				
	        item.Save(UserName);
	    }
    //end return html
    /// <summary>
    /// ********************* customer target grid update append updated field(s) to history table
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void dxgrdTarget_RowUpdated(object sender, DevExpress.Web.Data.ASPxDataUpdatedEventArgs e)
    {
        if(e.AffectedRecords != 0)
        {
            
            //for batch save
            TargetHistoryCollection _t = new TargetHistoryCollection();
            string _user = Page.Session["user"] != null ? (string)((UserClass)Page.Session["user"]).UserName : "";
            //to enumerate through values
            string _key = e.Keys[0].ToString(); //this should be TargetID
            System.Collections.Specialized.OrderedDictionary _list = new System.Collections.Specialized.OrderedDictionary();
            _list = (System.Collections.Specialized.OrderedDictionary)e.OldValues;
            int _ix = 0;

            //loop through each entry in dictionary
            foreach (System.Collections.DictionaryEntry _entry in _list)
            {
                string[] _args = new string[3];

                _args[0] = _entry.Key != null ? _entry.Key.ToString() : "";
                if (_args[0] != "UpdateUser" && _args[0] != "UpdateDate" && _args[0] != "InsertDate") //we don't need to log changes to these
                {
                    _args[1] = e.OldValues[_ix] != null ? e.OldValues[_ix].ToString() : "";
                    _args[2] = e.NewValues[_ix] != null ? e.NewValues[_ix].ToString() : "";

                    if (_args[2] != _args[1])
                    {
                        TargetHistory _item = new TargetHistory();
                        _item.IDtarget = wwi_func.vint(_key);
                        _item.FieldName = wwi_func.uncamel(_args[0]); //field name
                        _item.ChangedFrom  = _args[1];
                        _item.ChangedTo = _args[2]; 
                        _item.LogDate = DateTime.Now.Date;
                        _item.LogUser = _user;
                        //append to history
                        _t.Add(_item);
                    }
                }
                _t.SaveAll(); 
                _ix++;
            }//end loop
        } //end if affected records
    }