Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Aktualisieren der ListView (https://www.delphipraxis.net/165082-aktualisieren-der-listview.html)

Impulz 14. Dez 2011 10:32

Delphi-Version: 5

Aktualisieren der ListView
 
Wie bereits schon in einigen Treads erwähnt habe ich eine IBE DB und eine Oberfläche + einige Units...


ich benötige dieses Mal Hilfe bei der LV Aktualisierung, irgendwie steh ich auf dem Schlauch.

Ich kann mit einem PopupMenu (PMHINZUFÜGEN) ein Stringgrid aufrufen wo ich neue Kunden für die DB eintrage.
Diese werden auf der Db abgespeichert. Jedoch sehe ich sie erst wenn ich nochmal auf imgAnzeigen klicke und nicht direkt nach dem Eintrag.

Hier einbisschen Code...


!!!!!!!!!!!!!KUNDE WIRD ANGELEGT!!!!!!!!!!!!!!!!!!
Delphi-Quellcode:
function TDataconnect.getKunden():TKundeList;
var
   Kunde  : TKunde;
   KundeQuery : TIBOQuery;
   KundeTransa : TIBOTransaction;
begin
  Result:= TKundeList.create();
  KundeQuery:= TIBOQuery.Create(nil);
  KundeQuery.SQL.Text:= 'SELECT * FROM KUNDEN ';
  KundeQuery.IB_Connection:= FDataBase;
  KundeTransa:= TIBOTRansaction.Create(nil);
  KundeTransa.IB_Connection:= FDataBase;
  KundeQuery.IB_Transaction:= KundeTransa;
  KundeTransa.StartTransaction();
  try
    KundeQuery.Open();
    while not KundeQuery.Eof do
    begin
      kunde:= TKunde.Create(KundeQuery.Fieldbyname('Kunden_ID').asInteger,
                            KundeQuery.FieldbyName('Vorname').asString,
                            KundeQuery.FieldbyName('nachname').AsString);
      Result.addkunde(Kunde);
      KundeQuery.Next();
    end;
    KundeTransa.Commit();
  except
    on e:Exception do
    begin
      ShowMessage(e.Message);
      KundeTransa.Rollback();
    end;
  end;
end;
!!!!!!!!!!!!!!!!!!!!NEUEN KUNDEN HINZUFÜGEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Delphi-Quellcode:
procedure TStartseite.Hinzufgen1Click(Sender: TObject);
var
  Kunde: TKunde;
  Buch: TBuch;
  Sendung: TSendung;
  Autor: TAutor;

begin
  Dateneditieren.StrGrAuswahl.Cells[0,0]:='';
  Dateneditieren.StrGrAuswahl.Cells[1,0]:='';
  Dateneditieren.StrGrAuswahl.Cells[2,0]:='';
  if IsPositiveResult(Dateneditieren.ShowModal()) then
  begin
    Dateneditieren.ShowModal();
    case (rgAuswahl.ItemIndex) of
      0 : begin
            Kunde := TKunde.Create(-1,Dateneditieren.StrGrAuswahl.Cells[1,0],Dateneditieren.strgrauswahl.cells[2,0]);
            connect.LegeKundeAn(Kunde);
            addKundetoLV(Kunde);
          end;
      1 : begin
            Sendung:= TSendung.Create(-1,Dateneditieren.StrGrAuswahl.Cells[1,0],Dateneditieren.strgrauswahl.cells[2,0]);
            connect.LegeSendungAn(Sendung);
          end;
      2 : begin
            Autor:= TAutor.Create(-1,Dateneditieren.StrGrAuswahl.Cells[1,0],Dateneditieren.strgrauswahl.cells[2,0]);
            connect.LegeAutorAn(Autor);
          end;
      3 : begin
            Buch:= TBuch.Create(1,StrToInt(Dateneditieren.StrGrAuswahl.Cells[1,0]),Dateneditieren.StrGrAuswahl.Cells[2,0]);
            connect.LegeBuchAn(Buch);
          end;
    else
      begin
        ShowMessage('Ups, beim Anlegen des Kunden lief etwas schief');
      end;
    end;
  end;
end;
ich dachte mir vllt schreibe ich ne funktion dafür... desshalb : hier ist sie... ist aber irgendwie alles falsch:
Delphi-Quellcode:
function TStartseite.addKundetoLV(AKunde: TKunde): TKundeList;
var
  myItemAddKtoLV: TListItem;
  all: integer;
  kundelist: tkundelist;
begin
  connect.LegeKundeAn(Akunde);
  lvAuswahl.Column[0].NewInstance();
  lvAuswahl.UpdateItems(1,100);
end;

UPDATE,REFRESH,REPAINT.... alles versucht = geht nicht

vielen Dank im Vorraus!

grüße euer,

webcss 14. Dez 2011 11:35

AW: Aktualisieren der ListView
 
Zitat:

Zitat von Impulz (Beitrag 1141312)
Dein Problem steckt hier:
Code:
function TStartseite.addKundetoLV(AKunde: TKunde): TKundeList;
var
  myItemAddKtoLV: TListItem;
  all: integer;
  kundelist: tkundelist;
begin
  connect.LegeKundeAn(Akunde);
  lvAuswahl.Column[0].NewInstance();
  lvAuswahl.UpdateItems(1,100);
end;

so funktioniert das nicht! Erstmal grundsätzliche Frage:
bedienst Du Deine Listview im VirtualMode (=OwnerData=true) oder normal?

normal:
Delphi-Quellcode:
function TStartseite.addKundetoLV(AKunde: TKunde): TKundeList;
var
  myItemAddKtoLV: TListItem;
  all: integer;
  kundelist: tkundelist;
begin
  connect.LegeKundeAn(Akunde);
 
  myItemAddKtoLV:= lvAuswahl.Items.Add;
  myItemAddKtoLV.Caption:= Akunde.Name;
  myItemAddKtoLV.SubItems.Add(AKunde.Strasse); // etc;
end;
oder Virtuell (OwnerData=true):
Delphi-Quellcode:
function TStartseite.addKundetoLV(AKunde: TKunde): TKundeList;
var
  myItemAddKtoLV: TListItem;
  all: integer;
  kundelist: tkundelist;
begin
  connect.LegeKundeAn(Akunde);
  lvAuswahl.Items.Count:= Kundelist.Count;
  lvAuswahl.Refresh;
end;
wobei sowieso nicht klar ist, was die ganzen Variablen in dieser Funktion bedeuten, bzw. woher sie ihren Wert beziehen... aber das weisst Du sicherlich besser...:-D

Impulz 14. Dez 2011 11:51

AW: Aktualisieren der ListView
 
also, ich habe OwnerData = False.


okay ich danke dir... ich probier mal direkt...

Impulz 14. Dez 2011 11:54

AW: Aktualisieren der ListView
 
danke :=) !!!
TOP!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz