Показать полную графическую версию : [решено] listview и openfiledialog
Подскажите как заполнить listview из файла txt если он многоколоночный.
Ну я так понимаю заполнить ListView как вы знаете?
txt если он многоколоночный. »
ну тут тоже проблем нету в принципе.
Допустим в txt файле у вас много строк структуры типа : << "1колонка" "2колонка" "3колонка">>, делаем цикл (код C#):
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 );
}
}
Это в простейшем случае. Все зависит от файла.
Так я уже пробовал он заполняет только первую колонку а остальные колонки остаются не заполненные .
Вот как я сохраняю
saveFileDialog1.ShowDialog();
StreamWriter save = new StreamWriter(saveFileDialog1.FileName, true, System.Text.Encoding.Default);
for (int i = 0; i <listview1.Items.Count; i++)
{
for (int l=0; l <listview1.Items[i].SubItems.Count;l++)
save.WriteLine(Convert.ToString(listview1.Items[i].SubItems[l]).Replace("ListViewSubItem:",null).Replace("{","").Replace("}","").Trim());
}
save.Close();
Таким образом сохраняется файл вида:
//1 запись
12.09.2000
13:46:44
15:45:00
//2 запись
14.09.2000
12:46:44
16:11:55
Где 12.09.2000 - Первая колонка; 13:46:44 - вторая колонка первой записи;15:45:00 - третья колонка первой записи.(Вторая и третья запись это SubItems первой колонки)
Пробовал при сохранении формировать строку StreamBuilder все тоже самое.Тогда сохраняется файл вида
//1 запись
12.09.2000 13:46:44 15:45:00
//2 запись
14.09.2000 12:46:44 16:11:55
DAmlex, Прикрепите пожалуйста сохраненный файл. Разберемся ;)
Вот файл сохранения.Третий день мучаюсь все никак.
fish_stroka.txt сохранение с использование StringBuilder
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
row = row.TrimEnd ( new char[] { ' ' } ); »
А почему не просто TrimEnd(' '); ? :) Одинарные кавычки и так укажут, что это char, а не string.
А почему не просто TrimEnd(' '); ? »
Честно, наверное просто привык уже так :) Вдруг нужно будет добавить еще какие - либо символы для удаления, будет проще дописать...
Так тоже делал вот
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 - Так он заполняет из файла
Ну я так понимаю заполнить ListView как вы знаете? »
А вы ведь даже не ответили, а теперь спрашиваете как заполнять :)
//Что тут должно быть написано чтобы заполнить 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 ( );
Спасибо за помощь всем откликнувшемся. Появились новые проблемы, если значение SubItems имеет одно или несколько знаков пробела, то вся таблица уезжает. Решение было найдено надо было при сохранении добавить
foreach (ListViewItem item in table_fish.Items)
{
for (int i = 0; i < item.SubItems.Count; i++)
{
if (i > 0)
line.Append("|");// | - этот символ
line.Append(item.SubItems[i].Text);
}
save.WriteLine(line);
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.