Zapis do Listview

0

Witam
Potrzebuję pomocy, podpowiedzi
Jak można zrobić aby dane z pliku były odczytywane do listView, w odpowiednie kolumny
Tytuł, Gatunek, Opis

Gdzie jak wpisuję w Edity Tytuł, gatunek i opis, zapisywane jest to do pliku tekstowego w jednej lini
To chcę aby było to odczytywane w ListView
Proszę Bardzo o pomoc.
Pozdrawiam

0

Oczywiście zapomniałeś dopisać że "szukałem ale nie znalazłem". ;]

//dodaj itemy z Editów
var 
  Item: TListItem; 
begin 
  Item := ListView1.Items.Add; 
  Item.Caption := Edit1.Text; 
  Item.SubItems.Add(Edit2.Text); 
  Item.SubItems.Add(Edit3.Text); 
end;

itd.

Zapis i odczyt z pliku masz na 4p, torry.net, google.

0

Jak zapisujesz dane w pliku tekstowym to oddziel je od siebie jakimś znakiem np. | przykładowa linia pliku tekstowego powinna wyglądać tak:

tytul|gatunek|opis
Póżniej tak zapisane dane możesz wczytać do ListView np. w ten sposób:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TArrayStr = array [0..2] of string;

  TForm1 = class(TForm)
    btnWczytaj: TButton;
    ListView1: TListView;
    procedure btnWczytajClick(Sender: TObject);
  private
    { Private declarations }
    procedure Explode(str: string; sep: Char; var a: TArrayStr);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Explode(str: string; sep: Char; var a: TArrayStr);
var
  p, i: Integer;
begin
  i:=0;
  repeat
    p:= Pos(sep, str);
    if (p = 0) then
      p:= Length(str) + 1;
    a[i]:= Copy(str, 1, p - 1);
    Delete(str, 1, p);
    Inc(i);
  until (Length(str) = 0)
end;


procedure TForm1.btnWczytajClick(Sender: TObject);
var
  sl: TStringList;
  i: Integer;
  dane: TArrayStr;
  li: TListItem;
  s: string;
begin
  sl:= TStringList.Create;
  try
  sl.LoadFromFile('dane.txt');
  for i:=0 to sl.Count - 1 do
  begin
    s:= sl.Strings[i];
    Explode(s, '|', dane);
    li:= ListView1.Items.Add;
    li.Caption := dane[0];
    li.SubItems.Add(dane[1]);
    li.SubItems.Add(dane[2]);
  end;
  finally
  sl.Free;
  end;
end;

end.
0

kAzek Dzięki wielkie
Jak można do tego jeszcze dołączyć kod który byłby automatycznie wpisywany, Taka liczba porządkowa przy
wpisywaniu
Oraz, jak można zrobić aby przy odczytywaniu z pliku to listview, odczytywało każdą nową dodana pozycje której nie ma w listview, da się tak zrobić ?
Pozdrawiam

0

Numerowanie Captiona:

var
 i:integer;
begin
 Lista.Items.BeginUpdate;
  try
   for i:=1 to Lista.Items.Count -1 do
   Lista.Items.Item[i].Caption :=IntToStr(i+1)+'.';
  finally
 Lista.Items.EndUpdate;
end;
0
kAzek napisał(a)

Explode(s, '|', dane);

Dla uproszczenia kodu zamiast powyższej procedurki można wykorzystać gotową funkcję z modułu Classes:


ExtractStrings(['|'], [], s, dane);

1 użytkowników online, w tym zalogowanych: 0, gości: 1