Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listview Spalten zur Laufzeit? (https://www.delphipraxis.net/21192-listview-spalten-zur-laufzeit.html)

celinaw 30. Apr 2004 02:41

Re: Listview Spalten zur Laufzeit?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ..........

kiar 30. Apr 2004 02:55

Re: Listview Spalten zur Laufzeit?
 
hallo celina folgender quelltext, liefert zu mindestens erstmal die spaltennamen
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, CheckLst, ComCtrls;
const
spalten = 3;
listcolum: array[0..spalten-1] of string = ('kunde','num','auftrag');
type
  TForm1 = class(TForm)
   
    btn1: TButton;
    ListView1: TListView;
    procedure btn1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  i:integer;
  col:TListColumn;
begin
   for i:=0 to high(listcolum) do
   begin
    col:=listview1.Columns.Add;
    col.Caption:=listColum[i];
   end;
end;

end.
einfach ein button und ein listview auf die form, versuche erstmal das listview zu verstehen.

so das wars für heute , bis morgen raik

celinaw 30. Apr 2004 03:03

Re: Listview Spalten zur Laufzeit?
 
Ja, das funktioniert :mrgreen:

alcaeus 30. Apr 2004 04:12

Re: Listview Spalten zur Laufzeit?
 
Delphi-Quellcode:

const
  Spalten = 3;
  SQL_Names: array [0..Spalten] of String = (<Spaltenname1>, <Spaltenname1>, ...);
  List_Names: array [0..Spalten-1] of String = (<Spaltenname1>, <Spaltenname1>, ...);

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := to Spalten-1 do
  begin
    CheckListBox1.Items.Add(List_Names[i]);
    CheckListBox1.Checked[i] := True;
  end;
end;

procedure TForm1.bSucheClick(Sender: TObject);
var
  bFirst: Boolean;
  i: Integer;
  ListItem : TlistItem;
begin
  bFirst := True;
  Screen.Cursor := crHourGlass;
  lfertig.Caption:= '';
  lInfo.Caption:='';
  Memo1.Lines.Clear;
  dbMain.HostName:=SetupForm.edServer.Text; //Server
  dbMain.User:=SetupForm.edLogin.Text; //Benutzername
  dbMain.Password:=SetupForm.edPassword.Text; //Passwort
  dbMain.Database:=SetupForm.edDB.Text; //Name der Datenbank
  dbMain.Connected:=True; //Verbindung herstellen
  lvAnzeige.Items.Clear;
  try
    qrMain.SQL.Text :=
      'SELECT * ' + 
      'FROM ' + 
      'table_ordertracking T,' + 
      'kundenmg K ' + 
    'WHERE ' + 
      'T.Customer_Number=K.Customer_Number ' + 
      'AND ' + 
      'T.Customer_Number like ''' + edknr.Text + '''"%" ' + 
      'AND ' + 
      'T.Order_Number like ''' + edatnr.Text + '''"%" ' + 
    'ORDER BY ' + 
      'T.DPrint;';

    qrMain.Open;
//** Diese Zeile könnte die Lösung sein. **
    qrMain.FetchAll;
//*****************************************
    qrMain.FieldByName('Order_Type').AsString;
    gauge1.Visible:= True;
    gauge1.maxvalue := qrMain.recordcount;
    lvAnzeige.Items.BeginUpdate;
    lv_Anzeige.Columns.Clear;
    lv_Anzeige.Items.Clear;
    for i := 0 to Spalten-1 do //Spaltenarray durchlaufen und alle "gewählten" Spalten hinzufügen.
    begin
      if CheckListBox1.Checked[i] then
        lv_Anzeige.Columns.Add.Caption := List_Names[i];
    end;
    while not qrMain.Eof do
    begin
      ListItem := lvAnzeige.Items.Add; //Neues Element in die ListView
      for i := 0 to Spalten-1 do  //Alle möglichen Spalten durchgehen
      begin
        if CheckListBox1.Checked[i] then  //Soll die gewählte Spalte angezeigt werden?
        begin
          if bFirst then  //Ist diese Spalte die erste? 
          begin    //ja => Caption setzen
            if SQL_Names[i] = 'First_Event' then
              ListItem.Caption := FormatDateTime('dd.mm.yyyy  hh:mm:ss', qrMain.FieldByName(SQL_Names[i]).AsDateTime);
            else
              ListItem.Caption := qrMain.FieldByName(SQL_Names[i]).AsString;
            bFirst := False;
          end
          else  //Nein => SubItem hinzufügen
          begin
            if SQL_Names[i] = 'First_Event' then
              ListItem.SubItems.Add(qrMain.FieldByName(FormatDateTime('dd.mm.yyyy  hh:mm:ss', qrMain.FieldByName(SQL_Names[i]).AsDateTime));
            else
              ListItem.SubItems.Add(qrMain.FieldByName(SQL_Names[i]).AsString);
          end;
        end;
      end;
      gauge1.progress := gauge1.progress + 1;
    end;
    lvAnzeige.Items.EndUpdate;
    gauge1.progress := 0;
    gauge1.Visible:= false;
  finally
    dbMain.Connected:=False; //Verbindung trennen
    Screen.Cursor := Cursor;
  end;
end;
@celina: Ich habe den Code wiederum nicht getestet, ich habe keine Zeit... aber ich werde mir ihn in naher Zukunft vorknöpfen, aber theoretisch fügt dieser Code alle Spalten hinzu, gibt ihnen Überschriften und fügt Elemente ein, solange welche vorhanden sind.

[add]Ich kenne die TZQuery-Komponente ja nicht, aber probier mal den Code einzufügen, der zwischen großen Kommentarstrichen steht. Vielleicht hilft das mit den Items. Außerdem verstehe ich den Sinn der Zeile darunter nicht...wieso ist die drinnen?[/add]

celinaw 30. Apr 2004 04:33

Re: Listview Spalten zur Laufzeit?
 
Hi, Guten Morgen Alcaeus! :hi:

Werde ich mal ausprobieren. Melde mich wieder..


Gruß Celina

celinaw 30. Apr 2004 06:00

Re: Listview Spalten zur Laufzeit?
 
Hi

Diese Funktion
Zitat:

qrMain.FetchAll;
gibt es bei den Zeos Kompos wohl nicht. :gruebel:

Wofür ist die ?

Ich denke die Zeos Kompos werden etwas ähnliches unter einem anderen Namen haben :?:

Gruß Celina

alcaeus 30. Apr 2004 06:03

Re: Listview Spalten zur Laufzeit?
 
FetchAll müsste alle Datensätze in den lokalen Cache holen. Lass dir mal mit ShowMessage ein Meldungsfenster anzeigen, und zwar jedesmal wenn er ein Feld hinzufügen soll, also unter folgender Zeile im Quellcode:
Delphi-Quellcode:
if CheckListBox1.Checked[i] then  //Soll die gewählte Spalte angezeigt werden?
begin
Du fügst einfach
Delphi-Quellcode:
ShowMessage('i='+IntToStr(i));
ein, dadurch siehst du den Zähler, und du siehst, wieviel Elemente wirklich hinzugefügt werden.

celinaw 30. Apr 2004 06:26

Re: Listview Spalten zur Laufzeit?
 
Hi

Die Message ist i=0 :gruebel:
i=1
i=2

und wieder von vorn....

alcaeus 30. Apr 2004 09:42

Re: Listview Spalten zur Laufzeit?
 
Ja, die Ausgabe müsste stimmen, das heißt dass dir deine Werte eingefügt werden. Bist du sicher dass in der Datenbank etwas drinnensteht?

celinaw 30. Apr 2004 20:53

Re: Listview Spalten zur Laufzeit?
 
Hi

Klar bin ich mir sicher :mrgreen:

Ich denke das fast 90.000 Datensätze genügen sollten :gruebel:

Es funktioniert ja auch der Code den ich bissher verwende. Ist nur leider nicht möglich die Spalten aus zu wählen.

Gruß Celina


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 Uhr.
Seite 3 von 5     123 45      

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