Custom (XAML-)Controls in Datawindows nutzen

Eines der interessantesten Features in Powerbuilder .NET ist die Verwendung von WPF (XAML) zur Definition der Benutzeroberfläche. Dabei ist es nicht nur möglich Controls auf dem Fenster mit XAML zu beschreiben, sondern auch innerhalb von Datawindows (Custom Control). In dieser kleinen Beispielanwendung bette ich ein 5-Sterne-Rating-XAML-Control zur Bewertung von Filmen in ein Datawindow ein und “binde” es an die enthaltenen Daten.

Überblick

Der Source und das Tool können hier heruntergeladen werden. Das Projekt besteht aus einem Fenster, einem Datawindow, ein paar Ressourcen und einem Assembly (RatingControlSample.dll). Das Assembly enthält  das Rating-Control, dass wir im Datawindow verwenden wollen (gefunden auf Nick Andersson’s Blog). Um mir die Arbeit ein wenig zu vereinfachen, habe ich mir ein External-Datawindow gebaut, das meine Filme enthält. Natürlich könnte hier auch eine Datenbank oder ein SOAP-Service als Datenquelle genutzt werden.

Vorgehensweise

Das Erstellen des Projekts, des Fensters und des Datawindows ist wie aus Powerbuilder Classic bekannt.

1. Das Assemly aufnehmen

Dafür sucht ihr im Navigator(links) den Bereich “References” und wählt “Add Reference”. Anschließend müsst ihr per “Browse” das gewünschte Assembly auswählen.

2. Das Custom Control hinzufügen

Wenn ihr im Datawindow-Painter seid, gibt es in eurer Toolbox einen Eintrag “Custom Control”. Zieht das Control auf das Datawindow und es öffnet sich ein neuer Dialog. Das Wichtige hier ist der XAML-Code, der eingefügt werden muss.

<RatingControl xmlns="clr-namespace:RatingControlSample;assembly=RatingControlSample" Width="87" Height="15" />

Die restlichen Felder kann man erstmal leer lassen.

3. Das Control mit den Datawindow verbinden

Um das Datawindow mit den Daten zu binden, sind folgende Eigenschaften des Controls wichtig:

  • Table und Column: Dies ist die Tabelle und die Spalte die in das Control übergeben werden soll. Im Fall eines External-Datawindows muss nur Column gefüllt werden. In diesem Fall wird Column mit “rating” gefüllt.
  • Content: Hier wird der Name der Property angegeben, in die der Wert aus “Column” geschrieben werden soll. Selbstverständlich müssen die Datentypen kompatibel sein. Für das Beispiel sollte hier “RatingValue” stehen, da die entsprechende Eigenschaft zum Einblenden der Sterne so heißt. Die Eigenschaft kann Werte von 1 bis 5 aufnehmen, je nachdem wieviele Sterne vergeben werden.
  • Keyclause: Hier wird die Bedingung angegeben, die zum Laden der Tabelle genutzt werden soll. Ich brauche dies in meinem Beispiel eigentlich nicht, da ich auf ein External-Datawindow zurückgreife.
  • XAML Syntax: Hier kann die in Schritt 2 eingegebene Syntax bearbeitet werden.

Wenn ihr das Datawindow verwendet, wird das Control entsprechend den Daten aus dem DW geladen. Wenn der Anwender die Anzahl der Sterne verändert, wird der entsprechende Wert in das Datawindow zurückgeschrieben.

Viel Spaß beim Ausprobieren :)

Links:

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>