Заполните dataGridView большим набором результатов из SQL-запроса в C # Windows Forms - PullRequest
4 голосов
/ 17 декабря 2010

У меня есть Windows Forms , созданный с dataGridView на нем.У меня также есть длительный SQL-запрос, который я выполняю в потоке BackgroundWorker для заполнения статической таблицы данных.

private void RunQuery_DoWork(object sender, DoWorkEventArgs e)
{
    OdbcDataAdapter adapter = new OdbcDataAdapter(longRunningSQLQuery, datasourcename);
    adapter.Fill(results);
}

private void RunQuery_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    dataGridView1.DataSource = results;
}

Это прекрасно работает.Когда я запускаю запрос, пользовательский интерфейс остается отзывчивым, так как результаты генерируются в фоновом режиме ... Однако, когда приходит время отображать результаты в моем dataGridView, окно останавливается, если это большой набор данных.Если я позволю этому сидеть некоторое время, в конечном счете это заканчивается.В моей функции обратного вызова RunWorkerCompleted я вызываю dataGridView1.DataSource = results; (результат - мой DataSet), и эта часть занимает много времени.

Есть ли способ предварительно связать dataGridView или связать егов фоновом режиме?

Ответы [ 4 ]

4 голосов
/ 17 декабря 2010

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

http://msdn.microsoft.com/en-us/library/2b177d6d.aspx

1 голос
/ 17 декабря 2010
1 голос
/ 17 декабря 2010

Он будет использовать отражение, чтобы извлечь значения из источника данных. Более быстрым способом может быть создание и добавление строк самостоятельно. Возможно, вы сможете построить список строк в фоновом потоке, а затем в основном потоке пользовательского интерфейса добавить их как диапазон - не уверен.

Очевидно, что при этом вы теряете преимущества привязки данных, но если вы хотите загрузить огромное количество данных, это может быть единственный вариант . Оказывается, вы можете использовать VirtualMode, самостоятельно реализовывать части, но сохраняете преимущества привязки данных.

0 голосов
/ 17 декабря 2010

Поскольку GridView является визуальным компонентом, я думаю, что применяется правило, что вы можете вызывать методы и свойства только из потока переднего плана, который создал эти элементы управления.

Может быть, вы можете сделать заполнение сетки поэтапно, добавив каждый, например. 100 записей за итерацию, что делает управление более плавным.

Microsoft SQL Server Management Studio, похоже, тоже использует GridView, довольно хорошо обрабатывает большие строки.

...