listview и openfiledialog
Подскажите как заполнить listview из файла txt если он многоколоночный.
|
Ну я так понимаю заполнить 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 ); } }
Это в простейшем случае. Все зависит от файла.
|
Так я уже пробовал он заполняет только первую колонку а остальные колонки остаются не заполненные .
Вот как я сохраняю
PHP код:
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();
Таким образом сохраняется файл вида:
12.09.2000
13:46:44
15:45:00
14.09.2000
12:46:44
16:11:55
Где 12.09.2000 - Первая колонка; 13:46:44 - вторая колонка первой записи;15:45:00 - третья колонка первой записи.(Вторая и третья запись это SubItems первой колонки)
Пробовал при сохранении формировать строку StreamBuilder все тоже самое.Тогда сохраняется файл вида
12.09.2000 13:46:44 15:45:00
14.09.2000 12:46:44 16:11:55
|
DAmlex, Прикрепите пожалуйста сохраненный файл. Разберемся ;)
|
Вложений: 2
Вот файл сохранения.Третий день мучаюсь все никак.
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 ( );
}
}
}
|
Цитата:
Цитата LilLoco
row = row.TrimEnd ( new char[] { ' ' } ); »
|
А почему не просто TrimEnd(' '); ? :) Одинарные кавычки и так укажут, что это char, а не string.
|
Цитата:
Цитата Delirium
А почему не просто TrimEnd(' '); ? »
|
Честно, наверное просто привык уже так :) Вдруг нужно будет добавить еще какие - либо символы для удаления, будет проще дописать...
|
Вложений: 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
Ну я так понимаю заполнить 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 ( );
|
Спасибо за помощь всем откликнувшемся. Появились новые проблемы, если значение SubItems имеет одно или несколько знаков пробела, то вся таблица уезжает. Решение было найдено надо было при сохранении добавить
PHP код:
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);
|
Время: 05:38.
© OSzone.net 2001-