private DataTable BuildTable()
        {
            var dt = new DataTable();
             var cols = dt.Columns;
             cols.Add( "SLOT", typeof( String ) );
             cols.Add( "PLAYER", typeof( String ) );
             cols.Add( "TEAM", typeof( String ) );
             cols.Add( "FTEAM", typeof( String ) );
             cols.Add( "POS", typeof( String ) );
             cols.Add( "PTS", typeof( Int16 ) );
             cols.Add( "UNIT", typeof( String ) );
             cols.Add( "ROLE", typeof( String ) );
             cols.Add( "GAME", typeof( String ) );
             cols.Add( "OPPRATE", typeof( String ) );
             cols.Add( "SPREAD", typeof( Decimal ) );
             cols.Add( "TOTAL", typeof( Decimal ) );
             cols.Add( "BOOKIE", typeof( String ) );
             cols.Add( "ACTUAL", typeof( Int16 ) );

             PgmList = PgmDao.GetWeek( Season, Week );
             var week = Scorer.Week;

             foreach ( var pgm in PgmList )
             {
            var p = new NFLPlayer( pgm.PlayerId );

            if ( !string.IsNullOrEmpty( TeamFilter ) )
            {
               if ( p.TeamCode != TeamFilter )
                  continue;
            }

            if ( !string.IsNullOrEmpty( CategoryFilter ) )
            {
               if ( p.PlayerCat != CategoryFilter )
                  continue;
            }

            p.LoadOwner( League );
            var dr = dt.NewRow();

            var game = new NFLGame( pgm.GameKey );
            p.LoadProjections( pgm );

            var opponent = p.CurrTeam.OpponentFor( Season, Int32.Parse( Week ) );
            //  player actually available
            dr[ "PLAYER" ] = p.Url( p.PlayerName, forceReport: false );
            dr[ "TEAM" ] = p.CurrTeam.TeamCode;
            dr[ "FTEAM" ] = p.Owner;
            dr[ "ROLE" ] = p.PlayerRole;
            dr[ "POS" ] = p.PlayerPos;

            dr[ "PTS" ] = Scorer.RatePlayer( p, week );
            dr[ "UNIT" ] = game.ProjectionLink();
            dr[ "GAME" ] = string.Format( "{0} {1} {2}",
                                       game.GameDay(), game.Hour, game.OpponentOut( p.CurrTeam.TeamCode ) );
            dr[ "SPREAD" ] = game.GetSpread();
            dr[ "TOTAL" ] = game.Total;
            game.CalculateSpreadResult();
            dr[ "BOOKIE" ] = game.BookieTip.PredictedScore();

            if ( opponent != null )
               dr[ "OPPRATE" ] = opponent.Ratings;

            //if ( game.Played() )
            //	dr[ "ACTUAL" ] = ActualPoints( p );
            dt.Rows.Add( dr );
             }
             dt.DefaultView.Sort = "PTS DESC";
             return dt;
        }