Einzelnen Beitrag anzeigen

Benutzerbild von alcaeus
alcaeus

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

Re: Listview Spalten zur Laufzeit?

  Alt 30. Apr 2004, 05:12
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_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 //Nein => SubItem hinzufügen
          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;
@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]
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat