in

DevWare GmbH

Blog- und Forum-Seite der Firma DevWare GmbH

Sebastian Uthoff

April 2008 - Posts

  • ListView - zum Editieren nutzen, ohne Datasource

    ListViews eignen sich hervorragend um schnell Listenansichten zu realisieren. Dabei möchte man manchmal auch das Databinding manuell machen. Allerdings ist dieser Weg sehr umständlich und man erzeugt dabei sehr viel Quellcode. Dazu kommt noch, das man auf einige Seiteneffekte achten muss, wenn man das Listview dennoch zum editieren und zum anfügen von Daten benutzen möchte. Aber von Anfang an - hier ein Beispiel aus einem Programm:

    Ein Listview an eine -wie auch immer geartete Liste zu hängen- ist einfach:

    IList<CorrelLocationItem> myCorrelLocationItems = ReservationItemServiceProxy.FindCorrelLocationItemsByItemID(myItem.ItemID);
    lvObjects.DataSource = myCorrelLocationItems;
    lvObjects.DataBind();

    Damit ist die Listview (lvObjects) schon mit einer IList von CorrelLocationItem 's gefüllt. Man sollte natürlich darauf achten, das dabei die Controlls im Listview richtig gebunden sind.

    Damit man nun neue CorrelLocationItem 's hinzufügen kann, muss das ItemInserting-Ereigniss benutzen. Dabei bekommt man die Controlls innerhalb des Ereignisses als zweiten Parameter übergeben. Mit dem Befehl "e.Item.FindControl(string)" (string ist der Name des Controlls, e das Objekt vom zweiten Parameter) lässt sich jedes Controll im InseringItem-Template finden und seine Informationen auslesen. Damit auch das InseringItemTemplate angeziegt wird, muss InsertItemPosition auf einen anderen Wert als none gesetzt werden. Das hat zur Folge das sämmtliche Informationen für ein neues CorrelLocationItem-Objekt aus den Controlls zusammengesucht werden muss, was sehr umständlich ist.

    Löschen verhält sich ähnlich. Im Ereigniss ItemDeleting kriegt den aktuellen Index der Spalte im zweiten Parameter, in der eigenschaft ItemIndex geliefert. Dann kann man über die ListView Eigenschaft Items die akutelle Spalte nach seinen Controlls durchsuchen.

    Editieren ist komplizierter. Man muss zwei Ereignisse behandeln. Das erste, das sich ItemEditing nennt und das eintritt, wenn der Benutzer durch das drücken auf den Edit-Button ein Post-Back auslößt. Und ein zweites, das sich ItemUpdating nennt und eintritt, wenn der Benutzer auf Update-drückt.
    Im ersten muss die ListView eigenschaft SelectedIndex und EditIndex mit dem aktuellen Index überschrieben werden. Dieser wird im Ereigniss, als zweiter Parameter in der Eigenschaft NewEditItem mitgeliefert. Um nun etweilige vorbelegungen innerhalb des EditItemTemplates vorzunehmen, muss man ersteinmal das Listview neu an die Datenquelle binden und dann auch noch die Controlls aus der ListView-Eigenschaft Items herrausfischen.
    Im zweiten Ereigniss muss man nun die ListView-Eigenschaften SelectedIndex und EditIndex wieder zurück auf -1 setzen, um das EditItemTemplate unsichtbar zu machen. Auch die Controlls muss man wieder umständlich aus den Items herraussuchen. Diesmal wird der Aktuelle Index über die Eigenschaft ItemIndex, im zweiten Parameter übergeben.

    Also alles in allem eine sehr umständliche Geschichte. Es lohnt sich eher Proxy-Klassen zu schaffen und diese mit einer DataSource an das Listviewzu hängen

Copyright (c) 2008 DevWare GmbH. All rights reserved.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems