AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listview Spalten zur Laufzeit?

Ein Thema von celinaw · begonnen am 29. Apr 2004 · letzter Beitrag vom 1. Mai 2004
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#1

Listview Spalten zur Laufzeit?

  Alt 29. Apr 2004, 00:10
Hi

Hab mal wieder ein Problem!
Mit untem stehendem Code füge ich das Abfrage Ergebnis in eine Listview ein.
Wie kann ich es jetzt machen, das ich mit Hilfe von Checkboxen auswählen kann welche Spalten aus der SQL Abfrage in das Listview eingefügt werden?
Nach möglichkeit möchte ich die Spaltenüberschrift aber weiterhin selber angeben und nicht aus der SQL übernehmen. Z.B. steht in der SQL DB die Spalte "Customer_Number"! Ich möchte aber das Sie in der Listview "Kunden Nr" heißt!

Ist das überhaupt machbar? Also im Moment habe ich ja die Spaltenüberschriften fest vorgegeben


Delphi-Quellcode:
procedure TForm1.bSucheClick(Sender: TObject);
var
   ListItem : TlistItem;
begin
  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;
     qrMain.FieldByName('Order_Type').AsString;
     gauge1.Visible:= True;
     gauge1.maxvalue := qrMain.recordcount;
     lvAnzeige.Items.BeginUpdate;
     while not qrMain.Eof do
  begin

    ListItem := lvAnzeige.Items.Add;
    ListItem.Caption:=qrMain.FieldByName('Order_Type').AsString;
    ListItem.SubItems.Add(qrMain.FieldByName('Customer_Number').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Order_Number').AsString);
    ListItem.SubItems.Add(FormatDateTime('dd.mm.yyyy hh:mm:ss', qrMain.FieldByName('First_Event').AsDateTime));
    ListItem.SubItems.Add(qrMain.FieldByName('DPrint').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('PrePrint').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Print').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('BMSLogout').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('Count_DPrint').AsString);
    ListItem.SubItems.Add(qrMain.FieldByName('CeWe_Batch').AsString);
    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;

Gruß Celina
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Listview Spalten zur Laufzeit?

  Alt 29. Apr 2004, 04:25
Delphi-Quellcode:
const SQL_Names: array [0..Spalten] of String = (<Spaltenname1>, <Spaltenname1>, ...);
const 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 := False;
  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;
    qrMain.FieldByName('Order_Type').AsString;
    gauge1.Visible:= True;
    gauge1.maxvalue := qrMain.recordcount;
    lvAnzeige.Items.BeginUpdate;
    lv_Anzeige.Columns.Clear;
    for i := 0 to Spalten-1 do
    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;
      ListItem.Caption:=qrMain.FieldByName('Order_Type').AsString;
      for i := 0 to Spalten-1 do
      begin
        if CheckListBox1.Checked[i] then
        begin
          if bFirst then
          begin
            if SQL_Names[i] = 'First_Eventthen
              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
          begin
            if SQL_Names[i] = 'First_Eventthen
              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;
Also, das Programm braucht noch eine CheckListBox, in der drinnensteht, welche Spalten angezeigt werden sollen. Alternativ kannst du auch ein Array verwenden. Vor dem Einfügen von Daten in die Listview werden die Spalten nochmals neu eingetragen. Anschließend geht die Schleife alle Spalten durch, und falls eine Spalte angezeigt werden soll, wird der Text hinzugefügt. Die Unterscheidung mit bFirst ist hoffentlich offensichtlich, da das erste Element mit Caption, die nachfolgenden aber über SubItems angesprochen werden. Ich hoffe der Code funzt, ich habe ihn nicht getestet.
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#3

Re: Listview Spalten zur Laufzeit?

  Alt 29. Apr 2004, 07:06
Hi Alcaeus

Super !!

Du bist ein Schatz! Danke das du dir so viel mühe gemacht hast!
Ich werde mal versuchen nachzuvollziehen was du da gemacht hast, und den Code dann testen.

Vielen Vielen Dank!

Melde mich wieder...

Liebe Grüße Celina
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#4

Re: Listview Spalten zur Laufzeit?

  Alt 29. Apr 2004, 23:02
Hi...

Kann sich mal einer ansehen was hier nicht stimmt

Alcaeus versucht mir zu helfen eine Listview mit den Felder zu füllen, die in der Checklistbox
gewählt sind.




Delphi-Quellcode:
//###########################################################################

const Spalten=3;

const SQL_Names: array [0..Spalten-1] of String = ('Order_Type', 'Order_Number', 'Customer_Number');
const List_Names: array [0..Spalten-1] of String = ('Type', 'Auftrag', 'Kunde');


procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  Memo1.Lines.Clear;
  for i := 0 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 := false;
  Screen.Cursor := crHourGlass;
  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.Customer_Number;';

    qrMain.Open;
    qrMain.FieldByName('Order_Type').AsString;
    gauge1.Visible:= True;
    gauge1.maxvalue := qrMain.recordcount;
    lvAnzeige.Items.BeginUpdate;
    lvAnzeige.Columns.Clear;
    for i := 0 to Spalten-1 do
    begin
      if CheckListBox1.Checked[i] then
        lvAnzeige.Columns.Add.Caption := List_Names[i];
    end;
    while not qrMain.Eof do
    begin
      ListItem := lvAnzeige.Items.Add;
      ListItem.Caption:=qrMain.FieldByName('Order_Type').AsString;
      for i := 0 to Spalten-1 do
      begin
        if CheckListBox1.Checked[i] then
        begin
          if bFirst then
          begin
             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;

Gruß Celina
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#5

Re: Listview Spalten zur Laufzeit?

  Alt 29. Apr 2004, 23:50
Hi Alcaeus

Irgendwas ist noch falsch

Das Programm läuft zwar, aber es wird nichts in die Listview eingetragen. In der CheckListBox hab ich alle 3 Möglichkeiten ausgewählt. In der TlistView werden aber nur zwei Spaltenüberschriften angezeigt
Daten kommen leider gar keine. Irgendwo hat sich da ein Fehler ......


Gruß Celina
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#6

Re: Listview Spalten zur Laufzeit?

  Alt 30. Apr 2004, 00:04
hallo celina,

nirgendwo wird bfirst gestetzt, der kann keine daten reinschreiben, da bfirst := false ist.

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#7

Re: Listview Spalten zur Laufzeit?

  Alt 30. Apr 2004, 00:08
Hi Raik

Bfirst:= true;

Ich denke das muss so ausehen oder

Delphi-Quellcode:
  if CheckListBox1.Checked[i] then
        begin
          if bFirst = true then
          begin
             ListItem.SubItems.Add(qrMain.FieldByName(SQL_Names[i]).AsString);
Gruß Celina
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#8

Re: Listview Spalten zur Laufzeit?

  Alt 30. Apr 2004, 00:11
nur wenn bfirst = true ist schreibt er die daten darein.

du hast aber bfirst oben auf false gesetzt, und nie wieder geändert, frage was macht bfirst?

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#9

Re: Listview Spalten zur Laufzeit?

  Alt 30. Apr 2004, 00:14


Zitat:
Die Unterscheidung mit bFirst ist hoffentlich offensichtlich, da das erste Element mit Caption, die nachfolgenden aber über SubItems angesprochen werden. Ich hoffe der Code funzt, ich habe ihn nicht getestet.
Das hat Alcaeus dazu geschrieben
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#10

Re: Listview Spalten zur Laufzeit?

  Alt 30. Apr 2004, 00:20
schreibe mal zum test bfirst:= true vor die abfrageif bfirst then
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 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