powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Заполнение ListView в C#
18 сообщений из 18, страница 1 из 1
Заполнение ListView в C#
    #36973093
OVR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OVR
Гость
Всем доброй ночи! Это мое первое сообщение на форуме (если что сильно не пинайте) Вопрос в следующем.Есть программа на VB6 работает с базой mdb. Решил переписать на C#. Столкнулся с неожиданной проблемой. На VB : Выполняется запрос к базе (через ADO) и в цикле заполняется ListView (item и 4 Subitems) Всего 150000 строк (именно 150 000) на это уходит 8сек ! (Если этот же запрос сделать в Access 2000 уходит 3сек что бы появилась таблица) А если я делаю запрос из C# то до момента отображения данных в ListView проходит 130 сек!!! Причем в C# мне выскакивает сообщение (очевидно от среды NET) что все очень долго и это может привести к зависанию и т.д.
ListView заполняется и в VB6 и в C# через AddItem ( я понимаю что это происходит 150000 раз) но в VB для этого надо всего 8сек а C# 130сек!! В MSDN нашел что самый лучший способ заполнить ListView через AddRegion но кода примера не нашел. Может кто что посоветует!
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36973127
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OVRListView заполняется и в VB6 и в C# через AddItem ( я понимаю что это происходит 150000 раз) но в VB для этого надо всего 8сек а C# 130сек!! В MSDN нашел что самый лучший способ заполнить ListView через AddRegion но кода примера не нашел. Может кто что посоветует!

Вот оно счастье управляемой памяти.
Попробуй загрузить через дата адаптер. Это даже визуально можно сделать.
И главное почитай книжки про Visual Studio, их навалом.
К стати если у тебя проект на VB, лучше и под студию делать на VB. VB и C# в 2010 студии равнозначны.
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36973140
OVR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OVR
Гость
Multy,
Спасибо за ответ. Хотелось бы немного уточнить. У меня проект на VB6. Хотел переписать его под NET (не важно C# или VB) Но выходит что ListView в VB6 заполняется на порядок быстрее чем ListView из среды NET Вот я и спрашивал есть ли способ заполнить ListView в NET каким нибудь более быстрым способом кроме как через AddItem ( если можно то фрагмент кода с методом AddRegion вроде как этот способ самый быстрый для ListView в NET среде)
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36973172
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OVR,

Что-то я не понял откуда у тебя вообще такие методы AddItem и AddRegion у ListView? У меня таких нет. Есть Item.Add и Item.AddRange.

Из VB 6 что ли?

Используй ListBox и DataGridView в них можно подгружать напрямую из таблицы.
ListBox1.DataSource = Table1


Вообще начинать нужно с книжек по ADO.NET, и Visual.Studio.
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36973401
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 24.11.2010 1:58, OVR wrote:
Вопрос в следующем.Есть программа на VB6 работает с базой mdb. Решил
> переписать на C#. Столкнулся с неожиданной проблемой. На VB : Выполняется запрос
> к базе (через ADO) и в цикле заполняется ListView (item и 4 Subitems) Всего
> 150000 строк (именно 150 000) на это уходит 8сек !

Первый, и САМЫЙ ГЛАВНЫЙ вопрос. Если ты на него ответишь, то все остальные
вопросы отпадут сами собой.

На кой фиг тебе нужно 150 тысяч строй в гриде ? ЧТО пользователь с ними
будет делать ?

Отвечать нужно не мне, а себе, и по возможности как можно честнее.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36973404
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 24.11.2010 1:58, OVR wrote:


В MSDN нашел что
> самый лучший способ заполнить ListView через AddRegion но кода примера не нашел.

Это ты хренотень какую-то нашёл. самый быстрый способ заполнить ListView -- это
вообще его не заполнять. А использовать стиль OWNERDATA.
Но это не отменяет вопроса о 150 тыщах записей.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36974187
OVR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OVR
Гость
Уважаемый MasterZiv,
Спасибо что обратили внимание на мой вопрос !! Вы конечно правы 150000 записей пользователю не нужны. Надеюсь у Вас хватит терпения попытаться ответить на мой вопрос. Приведу код на C#
Код: plaintext
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.
//
        void ReadData()
        {
            OleDbConnection connection = CreateConnection();
            System.Int32 id =  13856 ; 
             
            string str1 = "SELECT [IdPartia], [NIzd] " +
            "FROM ArxivSkladUpkIdP " +
            "WHERE [IdPartia] In (SELECT [IdPartia] FROM [SkladUpkIdP] As Tmp GROUP BY [IdPartia]
             HAVING  Count(*)>1 ) " +              
            " ORDER BY [IdPartia];";
// Кстати именно этот запрос вернул  157000  записей!!

            OleDbCommand command = connection.CreateCommand();
            command.CommandText = str1;
            command.CommandType = CommandType.Text;
            
            OleDbDataReader reader = command.ExecuteReader();
            //MessageBox.Show(reader.HasRows.ToString());
            listView1.BeginUpdate();
                       
            while (reader.Read())
            {
            
                ListViewItem item = listView1.Items.Add(reader["IdPartia"].ToString());
                //Application.DoEvents(); 
                item.SubItems.Add(reader["NIzd"].ToString());
            }

            listView1.EndUpdate();

            connection.Close();
        }

