Войти

Показать полную графическую версию : Заполнение ListView


swoy45
11-01-2013, 15:18
Всем доброго времени суток.
Вчера полдня мучился с автоматическим заполнением ListView на delphi, результат вышел не тот, которого я добивался. Я добился того, что колонки разделяются переносом строки, затем новая строка в ListView начинается, когда заканчиваются колонки. В общем, мне нужно заполнить из файла ListView таким образом: колонки разделяются знаком |, строки - переносом строки. Как это осуществить?
UPD: Так же нужно, чтобы это действие могло выполняться в обратном порядке - т.е. сохранять из ListView в текстовик

LilLoco
11-01-2013, 15:35
swoy45, Что то не совсем понятно. Что значит автоматическим? Что должно получиться?
Но навскиду. В циклах проходитесь по необходимым вам данным. В "внутреннем" цикле формируются строки, через "|"

Row = ""
...............................................
Row = Row + "данные" + "|";

По окончании формирования строки удаляете последний символ (им будет "|")

Ну а во внешнем добавляете строки в ListView.

Для конкретики, хотелось бы видеть код, исходные данные, что требуется...

swoy45
11-01-2013, 17:50
вот как я описывал процедуру:
procedure TForm1.Button2Click(Sender: TObject);
var
SL: TStringList;
i: Integer;
begin
SL := TStringList.Create;
try
SL.LoadFromFile(edit1.text);
i := 0;
while i < SL.Count do
begin
with ListView1.Items.Add do
begin
Caption := SL[i];
SubItems.Add(SL[i + 1]);
SubItems.Add(SL[i + 2]);
end;
Inc(i, 3);
end;
finally
SL.Free;
end;
end;

вот то, что в файле:
0001|надпись1|25.00
0002|надпись2|55.00
0003|надпись3|85.00
0004|надпись4|105.00
0005|надпись5|135.00
0006|надпись6|155.00

вот что получается:

http://swoy45.narod.ru/nnn.PNG

а вот что должно получиться:

http://swoy45.narod.ru/yyy.PNG

swoy45
11-01-2013, 18:21
я додумался сделать вот так, теперь все работает как надо
procedure TForm1.Button2Click(Sender: TObject);
var
SL,st: TStringList;
i: Integer;
begin
SL := TStringList.Create;St := TStringList.Create; st.Delimiter:='|';
try
SL.LoadFromFile(edit1.text);
i := 0;
while i < SL.Count do
begin st.DelimitedText:=SL[i];
with ListView1.Items.Add do
begin
Caption := St[0];
SubItems.Add(St[1]);
SubItems.Add(St[2]);
end;
Inc(i, 1);
end;
finally
SL.Free;
st.free;
end;
end;

остается один вопрос, как все это дело сохранять в текстовик такой же формы?

Delirium
12-01-2013, 15:41
Ну как как. Построчно обходим элементы и записываем. После записи каждого элемента в строке пишем |. После записи последнего элемента в строке ListView записываем | и пишем в конец файла.




© OSzone.net 2001-2012