![]() |
Re: Listview Spalten zur Laufzeit?
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ..........
|
Re: Listview Spalten zur Laufzeit?
hallo celina folgender quelltext, liefert zu mindestens erstmal die spaltennamen
Delphi-Quellcode:
einfach ein button und ein listview auf die form, versuche erstmal das listview zu verstehen.
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. so das wars für heute , bis morgen raik |
Re: Listview Spalten zur Laufzeit?
Ja, das funktioniert :mrgreen:
|
Re: Listview Spalten zur Laufzeit?
Delphi-Quellcode:
@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.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; [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] |
Re: Listview Spalten zur Laufzeit?
Hi, Guten Morgen Alcaeus! :hi:
Werde ich mal ausprobieren. Melde mich wieder.. Gruß Celina |
Re: Listview Spalten zur Laufzeit?
Hi
Diese Funktion Zitat:
Wofür ist die ? Ich denke die Zeos Kompos werden etwas ähnliches unter einem anderen Namen haben :?: Gruß Celina |
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:
Du fügst einfach
if CheckListBox1.Checked[i] then //Soll die gewählte Spalte angezeigt werden?
begin
Delphi-Quellcode:
ein, dadurch siehst du den Zähler, und du siehst, wieviel Elemente wirklich hinzugefügt werden.
ShowMessage('i='+IntToStr(i));
|
Re: Listview Spalten zur Laufzeit?
Hi
Die Message ist i=0 :gruebel: i=1 i=2 und wieder von vorn.... |
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?
|
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 06:45 Uhr. |
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-2025 by Thomas Breitkreuz