c # — Сетка в виртуальном режиме с курсором ODBC

У меня есть приложение, в котором мы используем ODBC для подключения к базе данных SQL Server (не спрашивайте, почему, это устаревшая проблема). Все работает нормально, когда мы хотим отображать большие наборы данных (> 1 миллион записей) в сетке. Используя курсор ODBC, мы можем легко перемещаться вперед и назад, в начало или в конец и показывать, что записи — это пользовательская нарисованная сетка (Win GDI paint) — все написано на чистом C ++.

Теперь начальник решил, что нам нужна лучшая сетка с большим количеством функций, поэтому мы выбрали одну из Infragistics (используя C ++ / Cli в качестве моста между существующим кодом C ++ и .NET). Их сетка поддерживает виртуальный режим, но для этого требуется общее количество записей, которые будут прочитаны, в нашем случае ODBC не предлагает такой возможности.

На данный момент у нас есть 3 решения

  1. Наведите курсор на начало, перейдите к концу и сосчитайте строки — очень медленная операция для больших наборов данных.

  2. Считайте все данные из ODBC и вставьте в память, а затем предоставьте необходимую информацию в сетку. Опять же, это медленный и очень много памяти.

  3. создать select COUNT(*) from table и запрос количества записей, это не будет работать, поскольку у нас есть очень сложные запросы со сложной логикой внутри оператора select, которые нельзя изменить или легко проанализировать.

Есть ли способ решить эту проблему, не зная общего количества или записей? Я понимаю, что вертикальная прокрутка не будет работать должным образом, но это нормально, пользователи привыкли к этому, пока они могут нажимать Ctrl + Home, Ctrl + End перейти к первой или последней записи или Up а также Down для навигации между записями они достаточно счастливы.

Любые идеи очень ценятся.

Спасибо

0

Решение

Вы можете установить LoadStyle сетки на LoadOnDemand следующим образом:

this.ultraGrid1.DisplayLayout.LoadStyle = LoadStyle.LoadOnDemand;

Однако, если вы выполните сортировку, фильтрацию, суммирование и т. Д., Сетка попытается загрузить все данные заранее.
Вы также можете попробовать использовать WinDataSource — он также поддерживает загрузку данных по требованию. Видеть это статья

0

Другие решения


По вопросам рекламы [email protected]