public void UpdateDatasource(object table)
        {
            //At first it will load from Json and Json will be serialized into DataColumns as DataColumn item, not UIColumn item as expected. That is why we need
            //DataColumns2, to store its UIColumn list, and copy it to DataColumns
            if (table.GetType() != typeof(DataSourceLogicTable))
            {
                string json = Utility.Serializer.Json.Serialize(table);
                json = json.Replace("DataColumns", "DataColumns2");
                //json = json.Replace("DataColumns22", "DataColumns2");
                DataSourceLogicTable tbl = Utility.Serializer.Json.Deserialize <DataSourceLogicTable>(json);
                foreach (LogicColumn col in tbl.DataColumns2)
                {
                    //col.ControlConfigurations =
                    tbl.DataColumns.Add(col);
                }
                CurrentTable = tbl;
            }
            else
            {
                CurrentTable = (DataSourceLogicTable)table;
            }

            gridColumns.AutoGenerateColumns = false;
            //gridColumns.DataSource = tbl.DataColumns;
            gridColumns.DataSource = CurrentTable.DataColumns.ConvertAll(c => c as LogicColumn);
        }
        LogicColumn CreateNewDeleteLogicColumn(DataSourceTable table, DataSourceLogicTable newTable, List <Model.DataColumn> datacols)
        {
            Model.LogicColumn logicColumn = new Model.LogicColumn();
            logicColumn.ReturnType   = "void";
            logicColumn.Tag          = "delete-int-and-int";
            logicColumn.Use          = true;
            logicColumn.FunctionName = "DeleteBy";

            List <FunctionParameter> parameters = new List <FunctionParameter>();

            foreach (Model.DataColumn col in datacols)
            {
                logicColumn.FunctionName += col.ColumnName + "And";
                string dtType   = Helper.DatabaseMapper.MapType(col.DataType);
                string varName1 = Helper.StrUtil.LowFirst(col.ColumnName) + "";
                parameters.Add(new FunctionParameter(varName1, dtType, col));
            }

            if (logicColumn.FunctionName.Length > 0)
            {
                logicColumn.FunctionName = logicColumn.FunctionName.Substring(0, logicColumn.FunctionName.Length - 3);
            }


            Dictionary <string, object> dict = new Dictionary <string, object>();

            dict.Add("Parameters", parameters);

            logicColumn.ConfigContent = new FunctionConfigurator();
            logicColumn.ConfigContent.DisplayConfiguration(dict);

            return(logicColumn);
        }
        public void InitFromDatasource(DataSourceTable table)
        {
            gridColumns.AutoGenerateColumns = false;
            DataSourceLogicTable newTable = Copy(table);

            gridColumns.DataSource = newTable.DataColumns.ConvertAll(c => c as LogicColumn);
            CurrentTable           = newTable;
        }
        protected DataSourceLogicTable Copy(DataSourceTable table)
        {
            DataSourceLogicTable newTable = new DataSourceLogicTable();

            newTable.TableName   = table.TableName;
            newTable.TableSchema = table.TableSchema;
            AddDefaultFunctions(table, newTable);
            //AddDefaultFunctionsAgain(table, newTable);
            return(newTable);
        }
 bool Exists(DataSourceLogicTable table, LogicColumn col)
 {
     foreach (LogicColumn col2 in table.DataColumns)
     {
         if (col.FunctionName == col2.ColumnName)
         {
             return(true);
         }
     }
     return(false);
 }
        void AddDefaultListFunctionsAgain(DataSourceTable table, DataSourceLogicTable newTable)
        {
            int colCounter = 0;

            foreach (Model.DataColumn col in table.DataColumns)
            {
                if (col.DataType.ToLower().Contains("int") && col.Key == false)
                {
                    AddDefaultListFunctionsAgainOnNewTable(table, newTable, colCounter, col);
                }
                colCounter++;
            }
        }
        void AddDefaultListFunctionsAgainOnNewTable(DataSourceTable table, DataSourceLogicTable newTable, int colCounter, Model.DataColumn col)
        {
            int colCounter2 = 0;

            foreach (Model.DataColumn col2 in table.DataColumns)
            {
                LogicColumn logicColumn = CreateDefaultListFunctionAgainLogicColumn(colCounter, colCounter2, col, col2, newTable);
                if (logicColumn != null)
                {
                    newTable.DataColumns.Add(logicColumn);
                }
                colCounter2++;
            }
        }
        void Test(DataSourceTable tbl, DataSourceLogicTable newTable, List <Model.DataColumn> cols)
        {
            bool start = false;

            if (cols == null)
            {
                cols = new List <Model.DataColumn>();
            }

            foreach (Model.DataColumn col in tbl.DataColumns)
            {
                if (start && col.DataType.ToLower().Contains("int"))
                {
                    cols.Add(col);
                    LogicColumn newColumn = CreateNewFindLogicColumn(tbl, newTable, cols);
                    if (Exists(newTable, newColumn) == false)
                    {
                        newTable.DataColumns.Add(newColumn);
                    }
                    newColumn = CreateNewUpdateLogicColumn(tbl, newTable, cols);
                    if (Exists(newTable, newColumn) == false)
                    {
                        newTable.DataColumns.Add(newColumn);
                    }
                    newColumn = CreateNewDeleteLogicColumn(tbl, newTable, cols);
                    if (Exists(newTable, newColumn) == false)
                    {
                        newTable.DataColumns.Add(newColumn);
                    }

                    List <Model.DataColumn> tempCols = new List <Model.DataColumn>();
                    tempCols = tempCols.Concat(cols).ToList();

                    Test(tbl, newTable, tempCols);
                    cols.Remove(col);
                }
                if (cols.Count == 0)
                {
                    start = true;
                }
                if (cols.Count > 0 && col.ColumnName == cols[cols.Count - 1].ColumnName)
                {
                    start = true;
                }
            }
        }
        void AddDefaultFunctionsAgain(DataSourceTable table, DataSourceLogicTable newTable)
        {
            int colCounter = 0;

            foreach (Model.DataColumn col in table.DataColumns)
            {
                if (col.DataType.ToLower().Contains("int") && col.Key == false)
                {
                    int colCounter2 = 0;
                    foreach (Model.DataColumn col2 in table.DataColumns)
                    {
                        if (colCounter2 >= colCounter && col2.DataType.ToLower().Contains("int") && col2.Key == false && col.ColumnName.Equals(col2.ColumnName) == false)
                        {
                            Model.LogicColumn logicColumn = new Model.LogicColumn();
                            logicColumn.ColumnName   = col.ColumnName;
                            logicColumn.ColumnText   = col.ColumnText;
                            logicColumn.ReturnType   = "List<" + newTable.TableName + ">";
                            logicColumn.Tag          = "list-int-and-int";
                            logicColumn.Use          = true;
                            logicColumn.FunctionName = "FindBy" + col.ColumnName + "And" + col2.ColumnName;
                            string dtType   = Helper.DatabaseMapper.MapType(col.DataType);
                            string varName1 = Helper.StrUtil.LowFirst(col.ColumnName) + "";
                            string varName2 = Helper.StrUtil.LowFirst(col2.ColumnName) + "";
                            List <FunctionParameter> parameters = new List <FunctionParameter>();
                            parameters.Add(new FunctionParameter(varName1, dtType, col));
                            parameters.Add(new FunctionParameter(varName2, dtType, col2));

                            Dictionary <string, object> dict = new Dictionary <string, object>();
                            dict.Add("Parameters", parameters);

                            logicColumn.ConfigContent = new FunctionConfigurator();
                            logicColumn.ConfigContent.DisplayConfiguration(dict);

                            newTable.DataColumns.Add(logicColumn);
                        }
                        colCounter2++;
                    }
                }
                colCounter++;
            }
        }
        void AddDefaultFunctions(DataSourceTable table, DataSourceLogicTable newTable)
        {
            foreach (Model.DataColumn col in table.DataColumns)
            {
                LogicColumn logicColumn = null;
                if (col.DataType.ToLower().Contains("int") == false)
                {
                    logicColumn = CreateDefaultFindAllLogicColumn(table, col, newTable);
                    newTable.DataColumns.Add(logicColumn);
                }
                if (col.DataType.ToLower().Contains("int") == false)
                {
                    logicColumn = CreateDefaultUpdateLogicColumn(table, col, newTable);
                    newTable.DataColumns.Add(logicColumn);
                }
                if (col.DataType.ToLower().Contains("int") == false)
                {
                    logicColumn = CreateDefaultDeleteLogicColumn(table, col, newTable);
                    newTable.DataColumns.Add(logicColumn);
                }
            }

            Test(table, newTable, null);
        }
        LogicColumn CreateDefaultDeleteLogicColumn(Model.DataSourceTable sourceTable, Model.DataColumn col, DataSourceLogicTable newTable)
        {
            Model.LogicColumn logicColumn = new Model.LogicColumn();
            logicColumn.ColumnName = col.ColumnName;
            logicColumn.ColumnText = col.ColumnText;
            logicColumn.ReturnType = "void";

            logicColumn.Use = true;
            List <FunctionParameter> parameters = new List <FunctionParameter>();

            logicColumn.Tag          = "delete-by-column";
            logicColumn.FunctionName = "DeleteBy" + logicColumn.ColumnName;
            string dtType  = Helper.DatabaseMapper.MapType(col.DataType);
            string varName = Helper.StrUtil.LowFirst(col.ColumnName);

            parameters.Add(new FunctionParameter(varName, dtType, col));

            Dictionary <string, object> dict = new Dictionary <string, object>();

            dict.Add("Parameters", parameters);

            logicColumn.ConfigContent = new FunctionConfigurator();
            logicColumn.ConfigContent.DisplayConfiguration(dict);

            return(logicColumn);
        }
        LogicColumn CreateDefaultFindAllLogicColumn(Model.DataSourceTable sourceTable, Model.DataColumn col, DataSourceLogicTable newTable)
        {
            Model.LogicColumn logicColumn = new Model.LogicColumn();
            logicColumn.ColumnName = col.ColumnName;
            logicColumn.ColumnText = col.ColumnText;
            logicColumn.ReturnType = "List<" + newTable.TableName + ">";

            logicColumn.Use = true;
            List <FunctionParameter> parameters = new List <FunctionParameter>();

            if (col.DataType.ToLower().Contains("date"))
            {
                logicColumn.Tag          = "list-date";
                logicColumn.FunctionName = "FindBy" + logicColumn.ColumnName + "Between";
                string dtType   = Helper.DatabaseMapper.MapType(col.DataType);
                string varName1 = Helper.StrUtil.LowFirst(col.ColumnName) + "1";
                string varName2 = Helper.StrUtil.LowFirst(col.ColumnName) + "2";
                parameters.Add(new FunctionParameter(varName1, dtType, col));
                parameters.Add(new FunctionParameter(varName2, dtType, col));
            }
            else
            {
                logicColumn.Tag          = "list-string";
                logicColumn.FunctionName = "FindBy" + logicColumn.ColumnName;
                string dtType  = Helper.DatabaseMapper.MapType(col.DataType);
                string varName = Helper.StrUtil.LowFirst(col.ColumnName);
                parameters.Add(new FunctionParameter(varName, dtType, col));
            }


            Dictionary <string, object> dict = new Dictionary <string, object>();

            dict.Add("Parameters", parameters);

            logicColumn.ConfigContent = new FunctionConfigurator();
            logicColumn.ConfigContent.DisplayConfiguration(dict);

            return(logicColumn);
        }