Example #1
0
        private static ViewDataTable GenerateView
        (
            string viewName,
            DataSet source,
            DataTable sourceTable,
            List <string> columns,
            Dictionary <string, string> viewLevelColumnTables
        )
        {
            ViewDataTable viewTable = new ViewDataTable(viewName);

            if (sourceTable == null)
            {
                return(viewTable);
            }

            foreach (string column in columns)
            {
                DataColumn origColumn;

                if (!viewLevelColumnTables.ContainsKey(column))
                {
                    throw new InvalidOperationException(string.Format("Column: {0} doesn't belong to {1}", column, viewName));
                }

                origColumn = source.Tables [viewLevelColumnTables [column]].Columns [column];

                viewTable.Columns.Add(origColumn.ColumnName, origColumn.DataType);
            }

            foreach (DataRow sourceRow in sourceTable.Rows)
            {
                ViewDataRow viewRow;
                Dictionary <string, DataRow> parentTablesRows;


                viewRow          = viewTable.NewViewRow( );
                parentTablesRows = GetParentRows(sourceRow);

                foreach (string column in columns)
                {
                    if (sourceTable.Columns.Contains(column))
                    {
                        viewRow [column] = sourceRow [column];

                        viewRow.OriginalRow   = sourceRow;
                        viewRow.OriginalTable = sourceTable;
                    }
                    else
                    {
                        DataTable parentTable;
                        DataRow   parentRow;


                        parentTable = source.Tables [viewLevelColumnTables [column]];
                        parentRow   = parentTablesRows [parentTable.TableName];

                        viewRow [column] = parentRow [column];

                        viewRow.OriginalRow   = parentRow;
                        viewRow.OriginalTable = parentTable;
                    }
                }

                viewTable.Rows.Add(viewRow);
            }

            return(viewTable);
        }