private void gridViewDetails_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                Table table = GetSelectedTable();
                if (table == null)
                    return;

                string columnName = gridViewDetails[COL_COLUMNNAME, e.RowIndex].Value.ToString();
                string value = gridViewDetails[e.ColumnIndex, e.RowIndex].Value.ToString();
                using (ISession session = ActiveRecordConfiguration.GetISession())
                {
                    IQueryable<KPMappingEntity> queryable = session.Query<KPMappingEntity>()
                        .Where(x => x.OwnerSchema.Equals(table.OwnerSchema) &&
                                    x.Database.Equals(table.DatabaseName) &&
                                    x.Table.Equals(table.Name) &&
                                    x.Column.Equals(columnName));


                    KPMappingEntity entityList = queryable.FirstOrDefault();
                    if (entityList == null)
                    {
                        entityList = new KPMappingEntity()
                        {
                            OwnerSchema = table.OwnerSchema,
                            Database = table.DatabaseName,
                            Table = table.Name,
                            Column = columnName
                        };
                    }

                    bool reloadComponentProperty = false;
                    switch (gridViewDetails.Columns[e.ColumnIndex].Name)
                    {
                        case COL_DISPLAYNAME:
                            entityList.DisplayName = value;
                            break;

                        case COL_COLUMNTYPEVIEW:
                            entityList.ColumnTypeView = value;
                            reloadComponentProperty = true;
                            break;

                        case COL_COLUMNTYPEFORM:
                            reloadComponentProperty = true;
                            entityList.ColumnTypeForm = value;
                            break;

                        case COL_CSHARPTYPE:
                            entityList.CSharpType = value;
                            break;
                        default:
                            return;
                    }

                    entityList.Save();

                    if (reloadComponentProperty)
                    {
                        LoadComponentsProperties(e.RowIndex);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void LoadComponentsProperties(int rowIndex)
        {
            Table table = GetSelectedTable();
            if (table == null)
                return;

            string columnName = gridViewDetails[COL_COLUMNNAME, rowIndex].Value.ToString();
            KPMappingEntity mappingEntity = null;
            using (ISession session = ActiveRecordConfiguration.GetISession())
            {
                IQueryable<KPMappingEntity> queryable = session.Query<KPMappingEntity>()
                    .Where(x => x.OwnerSchema.Equals(table.OwnerSchema) &&
                                x.Database.Equals(table.DatabaseName) &&
                                x.Table.Equals(table.Name) &&
                                x.Column.Equals(columnName));


                mappingEntity = queryable.FirstOrDefault();
                if (mappingEntity == null)
                {
                    mappingEntity = new KPMappingEntity()
                    {
                        OwnerSchema = table.OwnerSchema,
                        Database = table.DatabaseName,
                        Table = table.Name,
                        Column = columnName
                    };

                    mappingEntity.SaveAndFlush();
                }
            }

            var entityColumn = gridViewDetails.Rows[rowIndex].DataBoundItem as Column;
            KPComponentsFormsEnum? componentFormEnum = gridViewDetails[COL_COLUMNTYPEFORM, rowIndex].Value as KPComponentsFormsEnum?;
            if (componentFormEnum.HasValue)
            {
                switch (componentFormEnum.Value)
                {
                    case KPComponentsFormsEnum.KPFormItemButton:
                        break;
                    case KPComponentsFormsEnum.KPFormItemCheckBox:
                        {
                            var entityControl = new KPFormItemCheckBoxEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            if (!entityColumn.IsNullable)
                                entityControl.IsRequired = true;
                            propertyForm.SelectedObject = entityControl;
                        }
                        break;
                    case KPComponentsFormsEnum.KPFormItemCombo:
                        {
                            var entityControl = new KPFormItemComboEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            if (!entityColumn.IsNullable)
                                entityControl.IsRequired = true;
                            propertyForm.SelectedObject = entityControl;
                        }
                        break;
                    case KPComponentsFormsEnum.KPFormItemEntity:
                        {
                            var entityControl = new KPFormItemEntityEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            if (!entityColumn.IsNullable)
                                entityControl.IsRequired = true;
                            propertyForm.SelectedObject = entityControl;
                        }
                        break;
                    case KPComponentsFormsEnum.KPFormItemGrid:
                        {
                            var entityControl = new KPFormItemGridEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            if (!entityColumn.IsNullable)
                                entityControl.IsRequired = true;
                            propertyForm.SelectedObject = entityControl;
                        }
                        break;
                    case KPComponentsFormsEnum.KPFormItemPassword:
                        {
                            var entityControl = new KPFormItemPasswordEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            if (!entityColumn.IsNullable)
                                entityControl.IsRequired = true;
                            propertyForm.SelectedObject = entityControl;
                        }
                        break;
                    case KPComponentsFormsEnum.KPFormItemText:
                        {
                            var entityControl = new KPFormItemTextEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            if (!entityColumn.IsNullable)
                                entityControl.IsRequired = true;
                            if (entityColumn.MappedDataType == typeof(DateTime)
                                || entityColumn.MappedDataType == typeof(DateTime?))
                                entityControl.MaskType = KPMaskTypeClassEnum.DATETIME;
                            propertyForm.SelectedObject = entityControl;
                        }
                        break;
                    case KPComponentsFormsEnum.KPFormItemDateTime:
                        {
                            var entityControl = new KPFormItemDateTimeEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            if (!entityColumn.IsNullable)
                                entityControl.IsRequired = true;
                            propertyForm.SelectedObject = entityControl;
                        }
                        break;
                    case KPComponentsFormsEnum.KPFormItemZoom:
                        {
                            var entityControl = new KPFormItemZoomEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            if (!entityColumn.IsNullable)
                                entityControl.IsRequired = true;
                            propertyForm.SelectedObject = entityControl;
                        }
                        break;
                    default:
                        propertyForm.SelectedObject = null;
                        break;
                }
            }

            KPComponentsViewEnum? componentViewEnum = gridViewDetails[COL_COLUMNTYPEVIEW, rowIndex].Value as KPComponentsViewEnum?;
            if (componentViewEnum.HasValue)
            {
                switch (componentViewEnum.Value)
                {
                    case KPComponentsViewEnum.KPColumnModel:
                        {
                            var entityControl = new KPColumnModelEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            if (entityColumn.IsPrimaryKey)
                                entityControl.IsVisible = false;
                            if (entityColumn.MappedDataType == typeof(DateTime)
                                || entityColumn.MappedDataType == typeof(DateTime?))
                                entityControl.MaskType = KPMaskTypeClassEnum.DATETIME;
                            propertyView.SelectedObject = entityControl;
                        }
                        break;
                    case KPComponentsViewEnum.KPEnumModel:
                        {
                            var entityControl = new KPEnumModelEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            propertyView.SelectedObject = entityControl;
                        }
                        break;
                    case KPComponentsViewEnum.KPEntityModel:
                        {
                            var entityControl = new KPEntityModelEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            propertyView.SelectedObject = entityControl;
                        }
                        break;
                    case KPComponentsViewEnum.KPBooleanModel:
                        {
                            var entityControl = new KPBooleanModelEntity().GetEntityByMapping(mappingEntity, entityColumn);
                            propertyView.SelectedObject = entityControl;
                        }
                        break;
                    default:
                        propertyView.SelectedObject = null;
                        break;
                }
            }
        }
        private void CreateKPMappingEntityForAllColumns(Table table)
        {
            KPMappingEntity mappingEntity = null;
            using (ISession session = ActiveRecordConfiguration.GetISession())
            {
                foreach (Column column in table.Columns)
                {
                    IQueryable<KPMappingEntity> queryable = session.Query<KPMappingEntity>()
                        .Where(x => x.OwnerSchema.Equals(table.OwnerSchema) &&
                                    x.Database.Equals(table.DatabaseName) &&
                                    x.Table.Equals(table.Name) &&
                                    x.Column.Equals(column.Name));


                    mappingEntity = queryable.FirstOrDefault();
                    if (mappingEntity == null)
                    {
                        mappingEntity = new KPMappingEntity()
                        {
                            OwnerSchema = table.OwnerSchema,
                            Database = table.DatabaseName,
                            Table = table.Name,
                            Column = column.Name
                        };

                        mappingEntity.SaveAndFlush();
                    }
                }
            }
        }