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

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

18.05.2012, 20:46. Показов 4908. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru