Я не знаю о вкладках, но вы, конечно, можете настроить ряд кнопок или кнопок ссылок для 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 и т. Д.