//

Такой способ заполнения ListView очень медленный. В MSDN в описании ListView приведен пример с методом AddRange вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
            // Create three items and three sets of subitems for each item.
            ListViewItem item1 = new ListViewItem("item1",  0 );
            item1.SubItems.Add("1");
            item1.SubItems.Add("2");
            item1.SubItems.Add("3");
            ListViewItem item2 = new ListViewItem("item2",  1 );
            item2.SubItems.Add("4");
            item2.SubItems.Add("5");
            item2.SubItems.Add("6");
            ListViewItem item3 = new ListViewItem("item3",  0 );
            item3.SubItems.Add("7");
            item3.SubItems.Add("8");
            item3.SubItems.Add("9");

            //Add the items to the ListView.
            listView1.Items.AddRange(new ListViewItem[] { item1, item2, item3 });
Пожалуйста подскажите как мне применить этот метод в моем случае Я так понимаю что в строке
listView1.Items.AddRange(new ListViewItem[] { item1, item2, item3 }) мне вместо { item1, item2, item3 } нужно задействовать массив созданный в моем цикле while (reader.Read()) Как это правильно сделать
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36974402
Multy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OVR,

Прикол в том, что как бы ты не заполнял Items.Add или Items.AddRange. Каждый раз нужно создать ОБЪЕКТ subitem.
А создание отдельных объектов в УПРАВЛЯЕМОЙ памяти NET процесс долгий.

Нужно переходить на другие методы.
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36974818
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 24.11.2010 14:06, OVR wrote:
> Автор: OVR. Уважаемый MasterZiv,
> Спасибо что обратили внимание на мой вопрос !! Вы конечно правы 150000 записей
> пользователю не нужны. Надеюсь у Вас хватит терпения попытаться ответить на мой
> вопрос. Приведу код на C#

По-моему я нашёл то, что тебе нужно.
// http://blogs.msdn.com/b/cumgranosalis/archive/2006/03/06/virtuallistviewusage.aspx
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36974959
OVR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OVR
Гость
MasterZiv,
Спасибо за ссылку но мне важно проводить сортировку а там она не поддерживается.
У меня к Вам просьба я нашел на одном зарубежном форуме именно ту проблему что мы обсуждаем
посмотрите пожалуйста http://www.xtremevbtalk.com/archive/index.php/t-196982.html
только я не совсем понял как написать код Но результат с 13сек до 1сек Буду очень признателен если Вы мне поможете!
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36975380
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 24.11.2010 17:02, OVR wrote:

> Спасибо за ссылку но мне важно проводить сортировку а там она не поддерживается.

Кто тебе сказал такую глупость ? Поддерживается.


A few things to note when using Virtual ListView controls. It does not support
all ListView features. Examples are:

1. Tile View – if you are in Tile view in the ListView, it will change to
LargeIcons instead.

согласен. Но нахрен не надо.

2. SelectedItems/CheckedItems – these properties are not supported. Instead, use
the SelectedIndices/ChecjedIndices properties to figure out which items exist in
those collections.

Враньё. Может имеется в виду, что WinForm-совые пропертя шарповые не
поддерживаются в этом случае (не работают). Это может быть.

3. Changing amount of sub items in a ListViewItem instance – when creating
ListViewItem instances, you need to make sure that it has the appropriate amount
of ListViewSubItem instances in it. With regular list view, you can omit some of
them and they will appear empty in the ListView.

Это вообще не понимаю. Бред какой-то.

4. ArrangeIcons() – this method is not supported.

Это это-то сортировка ? Она не нужна с virtual ListView. Ты просто сортируешь
ДАННЫЕ, потом отображаешь их. ArrangeIcons() не нужно ни на фиг.

5. Groups – you cannot use groups in a virtual ListView.

На фиг не нужно. У тебя -- REPORT VIEW, таблица.

6. Positioning of items – you cannot position ListViewItems in any of the icon
modes.

На фиг не нужно. У тебя -- REPORT VIEW, таблица.

7. Automatic sorting – you cannot use the Sort() method on the ListView or any
associated operations.

Не понял тоже . См. про ArrangeIcons().


> У меня к Вам просьба я нашел на одном зарубежном форуме именно ту проблему что
> мы обсуждаем
> посмотрите пожалуйста http://www.xtremevbtalk.com/archive/index.php/t-196982.html

Забудь ты про этот AddRange, или как его там, уже.
В общем, тема эта полагаю тебе тоже не нужна.

> только я не совсем понял как написать код Но результат с 13сек до 1сек Буду
> очень признателен если Вы мне поможете!

Чем помочь - не понял.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36976703
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В мсдн есть пример

При задании свойству VirtualMode значения true элемент управления ListView переходит в виртуальный режим. В виртуальном режиме обычную коллекцию Items использовать нельзя. Вместо этого объекты ListViewItem создаются динамически, когда это требуется в элементе управления ListView.

Виртуальный режим может быть полезен во многих случаях. Если объект ListView должен заполняться из очень большой коллекции, уже находящейся в памяти, создайте объект ListViewItem для каждой записи, которая может напрасно занимать место в памяти. В виртуальном режиме создаются только необходимые элементы. В других случаях может потребоваться часто пересчитывать значения объектов ListViewItem и выполнение этой процедуры для всей коллекции может привести к неприемлемому снижению производительности. В виртуальном режиме пересчитываются только необходимые элементы.

Для использования виртуального режима следует обработать событие RetrieveVirtualItem, которое происходит каждый раз, когда в элементе управления ListView запрашивается элемент. Этот обработчик событий должен создавать объект ListViewItem, относящийся к указанному индексу. Кроме того, свойству VirtualListSize должно быть задано значение, равное размеру виртуального списка.

Обработка события SearchForVirtualItem включает поиск в виртуальном режиме. Если это событие не обрабатывается, методы FindItemWithText и FindNearestItem будут возвращать значение nullNothingnullptrссылка null (Nothing в Visual Basic).

Можно обрабатывать событие CacheVirtualItems для поддержки кэширования объектов ListViewItem. Если вычисление или поиск при создании объекта ListViewItem требует значительных затрат ресурсов, поддержка кэша может повысить быстродействие.

Когда для свойства View задано значение Tile, это значение будет автоматически изменяться на LargeIcon, если значением свойства VirtualMode является true.

В виртуальном режиме коллекция Items отключена и при попытке доступа к ней происходит исключение InvalidOperationException. Это же справедливо для коллекций CheckedItems и SelectedItems. Если требуется извлечь выбранные элементы или элементы с установленным флажком, взамен используйте коллекции SelectedIndices и CheckedIndices.

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

