Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] listview и openfiledialog (http://forum.oszone.net/showthread.php?t=219995)

DAmlex 08-11-2011 20:26 1791179

listview и openfiledialog
 
Подскажите как заполнить listview из файла txt если он многоколоночный.

LilLoco 08-11-2011 21:46 1791214

Ну я так понимаю заполнить ListView как вы знаете?

Цитата:

Цитата DAmlex
txt если он многоколоночный. »

ну тут тоже проблем нету в принципе.
Допустим в txt файле у вас много строк структуры типа : << "1колонка" "2колонка" "3колонка">>, делаем цикл (код C#):
PHP код:

StreamReader sr = new StreamReader "1.txt" );
                        while (!
sr.EndOfStream)
                        {
                                
string row sr.ReadLine ( );
                                
string[] columns row.Split ( new char[] { ' ' } );
                                foreach (
string col in columns)
                                {
                                        
listView1.Items.Add col );
                                }
                        } 

Это в простейшем случае. Все зависит от файла.

DAmlex 09-11-2011 13:19 1791560

Так я уже пробовал он заполняет только первую колонку а остальные колонки остаются не заполненные .
Вот как я сохраняю
PHP код:

saveFileDialog1.ShowDialog();
            
StreamWriter save = new StreamWriter(saveFileDialog1.FileNametrueSystem.Text.Encoding.Default);
           for (
int i 0<listview1.Items.Counti++)
            {
                for (
int l=0<listview1.Items[i].SubItems.Count;l++)
                
save.WriteLine(Convert.ToString(listview1.Items[i].SubItems[l]).Replace("ListViewSubItem:",null).Replace("{","").Replace("}","").Trim());
                                
            }
            
save.Close(); 

Таким образом сохраняется файл вида:
PHP код:

//1 запись 

12.09.2000
13:46:44
15:45:00
PHP код:

//2 запись 

14.09.2000
12:46:44
16:11:55

Где 12.09.2000 - Первая колонка; 13:46:44 - вторая колонка первой записи;15:45:00 - третья колонка первой записи.(Вторая и третья запись это SubItems первой колонки)
Пробовал при сохранении формировать строку StreamBuilder все тоже самое.Тогда сохраняется файл вида
PHP код:

//1 запись 

12.09.2000 13:46:44 15:45:00
PHP код:

//2 запись 

14.09.2000 12:46:44 16:11:55

LilLoco 09-11-2011 13:37 1791570

DAmlex, Прикрепите пожалуйста сохраненный файл. Разберемся ;)

DAmlex 09-11-2011 14:52 1791616

Вложений: 2
Вот файл сохранения.Третий день мучаюсь все никак.
fish_stroka.txt сохранение с использование StringBuilder

LilLoco 09-11-2011 15:08 1791627

DAmlex, Первый предложенный код работает. Вот переделал, попробуйте его:
Код:

namespace ConsoleApplication1
{
        class Program
        {
                static void Main ( string[] args )
                {
                        StreamReader sr = new StreamReader ( "2.txt" ); // 2.txt это ваш fish_stroka.txt
                        do
                        {
                                string row = sr.ReadLine ( ); // читаем строку
                                row = row.TrimEnd ( new char[] { ' ' } ); // удаляем пробелы в конце строки
                                string[] cols = row.Split(new char[] { ' ' }); // разбиваем
                                foreach (string col in cols)
                                {
                                        Console.WriteLine ( col ); // суммарно в циклах есть все колонки и строки
                                }
                        }
                        while (!sr.EndOfStream);
                        sr.Close ( );
                        sr.Dispose ( );
                        Console.ReadKey ( );
                }
        }
}


Delirium 10-11-2011 00:36 1791942

Цитата:

Цитата LilLoco
row = row.TrimEnd ( new char[] { ' ' } ); »

А почему не просто TrimEnd(' '); ? :) Одинарные кавычки и так укажут, что это char, а не string.

LilLoco 10-11-2011 07:30 1792041

Цитата:

Цитата Delirium
А почему не просто TrimEnd(' '); ? »


Честно, наверное просто привык уже так :) Вдруг нужно будет добавить еще какие - либо символы для удаления, будет проще дописать...

DAmlex 10-11-2011 12:57 1792211

Вложений: 2
Так тоже делал вот
PHP код:

StreamReader open = new StreamReader(Convert.ToString(openFileDialog1.FileName),System.Text.Encoding.Default);
            while (!
open.EndOfStream)
            {
                
string row open.ReadLine();
                
string[] columns row.Split(new char[] { ' ' });
                foreach (
string col in columns)
                {
                    
listview1.Items.Add(col); //Что тут должно быть написано чтобы заполнить SubItems; listview1.Items.Add().SubItems(?????);
                
}
            }  
        } 

Предлагаю взглянуть на скрины
table_add - Добавление данных через Form2
table_load - Так он заполняет из файла

LilLoco 10-11-2011 14:11 1792258

Цитата:

Цитата LilLoco
Ну я так понимаю заполнить ListView как вы знаете? »

А вы ведь даже не ответили, а теперь спрашиваете как заполнять :)

Цитата:

Цитата DAmlex
//Что тут должно быть написано чтобы заполнить SubItems; listview1.Items.Add().SubItems(?????); »

Набросал, возможны ошибки, но принцип должен быть ясен.

Код:

StreamReader sr = new StreamReader ( "2.txt" ); // 2.txt это ваш fish_stroka.txt
                        do
                        {
                                string row = sr.ReadLine ( ); // читаем строку
                                row = row.TrimEnd ( new char[] { ' ' } ); // удаляем пробелы в конце строки
                                string[] cols = row.Split ( new char[] { ' ' } ); // разбиваем
                                ListViewItem itm = new ListViewItem ( ); // итем для листвью
                                itm.Text = cols[0]; // текст итема
                                for (int i = 1; i < cols.Length; i++ )
                                {
                                        itm.SubItems.Add ( cols[i] ); // добавляем дополнительную информацию в колонки
                                }
                                listView1.Items.Add ( itm ); // сам итем добавляем
                        }
                        while (!sr.EndOfStream);
                        sr.Close ( );
                        sr.Dispose ( );


DAmlex 11-11-2011 12:47 1792905

Спасибо за помощь всем откликнувшемся. Появились новые проблемы, если значение SubItems имеет одно или несколько знаков пробела, то вся таблица уезжает. Решение было найдено надо было при сохранении добавить
PHP код:

foreach (ListViewItem item in table_fish.Items)
            {
                for (
int i 0item.SubItems.Counti++)
                {
                    if (
0)
                        
line.Append("|");// | - этот символ
                    
line.Append(item.SubItems[i].Text);
                }
                
save.WriteLine(line); 



Время: 05:38.

Время: 05:38.
© OSzone.net 2001-