С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018

Не отображаются элементы списка ListView, полученного у другого списка

18.05.2012, 20:46. Показов 4892. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь выполнить добавление нужных элементов во временном списке ListView, а потом присвоить этот список другому списку, который расположен на форме. Но элементы почему-то не отображаются! хотя ставил точки останова, мониторил переменные и видно, что количество Count конечного списка не равно нулю. В чем причина?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private void Form1_Load(object sender, EventArgs e)
        {
            ListView lvTemp = new ListView();
            ColumnHeader colHead;
            colHead = new ColumnHeader();
            colHead.Text = "col1";
            colHead.Width = 150;
            lvTemp.Columns.Add(colHead);
 
            colHead = new ColumnHeader();
            colHead.Text = "col2";
            colHead.Width = 35;
            lvTemp.Columns.Add(colHead);
 
            ListViewItem lvi;
            ListViewItem.ListViewSubItem lvsi;
 
            for (int i = 0; i < 8; i++)
            {
                lvi = new ListViewItem();
                lvi.Text = "item" + i;
                lvsi = new ListViewItem.ListViewSubItem();
                lvsi.Text = "subitem" + i;
                lvi.SubItems.Add(lvsi);
                lvTemp.Items.Add(lvi);
            }
            this.listView = lvTemp; //вот тут я присваиваю содержимое временного списка конечному списку
        }
Вложения
Тип файла: rar ListViewDouble.rar (33.7 Кб, 11 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2012, 20:46
Ответы с готовыми решениями:

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

Заполнение ListView из списка
Здравствуйте! Имеется список List&lt;Dictionary&lt;string, obj&gt;&gt;. Имеется ListView, с определенным набором столбцов. Имена столбцов...

Обновление списка процессов в Listview
Здравствуйте. Нужно выводить список процессов с обовлением каждые 0,5 секунд. Обновление должно быть без мерцания. Вот код: private void...

5
 Аватар для dextermd
101 / 100 / 18
Регистрация: 04.09.2009
Сообщений: 133
19.05.2012, 20:01
Цитата Сообщение от Tolias28 Посмотреть сообщение
Пытаюсь выполнить добавление нужных элементов во временном списке ListView, а потом присвоить этот список другому списку
А в чем смысл данной операции ? Почему не добавлять нужные элементы сразу в последний список ?
0
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
19.05.2012, 22:03  [ТС]
Цитата Сообщение от dextermd Посмотреть сообщение
А в чем смысл данной операции ? Почему не добавлять нужные элементы сразу в последний список ?
У меня есть программа, которая раз в 30 секунд обновляет информацию из инета, загружая разные страницы и отображая нужную информацию в списке. При запуске обновления список очищается и в него забиваются элементы списка с некоторой инфой, подгруженной с разных страниц. Само обновление может длиться до 10 секунд. Вот и получается, что все эти 10 секунд список чист. А я хочу сделать, чтобы все обновление и наполнение списка выполнялось в фоне, а само содержимое списка менялось моментально.

Так разве никто не знает причины, почему список ListView, созданный вручную, не отображается на форме?
0
 Аватар для dextermd
101 / 100 / 18
Регистрация: 04.09.2009
Сообщений: 133
19.05.2012, 22:53
ListView это визуальный элемент управления, он не рассчитан на то чтобы быть временным хранителем данных. На вашем месте я бы сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void LoadData()
{
    var lvTemp = new List<string[]>();
    string[] lvi;
 
    for (int i = 0; i < 8; i++)
    {
        lvi = new string[2];                
        lvi[0] = "item" + i;                
        lvi[1] = "subitem" + i;
        lvTemp.Add(lvi);
    }
 
    this.listView.Items.Clear();
    foreach (var item in lvTemp)
    {
        this.listView.Items.Add(new ListViewItem(item));
    }
}
1
213 / 139 / 8
Регистрация: 18.08.2010
Сообщений: 1,018
20.05.2012, 17:01  [ТС]
dextermd, спасибо! Проблему решил, правда немного не так, потому что:
Цитата Сообщение от dextermd Посмотреть сообщение
На вашем месте я бы сделал так:
Мне список строк не пойдет, так как я в элементы списка ListView добавляю не только строки, но и меняю другие свойства элемента, такие как BackColor. То есть, для хранения элементов мне нужен только список элементов ListView. По этой причине я хотел использовать список ListViewItemCollection, но вот незадача, у него лишь один конструктор, в котором к тому же нужно указать объект ListView, которому принадлежит данная коллекция, чего мне делать не надо. Пришлось создать свой класс такого вида:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public class ListViewItemCollectionAlternative : CollectionBase
    {
        public void Add(ListViewItem newItem)
        {
            List.Add(newItem);
        }
 
        public ListViewItem this[int itemIndex]
        {
            get
            {
                return (ListViewItem)List[itemIndex];
            }
            set
            {
                List[itemIndex] = value;
            }
        }
    }
Потом в программе я использую этот класс для добавления колеекции элементов списка ListView. А элементы в конечный список из этой коллекции добавляю вот так:
C#
1
2
3
4
5
6
7
8
                        this.listViewUsers.BeginUpdate();
                        this.listViewUsers.Items.Clear();
 
                        foreach (ListViewItem lvit in lvis) //lvis - это коллекция, созданная мною ListViewItemCollectionAlternative
                        {
                            this.listViewUsers.Items.Add(lvit);
                        }
                        this.listViewUsers.EndUpdate();
все работает Правда как-то гемморойно получилось... Но я попроще пути не нашел для своей ситуации.
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
21.05.2012, 19:01
используйте виртуальный режим и используйте коллекции данных:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        class Item
        {
            public int Guid;
            public string Name;
            public string Descriptions;
        }
 
        public Form1()
        {
            InitializeComponent();
 
            List<Item> collections = new List<Item>();
 
            Random rand = new Random();
            for (int i = 0; i < 1000; ++i)
            {
                collections.Add(new Item() 
                { 
                    Guid = rand.Next(-100, 100), 
                    Name = "test" + i, 
                    Descriptions = "desc " 
                });
            }
 
            listView1.VirtualMode     = true;
            listView1.VirtualListSize = collections.Count;
 
            listView1.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler((o, e) => 
            {
                Item el = collections[e.ItemIndex];
                var listViewItem = new ListViewItem(new[] { el.Guid.ToString(), el.Name, el.Descriptions });
 
                if (el.Guid < 0)
                    listViewItem.BackColor = Color.Red;
                else if (el.Guid > 0)
                    listViewItem.BackColor = Color.Blue;
                else
                    listViewItem.BackColor = Color.BlueViolet;
 
                e.Item = listViewItem;
            });
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2012, 19:01
Помогаю со студенческими работами здесь

Переупорядочивание пользователем списка ListView
Здравствуйте все кто заинтересовался данной темой. Неудачно пытался найти в сети информацию о перетаскивании элементов списка ListView...

в панели элементов не отображаются элементы другого фреймворк. только стандартные
здравствуйте, включаю компьютер и в visual studio элементы другого фреймворк (devexpress) заблокированы. что делать? Добавлено через 1...

Добавление элемента в начало списка ListView
Добрый день! Подскажите, пожалуйста, как добавить элемент в начало списка TreeView? В вариантах ListView.Add(new...

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

Удалить из списка все элементы, равные последнему; найти длину полученного списка
Помогите реализовать.Создайте список и Удалите из списка все элементы, равные последнему, найдите длину оставшегося списка; domains...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru