C# Ошибка при установке ListBox.DataSource = null (Возможна ли проблема при запуске события?) - PullRequest
0 голосов
/ 21 апреля 2020

Я некоторое время искал, чтобы найти исправление для этого, и надеялся, что использование события «SelectionChangeCommitted» в соответствии с этим ответом ( Как предотвратить событие selectedindexcessed, когда DataSource привязан? ) будет работать, но, к сожалению, нет такой удачи.

По сути, я хочу установить для моего Listbox.DataSource значение null, хотя оно содержит два объекта одновременно. Кажется, что когда я нажимаю на строку matchupListBox.Datasource = null, он переходит к событию _SelectedIndexChanged и входит в мой другой метод (LoadMatchup ())

Если кто-то может пролить свет на это или посоветовать мне, как установить обнулять его другим способом (опять же, SelectionChangeCommitted не работает) Я был бы признателен. Полный код моего класса приведен ниже:

namespace TrackerUI
{
    public partial class TournamentViewerForm : Form
    {
        private TournamentModel tournament;
        List<int> rounds = new List<int>();
        List<MatchupModel> selectedMatchups = new List<MatchupModel>();

    public TournamentViewerForm(TournamentModel tournamentModel)
    {
        InitializeComponent();

        tournament = tournamentModel;

        LoadFormData();
        LoadRounds();
    }

    private void LoadFormData()
    {
        tournamentName.Text = tournament.TournamentName;
    }

    private void WireUpMatchupsList()
    {
        matchupListBox.DataSource = null;
        matchupListBox.DataSource = selectedMatchups;
        matchupListBox.DisplayMember = "DisplayName";
    }

    private void WireUpRoundsList()
    {
        roundDropDown.DataSource = null;
        roundDropDown.DataSource = rounds;
    }

    private void LoadRounds()
    {
        rounds = new List<int>();

        rounds.Add(1);
        int currRound = 1;

        foreach (List<MatchupModel> matchups in tournament.Rounds)
        {
            if (matchups.First().MatchupRound > currRound)
            {
                currRound = matchups.First().MatchupRound;
                rounds.Add(currRound);
            }
        }

        WireUpRoundsList();
    }

    private void roundDropDown_SelectedIndexChanged(object sender, EventArgs e)
    {
        LoadAllMatchups();
    }

    private void LoadAllMatchups()
    {
        int round = (int)roundDropDown.SelectedItem;

        foreach (List<MatchupModel> matchups in tournament.Rounds)
        {
            if (matchups.First().MatchupRound == round)
            {
                selectedMatchups = matchups;
            }
        }

        WireUpMatchupsList();
    }

    private void LoadMatchup()
    {
        MatchupModel m = (MatchupModel)matchupListBox.SelectedItem;

        for (int i = 0; i < m.Entries.Count; i++)
        {
            if (i == 0)
            {
                if (m.Entries[0].TeamCompeting != null)
                {
                    teamOneName.Text = m.Entries[0].TeamCompeting.TeamName;
                    teamOneScoreValue.Text = m.Entries[0].Score.ToString();

                    teamTwoName.Text = "<bye>";
                    teamTwoScoreValue.Text = "0";
                }
                else
                {
                    teamOneName.Text = "Not yet set.";
                    teamOneScoreValue.Text = "";
                }

            }

            if (i == 1)
            {
                if (m.Entries[0].TeamCompeting != null)
                {
                    teamTwoName.Text = m.Entries[1].TeamCompeting.TeamName;
                    teamTwoScoreValue.Text = m.Entries[1].Score.ToString();
                }
                else
                {
                    teamTwoName.Text = "Not yet set.";
                    teamTwoScoreValue.Text = "";
                }
            }
        }
    }

    private void matchupListBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        LoadMatchup();
    }
}

}

Кстати, вероятно, важная информация, которую я почти забыл, заключается в том, что она содержит ошибки во втором последнем методе в строке

MatchupModel m = (MatchupModel)matchupListBox.SelectedItem;
for (int i = 0; i < m.Entries.Count; i++)

потому что теперь m равно нулю, хотя SelectedItem равно 2 (int для модели MatchUp) в форме.

Заранее благодарим добрых людей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...