private void ColumnsToXmlTransformationForm_Load(object sender, EventArgs e)
        {
            //Get Current HistoryLookukp properties
            IDTSCustomProperty noMatchBehavior  = UIHelper.ComponentMetadata.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.NoMatchBehavior)];
            IDTSCustomProperty cacheType        = UIHelper.ComponentMetadata.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.CacheType)];
            IDTSCustomProperty noMatchCacheSize = UIHelper.ComponentMetadata.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.NoMatchCacheSize)];
            IDTSCustomProperty defaultCacheSize = UIHelper.ComponentMetadata.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.DefaultCacheSize)];
            IDTSCustomProperty keyhashAlgorithm = UIHelper.ComponentMetadata.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.KeyHashAlgorithm)];

            _historyLookupProperties = new HistoryLookupProperties(noMatchBehavior, cacheType, noMatchCacheSize, defaultCacheSize, keyhashAlgorithm);

            try
            {
                _formLoading = true;
                //Load Input columns and populate mappings ListView
                LoadInputColumns();

                //Load Lookup and Output Columsn and populate Output Columns ListView
                LoadOutputColumns();
            }
            finally
            {
                _formLoading = false;
            }

            //assign handler to detect properties changes to validate status
            _historyLookupProperties.ObjectPropertiesChanged += Properties_ObjectPropertiesChanged;

            //Check current prperties
            Properties_ObjectPropertiesChanged(_historyLookupProperties);

            //Assing current proerties to PropetyGrid
            propComponent.SelectedObject = _historyLookupProperties;
        }
        private void Properties_ObjectPropertiesChanged(HistoryLookupProperties prop)
        {
            propertiesErrors = new StringBuilder();

            List <DataType> dataTypes = new List <DataType>();

            var dataDateCol = HistoryLookupTransformationUI.InputDateColumns.Find(ic => ic.LineageID == prop.DataDateColumnLineageID);

            if (dataDateCol != null && !dataTypes.Contains(dataDateCol.DataType))
            {
                dataTypes.Add(dataDateCol.DataType);
            }
            var lookupDateFromCol = HistoryLookupTransformationUI.LookupDateColumns.Find(ic => ic.LineageID == prop.LookupDateFromLineageID);

            if (lookupDateFromCol != null && !dataTypes.Contains(lookupDateFromCol.DataType))
            {
                dataTypes.Add(lookupDateFromCol.DataType);
            }
            var lookupDateToCol = HistoryLookupTransformationUI.LookupDateColumns.Find(ic => ic.LineageID == prop.LookupDateToLineageID);

            if (lookupDateToCol != null && !dataTypes.Contains(lookupDateToCol.DataType))
            {
                dataTypes.Add(lookupDateToCol.DataType);
            }

            if (dataTypes.Count > 1)
            {
                propertiesErrors.AppendLine("All DateColumns must be of the same DataType");
            }

            if (prop.DefaultCacheSize < 1)
            {
                propertiesErrors.Append("DefaultCacheSize mut be greater than 0");
            }

            if (prop.NoMatchCacheSize < 0)
            {
                propertiesErrors.Append("NoMatchCacheSize must be greater or equal to 0");
            }

            ValidateForErrors();
        }