Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как сохранять элементы ListView?


Автор: medos 19.5.2006, 18:16
Собственно нужно сохранять/открывать результаты изменений в Listview.

Как бы попроще это сделать? 

Автор: Ch0bits 19.5.2006, 18:24
Например записывать item'ы в текстовый файл или использовать сериализацию. 

Автор: medos 19.5.2006, 18:35
А можно поподробнее и с примерами хотя-бы основных частей кода?

очень сильно поджимает время (сессия)  smile  

Автор: Ch0bits 19.5.2006, 19:12
Всё просто как три копейки  smile 
Код

        /// <summary>
        /// Сохранение элементов ListBox
        /// </summary>
        /// <param name="box">Наш ListBox</param>
        /// <param name="FileName">Сохраняемый файл</param>
        public void SaveListBoxItems(ListBox box, string FileName)
        {
            using (StreamWriter SW = new StreamWriter(FileName))
            {
                for (int i = 0; i < box.Items.Count; i++)
                    SW.WriteLine(box.Items[i].ToString());
            }
        }

        /// <summary>
        /// Загрузка элементов ListBox
        /// </summary>
        /// <param name="box">Наш ListBox</param>
        /// <param name="FileName">Загружаемый файл</param>
        public void LoadListBoxItems(ListBox box, string FileName)
        {
            box.BeginUpdate();
            box.Items.Clear();
            using (StreamReader SR = new StreamReader(FileName))
            {
             string Str;
                while((Str=SR.ReadLine())!=null)
                    box.Items.Add(Str);
            }
            box.EndUpdate();
            box.TopIndex = 0;
        }
 

Автор: medos 19.5.2006, 20:19
Спасибо за пример.

А для listview с несколькими subitem это подойдет?

И еще момент непонял:
Код

...StreamWriter(FileName))


Здесь имя файла или что-то типа: (@"c:\filename.txt")
 

Автор: Ch0bits 19.5.2006, 20:46
Аааа!  smile Я перепутал ListView с ListBox!  smile  

Автор: medos 21.5.2006, 14:34
Попробовал осуществить сериализацию listview, но компилятор выдает исключение, вероятнее всего из-за того, что объект listview не имеет интерфейса сериализации.

Можно ли все-таки сериализовать listview не прибегая к разбиению на items?  smile 
 

Автор: Wanderer2019 21.5.2006, 15:46
Зачем тебе сеализовать весь контрол то??? Сеарилизуй все Items.
можно так:
Код

BinaryFormatter bf = new BinaryFormatter();

Serialize:
Код

FileStream fs=new FileStream(@"1.dat",System.IO.FileMode.Create);
bf.Serialize(fs,new ArrayList(listView1.Items));

Deserialize:
Код

FileStream fs=new FileStream(@"1.dat",System.IO.FileMode.Open);
ArrayList arr=(ArrayList)bf.Deserialize(fs);
listView1.Items.AddRange((ListViewItem[])arr.ToArray(arr[0].GetType()));

вроде работает.
пробуй. 

Автор: medos 22.5.2006, 16:04
Спасибо, Wanderer2019, за пример.

А могу ли я сериализировать items нескольких listview в один файл? Может быть для этого есть какие-нибудь разделители данных, чтобы данные не путались? 

Автор: ivashkanet 22.5.2006, 16:30
medos, можно создать массив итемсов, запихать в него всё. А потом сериализовать  smile  

Автор: Wanderer2019 22.5.2006, 20:11
ну если использовать технологию хранения коллекций items в объектах типа ArrayList, то ,как вариант, можешь создать массив этих самых ArrayList[] и хранить столько итемсов от разных ListView сколько нужно. т.е.:
Код

BinaryFormatter bf = new BinaryFormatter();
FileStream ms=new FileStream(@"C:\1.dat",System.IO.FileMode.Create);
ArrayList[] arrlist=new ArrayList[2];
arrlist[0]=new ArrayList(listView1.Items);
arrlist[1]=new ArrayList(listView2.Items);
bf.Serialize(ms,arrlist);

это просто как вариант... чтобы описать суть подхода.
  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)