コード例 #1
0
        /// <summary>
        ///     Handles the SelectionChanged event of the cmbOppPlayer control.
        ///     Allows the user to change the opposing player, to whose stats the current player's stats will be compared.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">
        ///     The <see cref="SelectionChangedEventArgs" /> instance containing the event data.
        /// </param>
        private void cmbOppPlayer_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                if (cmbTeam.SelectedIndex == -1 || cmbOppTeam.SelectedIndex == -1 || cmbPlayer.SelectedIndex == -1 ||
                    cmbOppPlayer.SelectedIndex == -1)
                {
                    dgvHTH.ItemsSource = null;
                    dgvHTHBoxScores.ItemsSource = null;
                    return;
                }
            }
            catch
            {
                return;
            }

            dgvHTH.ItemsSource = null;

            selectedOppPlayerID = ((KeyValuePair<int, string>) (cmbOppPlayer.SelectedItem)).Key;

            var psrList = new ObservableCollection<PlayerStatsRow>();

            _hthAllPBS = new List<PlayerBoxScore>();

            if (_selectedPlayerID == selectedOppPlayerID)
            {
                return;
            }

            if (rbHTHStatsAnyone.IsChecked.GetValueOrDefault())
            {
                _psr.Type = _psr.FirstName + " " + _psr.LastName;
                psrList.Add(_psr);

                var gameIDs = new List<int>();
                foreach (PlayerBoxScore cur in _pbsList)
                {
                    _hthAllPBS.Add(cur);
                    gameIDs.Add(cur.GameID);
                }

                ParallelQuery<PlayerBoxScore> oppPBSList =
                    MainWindow.BSHist.AsParallel()
                              .Where(bse => bse.PBSList.Any(pbs => pbs.PlayerID == selectedOppPlayerID))
                              .Select(bse => bse.PBSList.Single(pbs => pbs.PlayerID == selectedOppPlayerID))
                              .Where(pbs => !pbs.IsOut);
                foreach (PlayerBoxScore oppPBS in oppPBSList)
                {
                    if (!gameIDs.Contains(oppPBS.GameID))
                    {
                        oppPBS.AddInfoFromTeamBoxScore(MainWindow.BSHist.Single(bse => bse.BS.ID == oppPBS.GameID).BS, MainWindow.TST);
                        _hthAllPBS.Add(oppPBS);
                    }
                }

                PlayerStats oppPS = MainWindow.PST[selectedOppPlayerID];
                psrList.Add(new PlayerStatsRow(oppPS, oppPS.FirstName + " " + oppPS.LastName));
            }
            else
            {
                ParallelQuery<BoxScoreEntry> againstBSList =
                    MainWindow.BSHist.AsParallel()
                              .Where(
                                  bse =>
                                  _pbsList.Any(pbs => pbs.GameID == bse.BS.ID) &&
                                  bse.PBSList.Any(pbs => pbs.PlayerID == selectedOppPlayerID && !pbs.IsOut));

                var psOwn = new PlayerStats(_psr);
                psOwn.ResetStats();
                PlayerStats psOpp = MainWindow.PST[selectedOppPlayerID].DeepClone();
                psOpp.ResetStats();

                foreach (BoxScoreEntry bse in againstBSList)
                {
                    PlayerBoxScore pbsOwn = bse.PBSList.Single(pbs => pbs.PlayerID == psOwn.ID);
                    pbsOwn.AddInfoFromTeamBoxScore(bse.BS, MainWindow.TST);
                    PlayerBoxScore pbsOpp = bse.PBSList.Single(pbs => pbs.PlayerID == psOpp.ID);

                    psOwn.AddBoxScore(pbsOwn);
                    psOpp.AddBoxScore(pbsOpp);

                    _hthAllPBS.Add(pbsOwn);
                }

                var psrOwn = new PlayerStatsRow(psOwn);
                psrOwn.Type = psrOwn.FullNameGivenFirst;
                psrList.Add(psrOwn);
                var psrOpp = new PlayerStatsRow(psOpp);
                psrOpp.Type = psrOpp.FullNameGivenFirst;
                psrList.Add(psrOpp);
            }

            _hthAllPBS.Sort((pbs1, pbs2) => pbs2.RealDate.CompareTo(pbs1.RealDate));

            dgvHTH.ItemsSource = psrList;
            dgvHTHBoxScores.ItemsSource = _hthAllPBS;
        }