0

После обновления БД через метод Clear(); производиться обновление Observablecollection и DataGrid. Также опустошаются TextBoxes. Пока все хорошо. Однако после заполенения TextBox и попытки заново добавить данные в БД выдается ошибка NullReferenceException

public class Games: INotifyPropertyChanged
    {

    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName]string prop = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    }

        private string name;
        public string Name
        {
            get { return name; }
            set
            {
                name = value;
                OnPropertyChanged();
            }
        }

        private string price;
        public string Price
        {
            get { return price; }
            set
            {
                price = value;
                OnPropertyChanged();
            }
        }
    }

public class GamesVM
{
    public GamesVM()
    {
        GamesCollection = new ObservableCollection<Games>();
        _SelectedGames = new Games();
        SearchGames();
    }

    public ObservableCollection<Games> GamesCollection { get; set; }

    private Games _SelectedGames;
    public Games SelectedGames
    {
       get
       { return _SelectedGames; }
       set
       { _SelectedGames = value; }
    }

    public void SearchGames()
        {
            string query = "SELECT * FROM GamesTable";
            command = new MySqlCommand(query, connection);
            adapter = new MySqlDataAdapter(command);
            DataTable dt = new DataTable();
            adapter.Fill(dt);

            foreach (DataRow row in dt.Rows)
            {
                var game = new Games
                {
                    Name = row["Name"].ToString(),
                    Price= row["Price"].ToString()
                };
                GamesCollection.Add(game);
            }
        }

    public void InsertNewGame()
    {
       if(SelectedGames.Name != null)
       {
       string Insert = "INSERT INTO Games (Name, Price) VALUES (SelectedGames.Name, SelectedGames.Price)";
       }
/// <summary>
/// ... 
/// </summary>
    }

   publick void Clear()
   {
      GamesCollection.Clear();
      SearchGames();
   }
}
Anton
  • 23
  • По приведённому фрагменту кода и описанию не видно, где произошла ошибка. Приведите тот фрагмент кода, где выдаёт ошибку и укажите в какой строке. – A K Jan 01 '19 at 16:52
  • Здравстрвуйте! Ошибка выдается в рамках метода InsertNewGame(), а именно в if(SelectedGames.Name != null). – Anton Jan 01 '19 at 17:09
  • Окей. В этом месте у вас SelectedGames = null поэтому обращение к любому свойству типа SelectedGames.Name выдаст ошибку, потому что обращение идёт к null.Name, понимаете? А почему у вас в этом случае SelectedGames равно null - посмотрите под отладчиком и попробуйте понять логику по коду. Я например, из вашего описания так и не могу понять сценарий, когда это у вас случается: судя по заголовку это после .Clear - а в тексте вы пишете, что .Clear отрабатывает норм, а вот после, когда данные заново заполнены и вылетаете. Точный сценарий мне неясен. – A K Jan 01 '19 at 17:11
  • Спасибо за разъяснения. То, что там NULL я понимаю. Не понимаю следующее: почему GamesCollection.Clear(); обнуляет SelectedGames и почему после обновления GamesCollection через SearchGames() NULL остается. NULL остается даже после того, как заполняется TextBox, который связан через биндинг с SelectedGames.Name. По идее биндинг должен обновить SelectedGames.Name и убрать NULL. – Anton Jan 01 '19 at 17:21
  • 1
    if(SelectedGames.Name != null). -> if(SelectedGames?.Name != null).. Сам SelectedGames я так понял у вас привязан к SelectedItem ListBox'a или что то в этом духе. Тогда сами подумайте, чему будет равно ваше свойство, если нечего не выбрано... – EvgeniyZ Jan 01 '19 at 17:29
  • Здравствуйте, Евгений! При старте программы тоже ничего не выбрано. Несмотря на это первое добавление данных в ДБ проходит успешно, даже если GamesCollection.Clear(); стоит в SearchGames(). И лишь после вызова метода Clear(); появляется ошибка. – Anton Jan 01 '19 at 17:36

0 Answers0