Нумерация страниц с ListView - PullRequest
0 голосов
/ 16 ноября 2010

Я ищу хорошую технику для просмотра списка страниц.

В настоящее время я создаю менеджер Active Directory (LDAP) для компании, в которой я работаю, в компании работают более 12 000 сотрудников, инам нужно иметь возможность легко перемещаться по ним

Два типа нумерации страниц, которые я рассматриваю:

  • Связывание < > в правом верхнем углу элемента управления,который вычислит смещение на (page * limit) - 1

И другой способ, который я предпочел бы , это:

  • Наличие нескольких вкладок с перечислением a-f, который будет сортировать списки по их первому символу и видеть, находится ли он в пределах диапазона.

Я застрял в способах сделать это;есть ли у кого-нибудь хорошие примеры или ресурсы?

Данные поступают, поступают с 1 основным запросом и сохраняются в памяти, вскоре будут сохранены в кэшированном XML-файле, чтобы освободить память, поэтому при чтении из этогобудет быстрее, тогда это нормально.

Я использую .NET Framework 4.0 и привязан к WinForms.

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

Вы хотите запросить постраничные данные на уровне LDAP своего приложения. Графический интерфейс просто отобразит страницу с вопросом о том, какой номер страницы вы хотите показать.Теперь, что касается LDAP, я считаю, что класс DirectorySearcher класса System.DirectoryServices имеет возможности разбиения на страницы:

http://msdn.microsoft.com/en-us/library/system.directoryservices.directorysearcher(VS.80).aspx

0 голосов
/ 16 ноября 2010

Я не знаю о вкладках, но вы, конечно, можете настроить ряд кнопок или кнопок ссылок для A-Z. Вкладки используются для организации элементов управления на страницах больше, чем данные; использование вкладок потребует наличия ListView на каждой вкладке.

Я бы создал lookup UserControl, особенно если эта функциональность будет использоваться в нескольких местах. Для макета все, что вы делаете, это создаете UserControl и вставляете в свой ListView и любые элементы управления навигацией, которые вы хотите, в качестве кнопок, LinkButtons, что угодно. Вы можете сделать это динамически, используя FlowLayoutPanel или аналогичный.

Что касается кода, вы должны иметь возможность получать результаты на страницах. Переход с Linq:

var onePage = userDataSource.Skip((pageNumber-1)*perPage).Take(perPage);

Теперь ваши элементы управления навигацией манипулируют pageNumber и сообщают ListView о необходимости заново привязать себя к данным новой страницы, используя приведенный выше Linq.

Для быстрого доступа по первому символу, это снова легко сделать в Linq. Вместо того, чтобы пропускать X строк до тех пор, пока вы не окажетесь в C, просто отфильтруйте все строки, которые не начинаются с C:

var startswithC = userDataSource
    .Where(x=>x.StringID.StartsWith('C'))
    .Skip((pageNumber-1)*perPage).Take(perPage);

Если вы знаете, что источник данных возвращает упорядоченные результаты, можно использовать SkipUntil () для поиска C, но вы будете перебирать много записей, и многие провайдеры Linq могут переводить Skip и Take, но не SkipWhile, SkipUntil и т. Д.

...