Сколько строк может содержать список? Приложение Windows Form - PullRequest
0 голосов
/ 11 июля 2011

У меня более 9 000 000 записей в моей базе данных Access, но только часть из них отображается в списке.Сколько строк может содержать список?Около 65 тыс. - это ответ, который я получил из своих исследований.Спасибо!

Ответы [ 3 ]

2 голосов
/ 11 июля 2011

В родном элементе управления listbox есть ошибка, которая появилась во время Vista и все еще присутствует в Win7.Это препятствует тому, чтобы Вы прокручивали должным образом мимо 65536 + количество видимых пунктов.Самая видимая часть ошибки, за исключением того, что не видны более поздние элементы, - это большой палец полосы прокрутки, отскакивающий назад, когда вы перетаскиваете его на дно.

Эта ошибка не часто проверяется.Никто никогда не ожидает, что его пользователь будет иметь достаточно терпения, чтобы перебирать десятки тысяч предметов.Такая программа быстро удаляется.В противном случае емкость ListBox ограничена только объемом доступной виртуальной памяти.Если вы действительно хотите добиться этого, используйте ListView или DataGridView.

1 голос
/ 11 июля 2011

Я не уверен, каков точный лимит (приведенный ниже URL дает некоторые советы). Я думаю, что количество элементов, которыми вы хотите заполнить список, вероятно, сильно замедлит работу вашего компьютера, если он будет заполнен таким количеством записей.,

Может быть, вам следует рассмотреть возможность использования другого элемента управления, который позволяет выполнять подкачку, например DataGrid, или что-то подобное для отображения 100 результатов одновременно?

Эта ссылка может быть полезна для вас: http://codeguru.earthweb.com/forum/showthread.php?p=1715288

Создание сетки данных с подкачкой: http://support.microsoft.com/kb/305271

0 голосов
/ 11 июля 2011

Я считаю, что предпочтительнее использовать DataGridView над ListBox в winforms.Ключ должен использовать VirtualMode.Я бы получил производную от DataGridView, похожую на:

class CustomDgv : DataGridView {
    public CustomDgv() {
        this.BackgroundColor = SystemColors.Window;
        this.BorderStyle = BorderStyle.None;
        this.Dock = DockStyle.Fill;
        this.MultiSelect = false;
        this.AutoGenerateColumns = false;
        this.RowHeadersVisible = this.AllowUserToResizeRows = false;

        this.ReadOnly = true;
        this.AllowUserToAddRows = this.AllowUserToDeleteRows = false;
        this.CellBorderStyle = DataGridViewCellBorderStyle.None;

        this.VirtualMode = true;
        this.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

        this.RowTemplate.Height = this.FontHeight + this.FontHeight / 2;
    }
}

, а затем реализовал бы виртуальную часть соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...