Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#41

Re: Listview Spalten zur Laufzeit?

  Alt 1. Mai 2004, 00:20
Hi Celina
Wenn du sagst, dein Code funktioniert, sollte das eigentlich klappen:
Delphi-Quellcode:
Var
  i: Integer;
Begin
  // reset des ListView
  With lvAnzeige Do
  Begin
    Items.Clear;
    Columns.Clear;
    // Spalten aus der StringList als Caption der Columns
    For i := 0 To pred(SelectedFields.Count) Do
      Columns.Add.Caption := SelectedFields[i];
  End;

  With qrMain Do
  Begin
    SQL.Text :=
      'SELECT Order_Type' + #10 +
      ' ,Customer_Number' + #10 +
      ' ,Order_Number' + #10 +
      ' ,First_Event' + #10 +
      ' ,PrePrint' + #10 +
      ' ,Print' + #10 +
      ' ,BMSLogout' + #10 +
      'FROM table_ordertracking' + #10 +
      'WHERE Customer_Number Like :i_KNR' + #10 +
      'ORDER By Order_Number';
    // Parse Statement um Variablen zu erkennen
    Prepared := True;
    // Parameterzuweisung
    Parameters.ParamByName('i_KNR').Value := edKNR.Text + '%';
    // Ausführen
    Open;
    If Not Eof Then
      // wurde keine Spalte gewählt werden alle Spalten der Query als "markiert" eingetragen
      If SelectedFields.Count = 0 Then
        For i := 0 To pred(FieldCount) Do
          SelectedFields.Add(Fields[i].FieldName);

    While Not Eof Do
    Begin
      // neues ListItem
      With lvAnzeige.Items.Add Do
      Begin
        For i := 0 To pred(SelectedFields.Count) Do
          If i = 0 Then
            // erste Spalte als Caption
            Caption := FieldList.Values[SelectedFields[i]]
          Else
            // Spalte 2-X als Subitems
            SubItems.Add(FieldList.Values[SelectedFields[i]]);
      End;
      Next;
    End;
  End;
End;
Zutaten:
  • eine private Variable SelectedFields :TStrings
  • im OnCreate des Forms:
      SelectedFields := TstringList.Create;
  • im InClose:
    Delphi-Quellcode:
      If Assigned(SelectedFields ) Then
        FreeAndNil(SelectedFields);
  • vielleicht ein zweites Form, dass du modal zeigen lässt und in dem der User in einer CheckListBox die benötigten Spalten auswählen kann
    Delphi-Quellcode:
    Var
      i: Integer;
      dlgSelCols: TdlgSelCols;
    Begin
      // dlgSelCols = das Form mit der CheckListBox
      dlgSelCols := TdlgSelCols.Create(self);
      Try
        With dlgSelCols Do
        Begin
          If ShowModal = mrCancel Then Exit;
          // SL leeren
          SelectedFields.Clear;
          With CheckListBox1 Do
            // jede markierte Spalte an die SL hängen
            For i := 0 To pred(Count) Do
              If Checked[i] Then
                SelectedFields.Add(Items[i]);
        End;
      Finally
        If Assigned(dlgSelCols) Then
          FreeAndNil(dlgSelCols);
      End;
    End;

Da du die ZeosKompos verwendest, müsstest du den oberen Schnipsel etwas anpassen.
Ich hoffe mittlerweile weißt du wie man bei den Zeos Parameter verwenden kann.
Von solchen Statements kriege ich Ausschlag
  'T.Customer_Number like ''' + edknr.Text + '''"%" ' Nachtrag: Den oberen Schnipsel habe ich von deinem anderen Thread kopiert und angepasst.
Das SELECT Statement war in dem Fall auch nicht das Problem (Es sollte mit jedem SELECT funktionieren).

Edit2: 5 mio. Tippfehler
  Mit Zitat antworten Zitat