Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabelleninhalt in Checklistbox anzeigen (https://www.delphipraxis.net/32250-tabelleninhalt-checklistbox-anzeigen.html)

MrSpock 23. Okt 2004 14:03

Re: Tabelleninhalt in Checklistbox anzeigen
 
Hallo needatip,

du läufst durch die Tabellee und suchst den entsprechenden Bezeichner in der Liste mit IndexOf:

Delphi-Quellcode:
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
   i, index: Integer;
begin
   for i := 1 to CheckListBox1.Count do
      CheckListBox1.State[i-1] := cbUnchecked;
   Table2.Open;
   Table2.First;
   while not Table2.Eof do
   begin
      index := CheckListBox1.Items.IndexOf(Table2Branchen.AsString);
      if index > -1 then
         CheckListBox1.State[index] := cbChecked;
      Table2.Next;
   end;
end;

needatip 23. Okt 2004 16:38

Re: Tabelleninhalt in Checklistbox anzeigen
 
Danke für die schnelle Antwort;
Warum zum Teufel bekomme ich jetzt die Compilermeldung, dass 'cbUnchecked' ein undefinierter Bezeichner ist.
Hab ich irgendetwas nicht eingebunden (uses) oder so ?
Habs doch auch richtig geschrieben.
Tut mir leid - bin halt kein Ass im Programmieren.

MrSpock 23. Okt 2004 16:41

Re: Tabelleninhalt in Checklistbox anzeigen
 
Hallo needatip,

in Delphi 7 sind die Konstanten cbChecked und chUnchecked in der Unit StdCtrls definiert.

needatip 24. Okt 2004 13:30

Re: Tabelleninhalt in Checklistbox anzeigen
 
Ok - jetzt benötige ich nur mehr die OnClickCheck-Event Routine, den Rest kann ich dann noch verfeinern.
Danke im voraus.

MrSpock 24. Okt 2004 14:55

Re: Tabelleninhalt in Checklistbox anzeigen
 
Hallo needatip,

wo ist denn das Problem? Wie weit bist du gekommen als du versucht hast die Methode zu schreiben?

Ich hab zwar eine Lösung geschrieben, aber die möchte ich dir nicht einfach so geben. Du solltest zunächste einmal deine OnCreate Methode so anpassen, dass du dir neben dem Bezeichner der Branche auch die ID merkst. Das könntest du z.B. mit AddObject machen, wobei du als Objekt einfach einen gecasteten Integer übergibst, denn TObject ist ja letztlich eine Adresse und bietet damirt genug Platz für einen Integer.
Du könntest als Objekt also z.B. TObject(TabBranchenNr.AsInteger) benutzen. Versuche dann einmal die OnClickCheck Methode zu schreiben, bzw. sage genau wo das Problem ist.

needatip 24. Okt 2004 21:18

Re: Tabelleninhalt in Checklistbox anzeigen
 
Also das mit dem TObject hab ich nicht verstanden.
Hab versucht folgendes zu schreiben:
Delphi-Quellcode:
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var i : integer;
begin
  i := CheckListBox1.ItemIndex;
  Table2.Append;
  Table2Branchen.Value := CheckListBox1.Items[i];
  Table2BR_ID.Value := CheckListBox1.Items.IndexOf(Table2Branchen.AsString);
...
end;
bin aber dann doch nicht weiter gekommen.
Muss noch über den CheckListBox-Index auf die richtige BRA_ID kommen.

MrSpock 25. Okt 2004 00:12

Re: Tabelleninhalt in Checklistbox anzeigen
 
Hallo needatip,

Zitat:

Muss noch über den CheckListBox-Index auf die richtige BRA_ID kommen.
sehr gut! Du benötigst zu einem Bezeichner die zugehörige ID, die kannst du zwar aus der Tabelle auslesen, oder aber du merkst sie dir bereits beim Einlesen. Und da kam meine Idee her, sich die ID als "Objekt" zu merken:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   TabBranchen.Open;
   while Not TabBranchen.Eof do
   begin
      CheckListBox1.Items.AddObject(TabBranchenBezeichner.AsString,
                                    TObject(TabBranchenNr.AsInteger));//<- Nr als Object speichern
      TabBranchen.Next;
   end;
   DataSource1DataChange(Self, nil);
end;
Beim Klicken:

Delphi-Quellcode:
procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var
   i : Integer;
begin
   for i := 0 to CheckListBox1.Count-1 do
   begin
      if CheckListBox1.State[i] = cbChecked then
      begin
         if Not TabAdrBra.Locate('Bra_ID',
                              Integer(CheckListBox1.Items.Objects[i]), []) then
         begin
            TabAdrBra.Append;
            // TabAdrBraNr.AsInteger wird über AutInc gesetzt
            TabAdrBraAdr_ID.AsInteger := TabAdressenNummer.AsInteger;
            TabAdrBraBra_ID.AsInteger := Integer(CheckListBox1.Items.Objects[i]);
                                         // hier wird die Nr wieder ausgelesen
            TabAdrBra.Post;
         end;
      end
      else begin
         if TabAdrBra.Locate('Bra_ID',
                         Integer(CheckListBox1.Items.Objects[i]), []) then
            TabAdrBra.Delete;
      end;
   end;
end;
Jetzt musst du dir noch überlegen, was in die DataDourceChange Methode muss, die aufgerufen wird, wenn der Nutzer zu einer anderen Adresse geht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr.
Seite 2 von 2     12   

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