Visual Basic Копировать код
Код: plaintext
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.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
Public Class Form1
    Inherits Form
    Private myCache() As ListViewItem 'array to cache items for the virtual list
    Private firstItem As Integer 'stores the index of the first item in the cache
    Private WithEvents listView1 As ListView

    Public Shared Sub Main()
        Application.Run(New Form1)
    End Sub

    Public Sub New()
        'Create a simple ListView.
        listView1 = New ListView()
        listView1.View = View.SmallIcon
        listView1.VirtualMode = True
        listView1.VirtualListSize =  10000 

        'Add ListView to the form.
        Me.Controls.Add(listView1)

        'Search for a particular virtual item.
        'Notice that we never manually populate the collection!
        'If you leave out the SearchForVirtualItem handler, this will return null.
        Dim lvi As ListViewItem = listView1.FindItemWithText("111111")

        'Select the item found and scroll it into view.
        If Not (lvi Is Nothing) Then
            listView1.SelectedIndices.Add(lvi.Index)
            listView1.EnsureVisible(lvi.Index)
        End If

    End Sub

    'The basic VirtualMode function.  Dynamically returns a ListViewItem
    'with the required properties; in this case, the square of the index.
    Private Sub listView1_RetrieveVirtualItem(ByVal sender As Object, ByVal e As RetrieveVirtualItemEventArgs) Handles listView1.RetrieveVirtualItem
        'Caching is not required but improves performance on large sets.
        'To leave out caching, don't connect the CacheVirtualItems event 
        'and make sure myCache is null.
        'check to see if the requested item is currently in the cache
        If Not (myCache Is Nothing) AndAlso e.ItemIndex >= firstItem AndAlso e.ItemIndex < firstItem + myCache.Length Then
            'A cache hit, so get the ListViewItem from the cache instead of making a new one.
            e.Item = myCache((e.ItemIndex - firstItem))
        Else
            'A cache miss, so create a new ListViewItem and pass it back.
            Dim x As Integer = e.ItemIndex * e.ItemIndex
            e.Item = New ListViewItem(x.ToString())
        End If


    End Sub

    'Manages the cache.  ListView calls this when it might need a 
    'cache refresh.
    Private Sub listView1_CacheVirtualItems(ByVal sender As Object, ByVal e As CacheVirtualItemsEventArgs) Handles listView1.CacheVirtualItems
        'We've gotten a request to refresh the cache.
        'First check if it's really neccesary.
        If Not (myCache Is Nothing) AndAlso e.StartIndex >= firstItem AndAlso e.EndIndex <= firstItem + myCache.Length Then
            'If the newly requested cache is a subset of the old cache, 
            'no need to rebuild everything, so do nothing.
            Return
        End If

        'Now we need to rebuild the cache.
        firstItem = e.StartIndex
        Dim length As Integer = e.EndIndex - e.StartIndex +  1  'indexes are inclusive
        myCache = New ListViewItem(length) {}

        'Fill the cache with the appropriate ListViewItems.
        Dim x As Integer =  0 
        Dim i As Integer
        For i =  0  To length
            x = (i + firstItem) * (i + firstItem)
            myCache(i) = New ListViewItem(x.ToString())
        Next i

    End Sub

    'This event handler enables search functionality, and is called
    'for every search request when in Virtual mode.
    Private Sub listView1_SearchForVirtualItem(ByVal sender As Object, ByVal e As SearchForVirtualItemEventArgs) Handles listView1.SearchForVirtualItem
        'We've gotten a search request.
        'In this example, finding the item is easy since it's
        'just the square of its index.  We'll take the square root
        'and round.
        Dim x As Double =  0 
        If [Double].TryParse(e.Text, x) Then 'check if this is a valid search
            x = Math.Sqrt(x)
            x = Math.Round(x)
            e.Index = Fix(x)
        End If
        'Note that this only handles simple searches over the entire
        'list, ignoring any other settings.  Handling Direction, StartIndex,
        'and the other properties of SearchForVirtualItemEventArgs is up
        'to this handler.
    End Sub

End Class


C# Копировать код
Код: plaintext
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.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Windows.Forms;

public class Form1 : Form
{
    private ListViewItem[] myCache; //array to cache items for the virtual list
    private int firstItem; //stores the index of the first item in the cache

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    public Form1()
    {
        //Create a simple ListView.
        ListView listView1 = new ListView();
        listView1.View = View.SmallIcon;
        listView1.VirtualMode = true;
        listView1.VirtualListSize = 10000;

        //Hook up handlers for VirtualMode events.
        listView1.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler(listView1_RetrieveVirtualItem);
        listView1.CacheVirtualItems += new CacheVirtualItemsEventHandler(listView1_CacheVirtualItems);
        listView1.SearchForVirtualItem += new SearchForVirtualItemEventHandler(listView1_SearchForVirtualItem);

        //Add ListView to the form.
        this.Controls.Add(listView1);

        //Search for a particular virtual item.
        //Notice that we never manually populate the collection!
        //If you leave out the SearchForVirtualItem handler, this will return null.
        ListViewItem lvi = listView1.FindItemWithText("111111");

        //Select the item found and scroll it into view.
        if (lvi != null)
        {
            listView1.SelectedIndices.Add(lvi.Index);
            listView1.EnsureVisible(lvi.Index);
        }
    }

