Очистка DataGridView, который был заполнен из Entity Framework

1

Прямо сейчас у меня есть таблица, которая будет заполняться на основе искомой фамилии авторов. Я хочу, чтобы только один автор показывался одновременно, но этот текущий код не удаляет предыдущий результат поиска, вместо этого он добавляет следующий результат поиска ниже первого. Кажется, мне нужно очистить datagridview или bindingsource, но мне не повезло с этим. Я попытался использовать

datagridview.DataSource = null;
bindingsource.DataSource = null;
bindingsource.Clear();

по-разному, перед выражением if в моем коде с мыслью, что таблица будет очищена перед добавлением следующего результата поиска. Что происходит, но это просто очищает все мои данные после нескольких щелчков кнопки, а затем ничего не отображает, пока я не перезапущу программу. Я очень новичок в этом, и я пытаюсь понять его, но он идет медленно.

private void btnSearch_Click(object sender, EventArgs e)
  {                  
      if (txtSearch.Text == " ")
          return;
      else
      {              
          dbcontext.Authors
              .Where(author => author.LastName.Equals(txtSearch.Text))
              .Load();

          authorBindingSource.DataSource = dbcontext.Authors.Local.ToBindingList();
      }
  }
  • 0
    как вы устанавливаете строки в datagridview: Rows.Add () или источник данных?
  • 0
    Что такое dbcontext ? Может быть, это добавление в Authors.Local каждый раз, когда вы вызываете Load() .
Показать ещё 6 комментариев
Теги:
entity-framework
datagridview

1 ответ

0
Лучший ответ

Метод Load просто гарантирует, что сущности загружаются локально. Это в основном фиктивный метод, который просто выводит результаты запроса в кеш-кеш.

В настоящее время вы обеспечиваете, чтобы результаты поиска находились в кеше, а затем отображали весь кеш.

Вам не нужно явно загружать ваши сущности, и вы не хотите отображать все локальные объекты, вам нужен только результат вашего поиска.

Я думаю, что это сработает:

authorBindingSource.DataSource = 
  dbcontext.Authors
    .Where(author => author.LastName.Equals(txtSearch.Text))
    .ToList();
  • 0
    Это на самом деле дает мне пару ошибок. Ошибка 1 Не удалось найти тип или имя пространства имен «Автор» (отсутствует директива об использовании или ссылка на сборку?) .cs 67 64 Ошибка DisplayTable 2 Не удалось найти тип или имя пространства имен 'BindingList' (отсутствует директива using или ссылка на сборку?) C: \ Users \ Matt \ Documents \ School Stuff \ Programming \ ch22 \ ch22 \ BooksExamples \ DisplayTable \ DisplayAuthorsTable.cs 67 52 DisplayTable
  • 0
    Попробуйте мой отредактированный код?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню