Прямо сейчас у меня есть таблица, которая будет заполняться на основе искомой фамилии авторов. Я хочу, чтобы только один автор показывался одновременно, но этот текущий код не удаляет предыдущий результат поиска, вместо этого он добавляет следующий результат поиска ниже первого. Кажется, мне нужно очистить 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();
}
}
Метод Load
просто гарантирует, что сущности загружаются локально. Это в основном фиктивный метод, который просто выводит результаты запроса в кеш-кеш.
В настоящее время вы обеспечиваете, чтобы результаты поиска находились в кеше, а затем отображали весь кеш.
Вам не нужно явно загружать ваши сущности, и вы не хотите отображать все локальные объекты, вам нужен только результат вашего поиска.
Я думаю, что это сработает:
authorBindingSource.DataSource =
dbcontext.Authors
.Where(author => author.LastName.Equals(txtSearch.Text))
.ToList();
dbcontext
? Может быть, это добавление вAuthors.Local
каждый раз, когда вы вызываетеLoad()
.