    //The basic VirtualMode function.  Dynamically returns a ListViewItem
    //with the required properties; in this case, the square of the index.
    void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
    {
        //Caching is not required but improves performance on large sets.
        //To leave out caching, don't connect the CacheVirtualItems event 
        //and make sure myCache is null.

        //check to see if the requested item is currently in the cache
        if (myCache != null && e.ItemIndex >= firstItem && e.ItemIndex < firstItem + myCache.Length)
        {
            //A cache hit, so get the ListViewItem from the cache instead of making a new one.
            e.Item = myCache[e.ItemIndex - firstItem];
        }
        else
        {
            //A cache miss, so create a new ListViewItem and pass it back.
            int x = e.ItemIndex * e.ItemIndex;
            e.Item = new ListViewItem(x.ToString());
        }
    }

    //Manages the cache.  ListView calls this when it might need a 
    //cache refresh.
    void listView1_CacheVirtualItems(object sender, CacheVirtualItemsEventArgs e)
    {
        //We've gotten a request to refresh the cache.
        //First check if it's really neccesary.
        if (myCache != null && e.StartIndex >= firstItem && e.EndIndex <= firstItem + myCache.Length)
        {
            //If the newly requested cache is a subset of the old cache, 
            //no need to rebuild everything, so do nothing.
            return;
        }

        //Now we need to rebuild the cache.
        firstItem = e.StartIndex;
        int length = e.EndIndex - e.StartIndex + 1; //indexes are inclusive
        myCache = new ListViewItem[length];

        //Fill the cache with the appropriate ListViewItems.
        int x = 0;
        for (int i = 0; i < length; i++)
        {
            x = (i + firstItem) * (i + firstItem);
            myCache[i] = new ListViewItem(x.ToString());
        }

    }

    //This event handler enables search functionality, and is called
    //for every search request when in Virtual mode.
    void listView1_SearchForVirtualItem(object sender, SearchForVirtualItemEventArgs e)
    {
        //We've gotten a search request.
        //In this example, finding the item is easy since it's
        //just the square of its index.  We'll take the square root
        //and round.
        double x = 0;
        if (Double.TryParse(e.Text, out x)) //check if this is a valid search
        {
            x = Math.Sqrt(x);
            x = Math.Round(x);
            e.Index = (int)x;

        }
        //If e.Index is not set, the search returns null.
        //Note that this only handles simple searches over the entire
        //list, ignoring any other settings.  Handling Direction, StartIndex,
        //and the other properties of SearchForVirtualItemEventArgs is up
        //to this handler.
    }
}
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36976706
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 24.11.2010 17:02, OVR wrote:

> очень признателен если Вы мне поможете!

Я напишу пример заполнения на С#, уже начал даже,
но не сейчас. Может быть на выходных.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36980503
OVR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OVR
Гость
Спасибо друзья!!! Обязательно попробую виртуальный режим.
Посмотрите что я родил за это время
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ArrayList myAL = new ArrayList();
while (reader.Read())
{
    ListViewItem item1 = new ListViewItem(reader.GetValue( 0 ).ToString());
    item1.SubItems.Add(reader.GetValue( 1 ).ToString());
    item1.SubItems.Add(reader.GetValue( 2 ).ToString());
    // и так далее сколько всего SubItems

    // теперь заполняем ArrayList 
    myAL.Add(item1);
}

// и наконец заполняем наш ListView1
            listView1.Items.AddRange(
            (ListViewItem[])(myAL.ToArray(typeof(ListViewItem))));



Такой способ заполняет ListView быстрее обычного в 10 раз!!
100000 записей около 8-10 сек
а обычным способом больше 2 мин
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #36982603
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 27.11.2010 0:54, OVR wrote:

> ListViewItem item1 = new ListViewItem(reader.GetValue(*0*).ToString());

Не надо вот этого вот для virtual list view.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Заполнение ListView в C#
    #37833882
iprog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OVR, где Вы достали ArrayList?!
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #37835493
Random_Goodman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OVR. Хотел переписать его под NET (не важно C# или VB)
Это очень важно, C# для использовавших VB сложнее. Но выходит что ListView в VB6 заполняется на порядок быстрее чем ListView из среды NET Вот я и спрашивал есть ли способ заполнить ListView в NET каким нибудь более быстрым способом кроме как через AddItem
Через DataSource -->Databind
...
Рейтинг: 0 / 0
Заполнение ListView в C#
    #37835495
Random_Goodman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iprogOVR, где Вы достали ArrayList?!
Там же, где и все
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Заполнение ListView в C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]