Esempio n. 1
0
 public DatabaseRowParser(DataGridObjects.DatabaseRowObject databaseRowObj, MyTherapistEncryption.SecurityController dataEncryptionAlgorithm)
 {
     //
     // TODO: Add constructor logic here
     //
     this.sqlReader               = sqlReader;
     this.databaseRowObj          = databaseRowObj;
     this.dataEncryptionAlgorithm = dataEncryptionAlgorithm;
 }
        public DataTable BuildTable(DataGridObjects.GridRowObject gridInfo = null)
        {
            int           _totalNumberOfTableRows = 0;
            StringBuilder sqlCommandString        = null;
            StringBuilder sqlSelectClause         = null;
            string        orderByColumnName       = string.Empty;

            char[]        parms       = { ',' };
            List <string> tlist       = null;
            string        wherePhrase = string.Empty;

            databaseConnection.Open();

            if (databaseConnection.State == ConnectionState.Open)
            {
                databaseCommand = new System.Data.SqlClient.SqlCommand();
                sqlSelectClause = new StringBuilder();

                sqlSelectClause.Append("SELECT Count(*) FROM ");
                sqlSelectClause.Append(databaseTableName);

                databaseCommand.CommandText = sqlSelectClause.ToString();
                databaseCommand.Connection  = databaseConnection;
                _totalNumberOfTableRows     = (int)databaseCommand.ExecuteScalar();
                sqlSelectClause.Clear();

                NumberOfCompletedPages = _totalNumberOfTableRows / Math.Max(NumberRowsToDisplay, 10);

                sqlSelectClause.Append("SELECT ");

                IEnumerator <DatabaseRowObject.DatabaseColumnObject> iter = DatabaseRowObject.GetEnumerator();

                DataColumn dataColumn = null;
                DataGridObjects.DatabaseRowObject.DatabaseColumnObject column = null;

                while (iter.MoveNext())
                {
                    dataColumn = new DataColumn();
                    column     = iter.Current;

                    dataColumn.ColumnName = column.DataGridColumnName;

                    if (column.DataType == MyDataTypes.INTEGER)
                    {
                        dataColumn.DataType = System.Type.GetType("System.Int32");
                    }

                    if (column.DataType == MyDataTypes.STRING)
                    {
                        dataColumn.DataType = System.Type.GetType("System.String");
                    }

                    if (column.DataType == MyDataTypes.GUID)
                    {
                        dataColumn.DataType = System.Type.GetType("System.Guid");
                    }

                    dataGridTable.Columns.Add(column.DataGridColumnName, dataColumn.DataType);

                    sqlSelectClause.Append(column.DataBaseTableColumnName);
                    sqlSelectClause.Append(",");

                    if (column.OrderByColumn)
                    {
                        orderByColumnName = column.DataBaseTableColumnName;
                    }
                }

                sqlCommandString = new StringBuilder();
                sqlCommandString.Append(sqlSelectClause.ToString().TrimEnd(parms));
                sqlCommandString.Append(" FROM ");
                sqlCommandString.Append(databaseTableName);

                ///////// now check for joins
                iter.Reset();

                while (iter.MoveNext())
                {
                    if (string.IsNullOrEmpty(iter.Current.JoinTable) == false)
                    {
                        sqlCommandString.Append(" ");
                        sqlCommandString.Append(" INNER JOIN  ");
                        sqlCommandString.Append(iter.Current.JoinTable);
                        sqlCommandString.Append(" ON ");
                        sqlCommandString.Append(iter.Current.JoinColumnMainTable);
                        sqlCommandString.Append(" = ");
                        sqlCommandString.Append(iter.Current.JoinColumnJoinTable);
                    }
                }

                ////////

                if (whereClause.Length > 0)
                {
                    wherePhrase = whereClause.ToString().TrimEnd(new char[] { ' ', 'A', 'N', 'D' });
                    sqlCommandString.Append(" WHERE ");
                    sqlCommandString.Append(wherePhrase);
                }

                if (String.IsNullOrEmpty(orderByColumnName) == false)
                {
                    sqlCommandString.Append(" ORDER BY ");
                    sqlCommandString.Append(orderByColumnName);
                }

                if (Sort == MyDataSort.ASC)
                {
                    sqlCommandString.Append(" ASC ");
                }
                else
                {
                    sqlCommandString.Append(" DESC ");
                }

                if (NumberRowsToDisplay > 0)
                {
                    sqlCommandString.Append(" OFFSET ");
                    sqlCommandString.Append(((PageNumber - 1) * NumberRowsToDisplay).ToString());
                    sqlCommandString.Append(" ROWS ");
                    sqlCommandString.Append(" FETCH NEXT ");
                    sqlCommandString.Append(NumberRowsToDisplay.ToString());
                    sqlCommandString.Append(" ROWS ONLY ");
                }

                databaseCommand.CommandText = sqlCommandString.ToString();
                databaseCommand.Connection  = databaseConnection;
                databaseReader = databaseCommand.ExecuteReader();
                string fieldData = string.Empty;
                tlist = new List <string>();

                DataRow           row       = null;
                object[]          itemArray = null;
                int               itemCount = 0;
                DatabaseRowParser rowParser = null;
                rowParser = new DatabaseRowParser(DatabaseRowObject, dataEncryptionAlgorithm);
                DataRowDisplay rowToDisplay = null;

                if (databaseReader.HasRows)
                {
                    while (databaseReader.Read())
                    {
                        // for each row in the grid info object
                        // iterate through the columns and find that column in the the row from the database
                        // place that value of the column in the row for the data grid object

                        // else a row from the database is a row in the datagridview
                        row       = dataGridTable.NewRow();
                        itemCount = 0;

                        itemArray = new object[DatabaseRowObject.NumberColumns];
                        iter      = DatabaseRowObject.GetEnumerator();

                        column              = null;
                        rowParser           = new DatabaseRowParser(DatabaseRowObject, dataEncryptionAlgorithm);
                        rowParser.sqlReader = databaseReader;


                        while (iter.MoveNext())
                        {
                            column = iter.Current;
                            itemArray[itemCount] = rowParser.GetValue(column.DataBaseTableColumnName);
                            itemCount++;
                        }

                        row.ItemArray = itemArray;
                        dataGridTable.Rows.Add(row);
                    }

                    databaseReader.Close();
                    databaseConnection.Close();
                }

                if (FillToCompletePage)
                {
                    if (dataGridTable.Rows.Count < NumberRowsToDisplay)
                    {
                        while (NumberRowsToDisplay != dataGridTable.Rows.Count)
                        {
                            itemArray     = new object[DatabaseRowObject.NumberColumns];
                            row           = dataGridTable.NewRow();
                            row.ItemArray = itemArray;
                            dataGridTable.Rows.Add(row);
                        }
                    }
                }
            }

            return(dataGridTable);
        }