Элементы списка C# в неправильной строке

Когда я добавляю во второй столбец, кажется, что элементы появляются не в той строке. По какой причине?

            for (int i = 1; i < 10; i++)
        {
            ListViewItem item = new ListViewItem(i.ToString());
            listView1.Items.Add(item);
        }

        for (int i = 1; i < 10; i++)
        {
            ListViewItem item = new ListViewItem();
            item.SubItems.Add(i.ToString());
            listView1.Items.Add(item);
        }

Изображение, как это сейчас выглядит

И что вы ожидаете от этого кода?

Steve 10.03.2018 13:41

Не знаю, видите ли вы на изображении. Но он должен появиться сразу после второго столбца, вместо этого он появляется во втором столбце, но кажется, что он продолжает строку, в которой он остановился, из первого столбца.

user9471854 10.03.2018 13:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
169
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы правы в том, что SubItems - это столбцы. Однако каждый добавляемый ListViewItem будет представлять собой строку. В свой код вы добавляете 20 элементов. Вот почему у вас 20 строк.

Попробуйте добавить второй столбец к тому же элементу:

for (int i = 1; i < 10; i++)
{
    ListViewItem item = new ListViewItem(i.ToString());
    item.SubItems.Add(i.ToString());
    listView1.Items.Add(item);
}

Или альтернативно

for (int i = 1; i < 10; i++)
{
    string[] elements = new string[2];
    elements[0] = i.ToString();
    elements[1] = i.ToString();
    ListViewItem item = new ListViewItem(elements);
    listView1.Items.Add(item);
}

РЕДАКТИРОВАТЬ

Если вы хотите набить тексты из двух разных циклов:

column0 = new string[10];
for(int = 0; i < 10; ++i)
{
    // Fill all elements of the first column
}

column1 = new string[10];
for(int = 0; i < 10; ++i)
{
    // Fill all elements of the secondcolumn
}

for (int i = 1; i < 10; i++)
{
    string[] elements = new string[2];
    elements[0] = column0[i];
    elements[1] = column0[1];
    ListViewItem item = new ListViewItem(elements);
    listView1.Items.Add(item);
}

Или вы можете использовать решение, предложенное @Aleksa Ristic

Пример, который я привел, представляет собой тот же цикл. Но если у меня есть два разных цикла с разными значениями. Например, один - от 1 до 10, а другой - с 5 разными струнами. Как я это исправлю? Поскольку я получу тот же результат, что и мой первый подход.

user9471854 10.03.2018 13:52

Почему вы имеете в виду две разные петли и пять разных струн?

Aleksa Ristic 10.03.2018 14:18

Я имею в виду, если у меня будет две петли. Один, который дает числа, а другой - цикл, который зацикливает массив с разными именами. Так что у меня не может быть одного цикла, и тогда мне нужны две петли. Но тогда я вернусь на круги своя.

user9471854 10.03.2018 14:28

Спасибо за помощь, я видел это потом. И работает также

user9471854 10.03.2018 15:27
Ответ принят как подходящий

Ответ Базиля Перрену верен, но вы спросили, а что, если вам нужно сделать то же самое, но из двух разных циклов, так что вот решение

List<ListViewItem> items = new List<ListViewItems>();

for (int i = 1; i < 10; i++)
{
    ListViewItem item = new ListViewItem(i.ToString());
    items.Add(item);
}

for (int i = 1; i < 10; i++)
{
    items[i-1].SubItems.Add(i.ToString());
}

foreach(ListViewItem item in items)
{
    listView1.Items.Add(item);
}

Итак, мы создали ListViewItems из первого цикла и временно добавили их в List<>(). Затем во втором цикле мы назначили SubItem для каждого из наших внутренних списков ListViewItem, и, наконец, мы перебираем каждый элемент в нашем списке и добавляем новый элемент в наш listView с помощью Это.

Итак, в начале у нас есть данные в списке вроде этого:

|itemValue    |subItem     |
|null         |null        |

После первого цикла наш список выглядел так:

|itemValue    |subItem     |
|1            |null        |
|2            |null        |
|3            |null        |
|4            |null        |
|5            |null        |
|6            |null        |
|7            |null        |
|8            |null        |
|9            |null        |
|10           |null        |

И после второго цикла у нас это так:

|itemValue    |subItem  |
|1            |1        |
|2            |2        |
|3            |3        |
|4            |4        |
|5            |5        |
|6            |6        |
|7            |7        |
|8            |8        | 
|9            |9        |
|10           |10       |

В последнем цикле мы получаем каждый элемент из списка и используем его для создания нового элемента внутри listView.

Спасибо, это именно то, что я искал!

user9471854 10.03.2018 15:22

Другие вопросы по теме