powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Динамически меняющееся содержимое ListView
5 сообщений из 5, страница 1 из 1
Динамически меняющееся содержимое ListView
    #35984727
Natallia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
C#
Необходимо, чтобы содержимое ListView обновлялось с заданной периодичностью.
При этом не исключается работа с ListView пользователя, который имеет лишь возможность "пробегать" по записям в ListView и просматривать их. После очередного обновления необходимо, естественно, выделить ту запись, на которой находился пользователь до обновления, чтобы он мог продолжить с того же места просматривать информацию.
Делаю так:
1. запоминаю tag той записи, которая выделена пользователем
2. обновляю содержимое ListView (очищаю и снова заполняю)
3. выделяю запись с тэгом tag, если таковая существует.
Так не работает: после обновления автоматически выделяется первая запись таблицы при попытке перейти к записи, следующей за той, у которой тэг=tag.
...
Рейтинг: 0 / 0
Динамически меняющееся содержимое ListView
    #35984735
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Natallia,

покажите Ваш код, а то телепатически не получается его прочитать...
...
Рейтинг: 0 / 0
Динамически меняющееся содержимое ListView
    #35984846
Natallia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав C.,

List<Type> data = GetData();

Object selectedItemTag = null;
if (listView.SelectedItems.Count > 0)
selectedItemTag = listView.SelectedItems[0].Tag;

listView.Items.Clear();

if ((data != null) && (data.Count > 0))
{
bool foundItem = false;
if (selectedItemTag == null)
foundItem = true;

foreach (Type item in data)
{
ListViewItem lwi = listView.Items.Add(...);
lwi.Tag = item.ID;
lwi.SubItems.Add(...);
...

if (foundItem == false)
{
if (item.ID == selectedItemTag)
{
lwi.Selected = true;
foundItem = true;
} // if
} // if
} // foreach
} // if
...
Рейтинг: 0 / 0
Динамически меняющееся содержимое ListView
    #35985180
Natallia,
Слегка упростил Ваш пример и написал такой тестовый код (на форму положил листвью и таймер):
Код: 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.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace DynamicListViewTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            ReloadData();
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            ReloadData();
        }

        private void ReloadData()
        {
            timer1.Stop();
            Object selectedItemTag = null;
            int index = - 1 ;
            if (listView1.SelectedItems.Count >  0 )
                selectedItemTag = listView1.SelectedItems[ 0 ].Text.Clone();
            List<string> data = GetData();
            listView1.Items.Clear();
            if ((data != null) && (data.Count >  0 ))
            {
                int counter= 0 ;
                foreach (object item in data)
                {
                    listView1.Items.Add(item.ToString());

                    if ((selectedItemTag != null) && (item.ToString() == selectedItemTag.ToString()))
                    {
                        index=counter;
                    }
                    counter++;
                }

                if (index >=  0 )
                {
                 listView1.Items[index].Selected = true;
                 listView1.Items[index].Focused = true;
                }
                listView1.Refresh();
            }
            timer1.Start();
        }
        private List<string> GetData()
        {
            List<string> ResultList = null;

            OpenFileDialog fd = new OpenFileDialog();
            fd.InitialDirectory = @"C:\";
            fd.Filter = "All files (*.*)|*.*";
            fd.Multiselect = true;
            //fd.RestoreDirectory = true;

            if (fd.ShowDialog() == DialogResult.OK)
            {
                ResultList = new List<string>();
                foreach (string name in fd.FileNames)
                    ResultList.Add(name);
            }
            return ResultList;
        }
    }
}
выделение работало всегда, а вот активной записью всегда была первая. Для того, чтобы активной записью стала выделенная, пришлось добавить в код строку:
Код: plaintext
 listView1.Items[index].Focused = true; 
Проверяйте на вашем коде...
...
Рейтинг: 0 / 0
Динамически меняющееся содержимое ListView
    #35985247
Natallia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кий,

спасибо большое, Focused = true действительно помогло!!!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Динамически меняющееся содержимое ListView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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