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

покажите Ваш код, а то телепатически не получается его прочитать...
...
Рейтинг: 0 / 0
14.05.2009, 10:32:02
    #35984846
Natallia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамически меняющееся содержимое ListView
Станислав 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
14.05.2009, 12:11:07
    #35985180
Динамически меняющееся содержимое ListView
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
14.05.2009, 12:40:34
    #35985247
Natallia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамически меняющееся содержимое ListView
Станислав С...кий,

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


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