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); }