#c# #datagridview #bindingsource #tableadapter
#c# #datagridview #bindingsource #tableadapter
Вопрос:
У меня есть DataGridView, который получает данные с SQL Server с помощью a TableAdapter
и a BindingSource
.
У меня есть метод, который обнаруживает изменения в строках и отправляет запрос на обновление на SQL Server. Это работает отлично.
После этого, чтобы обновить DataGridView, я делаю следующее:
this.TableAdapter.Fill(this.DataSet.DataTable);
Проблема в том, что это занимает много времени из-за количества строк.
Мне нужно обновить его, потому что адаптер таблицы — это представление, которое объединяет две таблицы с помощью левого соединения.
Есть ли способ обновить только одну строку или другой более быстрый способ обновить представление?
Комментарии:
1. При использовании DataAdapter Существует связь между DataTable / DataSet и базой данных. Таким образом, вы можете использовать ds. AcceptChanges() (или dt. AcceptChanges(). Для обновления данных в базе данных. После изменения DataSet / DataTable DGV автоматически не обновляется, поэтому хитрость заключается в том, чтобы установить для источника данных значение null и вернуться к DataTable: datagridview1.DataSource = null; datagridview1.DataSource = dt;
2. Я пробовал « DataGridView.DataSource = null; DataGridView.DataSource = this. DataSet; « но это не обновляет данные
3. Вы записывали в DataTable, а затем выполняли AcceptChanges? Смотрите : learn.microsoft.com/en-us/dotnet/api /…
Ответ №1:
Сделайте еще один запрос к адаптеру таблицы (щелкните его правой кнопкой мыши, добавьте запрос), который принимает параметр данных для выборки. Например, если у вас есть существующий запрос:
SELECT * FROM a LEFT JOIN b ON a.id = b.id
(примечание; как правило, очень плохая идея писать запросы в tableadapter a, которые загружают все содержимое базы данных в клиент)
Вы можете добавить еще один запрос к адаптеру таблицы:
SELECT * FROM a LEFT JOIN b ON a.id = b.id WHERE a.id = @aid
И назовите это FillByAId / GetDataByAId
Затем на стороне клиента вы можете, после обновления некоторого идентификатора строки 1234:
var newDt = yourTableAdapter.GetDataByAId(1234);
А затем объедините изменения в существующую таблицу данных с помощью datatable.Слияние