c# List пролистывание элементов

448
05 февраля 2017, 10:52

Здравствуйте! Подскажите как организовать пролистывание определенного колл-ва элементов массива. Нашел на просторах вот такой код. Он работает но не так как хотелось бы.

private static Func<int, bool> gt(int val)
{
    return (i => i > val);
}
private static Func<int, bool> lt(int val)
{
    return (i => i < val);
}
int q; // начало поиска
int w = 6; // конец поиска
List<int> items = new List<int>();
private void button4_Click(object sender, RoutedEventArgs e)
{
    q = 0;  
    w = 6;  
    listBox.Items.Clear();  
    items.Clear();  
    items.Add(1);   // Имеется некоторое колл-во элементов
    items.Add(2);
    items.Add(3);
    items.Add(4);
    items.Add(5);
    items.Add(6);
    items.Add(7);
    items.Add(8);
    items.Add(9);
    items.Add(10);
    items.Add(11);
    items.Add(12);
    items.Add(13);
    List<int> result = new List<int>(items.Where(gt(q)).Where(lt(w))); 
    foreach (int i in result)
    {
        listBox.Items.Add(i.ToString());
        q++;
    }
}
// ЛИСТАЕМ ВПЕРЕД
private void button5_Click(object sender, RoutedEventArgs e)
{
    listBox.Items.Clear();
    List<int> result = new List<int>(items.Where(gt(q)).Where(lt(w+=5)));
    foreach (int i in result)
    {
        listBox.Items.Add(i.ToString());
        q++;
    }
}
// ЛИСТАЕМ НАЗАД
private void button6_Click(object sender, RoutedEventArgs e)
{
    listBox.Items.Clear();
    List<int> result = new List<int>(items.Where(lt(w)).Where(gt(q-=5)));
    foreach (int i in result)
    {
        listBox.Items.Add(i.ToString());
        w--;
    }
}

Данный способ хоть и работает но есть небольшая проблема. После продвижения переменные настраиваются на след. пролистывание и если в этом момент вернуть предыдущую страницу то сначала обновятся переменные но не изменятся данные. Что бы вернуться на шаг назад нужно кликнуть по кнопке дважды. Что разумеется очень раздражает.

Answer 1

Пагинацию можно сделать след. образом:

//номер страницы
int pageIndex = 2;
//размер страницы (количество элементов)
int pageSize = 5;
//нужный переход
var page = items.Skip((pageIndex - 1) * pageSize).Take(pageSize);

Чтобы контролировать вперед/назад нужно знать общее кол-во элементов

int count = items.Count;

и следить чтобы номер страницы не был меньше нуля и не больше возможного кол-ва страниц

int pageCount = count / pageSize;
READ ALSO
C# DirectShow - настроить тюнер на другую частоту

C# DirectShow - настроить тюнер на другую частоту

Добрый деньПри переключении между каналами с двух разных мультиплексов необходимо переключать тюнер на другую частоту

460
DokanNet не работает на Win7

DokanNet не работает на Win7

Использую DokanNet и Dokany для создания виртуального диска

468
Apache + asp.net mvc +linux

Apache + asp.net mvc +linux

Нужно опубликовать сайт на сервере где стоит линукс так как деплоинг сайта на виндовс стоит очень дорогоКакое програмное обеспечение нужно...

419
Доменное имя или IP-адрес

Доменное имя или IP-адрес

Как можно получить доменное имя или IP-адрес текущего URL на C#

431