У меня есть приложение, в котором мы используем ODBC для подключения к базе данных SQL Server (не спрашивайте, почему, это устаревшая проблема). Все работает нормально, когда мы хотим отображать большие наборы данных (> 1 миллион записей) в сетке. Используя курсор ODBC, мы можем легко перемещаться вперед и назад, в начало или в конец и показывать, что записи — это пользовательская нарисованная сетка (Win GDI paint) — все написано на чистом C ++.
Теперь начальник решил, что нам нужна лучшая сетка с большим количеством функций, поэтому мы выбрали одну из Infragistics (используя C ++ / Cli в качестве моста между существующим кодом C ++ и .NET). Их сетка поддерживает виртуальный режим, но для этого требуется общее количество записей, которые будут прочитаны, в нашем случае ODBC не предлагает такой возможности.
На данный момент у нас есть 3 решения
Наведите курсор на начало, перейдите к концу и сосчитайте строки — очень медленная операция для больших наборов данных.
Считайте все данные из ODBC и вставьте в память, а затем предоставьте необходимую информацию в сетку. Опять же, это медленный и очень много памяти.
создать select COUNT(*) from table
и запрос количества записей, это не будет работать, поскольку у нас есть очень сложные запросы со сложной логикой внутри оператора select, которые нельзя изменить или легко проанализировать.
Есть ли способ решить эту проблему, не зная общего количества или записей? Я понимаю, что вертикальная прокрутка не будет работать должным образом, но это нормально, пользователи привыкли к этому, пока они могут нажимать Ctrl + Home
, Ctrl + End
перейти к первой или последней записи или Up
а также Down
для навигации между записями они достаточно счастливы.
Любые идеи очень ценятся.
Спасибо
Вы можете установить LoadStyle сетки на LoadOnDemand следующим образом:
this.ultraGrid1.DisplayLayout.LoadStyle = LoadStyle.LoadOnDemand;
Однако, если вы выполните сортировку, фильтрацию, суммирование и т. Д., Сетка попытается загрузить все данные заранее.
Вы также можете попробовать использовать WinDataSource — он также поддерживает загрузку данных по требованию. Видеть это статья