AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Bug in der List-View?

Ein Thema von MathiasSimmack · begonnen am 22. Feb 2004
Antwort Antwort
MathiasSimmack
(Gast)

n/a Beiträge
 
#1

Bug in der List-View?

  Alt 22. Feb 2004, 18:52
Bleiben wir doch gleich beim Thema: "Was ist hier los?" Basierend auf dem Programm aus diesem Beitrag wollte ich die List-View mit einer Sortierung ausstatten. Lässt sich ja recht fix nachvollziehen:
Delphi-Quellcode:
type
  TMainForm = class(System.Windows.Forms.Form)
  { ... }
  private
    type
      TListViewItemSorter = class(TInterfacedObject, IComparer)
      private
        FColumn: Integer;
        FDescending: Boolean;
        procedure SetColumn(Value: Integer);
      public
        function Compare(x: &Object; y: &Object): Integer;
        property Column: Integer read FColumn write SetColumn;
      end;
  private
    FSorter: TMainForm.TListViewItemSorter;

{ ... }


implementation

function TMainForm.TListViewItemSorter.Compare(x: &Object; y: &Object): Integer;
begin
  Result := System.String.Compare(ListViewItem(x).SubItems[FColumn].Text,
    ListViewItem(y).SubItems[FColumn].Text);

  if FDescending then
    Result := -Result;
end;

procedure TMainForm.TListViewItemSorter.SetColumn(Value: Integer);
begin
  if FColumn = Value then
    FDescending := not FDescending
  else
  begin
    FDescending := False;
    FColumn := Value;
  end;
end;
Im "Create"-Construktor der Form muss dann nach der "TODO:"-Aufforderung von Borland dieser IComparer erzeugt und an die List-View übergeben werden:
Delphi-Quellcode:
FSorter := TMainForm.TListViewItemSorter.Create;
lv.ListViewItemSorter := FSorter;
Und dann fehlt eigentlich nur noch der Spaltenklick:
Delphi-Quellcode:
procedure TMainForm.lv_ColumnClick(sender: System.Object;
  e: System.Windows.Forms.ColumnClickEventArgs);
begin
  FSorter.SetColumn(e.Column);
  lv.Sort;
end;
So weit, so gut ... Aber wenn ich jetzt die Reload-Funktion (4. Button in der Toolbar) aufrufe, dann fehlen plötzlich Einträge, usw. Ich dachte zuerst an ein Problem mit der Registry. Aber ich habe den Code mal deaktiviert und in der "LoadRegKeys"-Prozedur einfach Fake-Items erzeugen lassen:
Delphi-Quellcode:
  for i := 1 to 100 do
  begin
    lv.Items.Add(Convert.ToString(i) + '. Eintrag');
    for j := 1 to 4 do
    begin
      lv.Items[lv.Items.Count-1].SubItems.Add(
        Convert.ToString(j) + '. Untereintrag'
      );
    end;
  end;
Das gleiche Ergebnis. Die Sortierung funktioniert zwar wunderbar, aber sobald man die Items neu lädt, werden einige nicht angezeigt. Meist sind das die SubItems. Was ist die Ursache?

btw: Diese Sortiergeschichte stammt aus der Borland-Demo "CultureInfo". So gut bin ich mit .NET dann doch noch nicht, dass ich solche Sachen mal eben so nebenbei schreibe.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:06 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