Archiv der Kategorie Tipps und Tricks
Wenn es watschelt und quakt: Ducktyping in C#
"When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck."
Oder auf gut Deutsch: "Wenn ich einen Vogel sehe, der wie eine Ente watschelt und wie eine Ente quakt, dann ist dieser Vogel für mich eine Ente." Das selbe Prinzip das James Whitcomb Riley auf die Enten angewandt hat, kann man auch in der Software-Entwicklung anwenden.
Zwei Fragen stellen sich dabei zwangsläufig. Ist das wirklich eine gute Idee? Und wenn ja, wie geht das? [...]
Tags: .NET, C#, Cast, Ducktyping, dynamic, Interface, Keyword, Konvertierung, Vererbung
Sage mir wer du bist: Enum-Werte mit einer Beschriftung versehen
Oft ist es so, dass die Werte einer Enumeration irgendwie ausgegeben werden sollen. Dazu reicht prinzipell ein einfaches ToString(). Was aber, wenn dieser einfache Weg nicht reicht und man stattdessen einen wirklich lesbaren Wert ausgeben möchte?
Hier kommt einem das DescriptionAttribute aus dem System.ComponentModel-Namespace zur Hilfe. Damit kann man jedem Wert eines Enums eine aussagekräftige Beschreibung zuweisen: [...]
Tags: .NET, Beschriftung, C#, DescriptionAttribute, enum
RIA Services: Request-Timeout anpassen
Die WCF RIA-Services stellen durch einen Standart-Timeout sicher, dass alle Anfragen innerhalb einer vertretbaren Zeit abgeschlossen werden. Wenn man bei einer solchen Abfrage den Mund nicht voll bekommt und zu viele Daten auf einen Streich vom Server lädt kann es zu folgender Fehlermeldung kommen:
The HTTP request to 'http://deinservice' has exceeded the allotted timeout. The time allotted to this operation may have been a portion of a longer timeout.
Der ideale Weg diese Fehlermeldung zu vermeiden liegt darin, zu prüfen ob es tatsächlich nötig ist so viele Daten in einer einzelnen Abfrage zu laden. In der Regel ist das ohne Probleme möglich. So kann man die Abfrage in mehrere kleine Portionen aufteilen oder die zu ladenden Objekte aufsplitten und so nur die Daten laden, die man tatsächlich benötigt.
Es mag jedoch Fälle geben in denen eine solche Lösung nicht tragbar ist und der Timeout verändert werden muss. Clientseitig kann der Timeout auf dem Binding des Endpoints des DomainServices angepasst werden. Klar soweit? Wie so oft sagen in diesem Fall ein paar Zeilen code mehr als tausend Worte. [...]
Tags: .NET, Binding, C#, DomainClient, DomainContext, Endpoint, RIA Services, Timout, WCF
DialogResult von ChildWindow aus ViewModel setzen
Wer in Silverlight dem Benutzer eine Message-Box präsentieren möchte, kommt um die ChildWindow-Klasse nicht herum. Ein solches ChildWindow wird durch Setzen der DialogResult-Property auf entweder true oder false wieder geschlossen. Prinzipiell ist das kein Problem, man könnte die Property ja bei im Klick-EventHandler der Schaltfläche setzen, die das Fenster schließt.
Die Message-Box mittels EventHandler im Code-Behind zu schließen ist allerdings unschön, wenn die Message-Box ihr eigenes ViewModel hat. Derlei Aktionen fallen nämlich für gewöhnlich in dessen Zuständigkeitsbereich. Dem ViewModel einfach eine entsprechende Property zu verpassen und die DialogResult-Property des ChildWindows daran zu binden scheitert jedoch daran, dass die DialogResult-Property keine Dependency-Property ist und sich demzufolge nicht binden lässt. Mit ein wenig Code kann man hier jedoch Abhilfe schaffen. [...]
Tags: .NET, AttachedProperty, C#, ChildWindow, DependencyProperty, DialogResult, MVVM, Silverlight, View, ViewModel
Überschreiben virtueller Methoden verhindern
Was tut der Entwickler einer Komponente, der verhindern möchte, dass andere von seiner Klasse ableiten? Richtig. Er verwendet das sealed-Schlüsselwort:
public sealed class Kobold
{
[...]
}
Aber was, wenn der Entwickler das weitere Überschreiben einer virtuellen Methode in einer abgeleiteten Klasse verhindern möchte? Auch hier hilft das sealed-Schlüsselwort: Diesmal allerdings nicht auf Klassenebene, sondern bei der zu schützenden Methode.
public sealed override void SagHallo()
{
[...]
}
Das erneute Überschreiben dieser Methode in einer abgeleiteten Klasse wird jetzt zu einem Compilerfehler führen.
Tags: .NET, C#, Keyword, override, Schlüsselwort, sealed, Vererbung, virtual
LookUp-Feld per Code ändern
Möchte man einem Lookup-Feld einen bestimmten Wert zuweisen so ist es mitnichten damit getan dem Feld die ID oder gar die UniqueID des verlinkten ListenItems zu übergeben. Das liegt daran, dass SharePoint die Werte intern als Kombination aus ID des ListenItems und anzuzeigendem Wert speichert. Als Beispiel diene uns hier eine Liste mit Kategorien und eine Liste mit Bäumen, die jeweils einer Kategorie zugeordnet sind: [...]
Tags: LookUp-Field, SharePoint 2007, SPFieldLookupValue, SPListItem
ListItems eines bestimmten ContentTypes auslesen
Aus einer Liste die Items eines bestimmten ContenTypes auszulesen klingt zunächst nach einer trivialen Aufgabe. Sucht man lediglich anhand des Namens eines ContentTypes ist es das auch. In diesem Fall reichen für eine entspreches CAML-Abfrage ein paar wenige Zeilen Code:
<where>
<eq>
<fieldref Name="ContentType" />
<value Type="Text">Contact</value>
</eq>
</where>
Will man jedoch nicht nur nach allen ContentTypes eines bestimmten Typs, sondern auch nach den davon abgeleiteten ContentTypes suchen, stößt diese Methode schnell an ihre Grenzen. [...]
Tags: ContentType, SharePoint 2007, SPContentTypeId, SPList, SPListItem, SPQuery
ASCX: Designer funktioniert nicht
VisualStudio ist ein tolles Tool wenn man ASP.NET UserControls erstellt. Leider hat der zugehörige Designer einen Fehler, der einem das Leben dabei manchmal unnötig schwer macht. Dieser Fehler kommt immer dann zum Tragen, wenn das Markup des UserControls mit einem <style>- einem <link>- oder einem <meta>-Element beginnt und darauf ein Web-Steuerelement mit dem Inhalt des UserControls folgt. Bei einem Versuch dieses Steuerelement im Designer zu bearbeiten ist alles was man sieht eine leere Seite. [...]
Tags: ascx, UserControl, Visual Studio 2008, VisualStudio-Designer
Verwendung des DateTime-Picker-Steuerelements
SharePoint stellt zum Bearbeiten von Datums- und Zeitwerten ein schönes Steuerelement zur Verfügung, das DateTimeControl. Dieses Steuerelement kann man auch in eigenen UserControls oder Webparts verwenden. Das Steuer-element befindet sich im Namespace Microsoft.SharePoint.WebControls in der Assembly Microsoft.SharePoint.dll. Dieser Eintrag erläutert welche Schritte beim Einsatz dieses Steuerelements nötig sind, und was man als Entwickler dabei beachten muss.
Grundsätzlich gibt es zwei Möglichkeiten Steuerelemente in WebParts oder UserControls einzubinden. Zum einen kann man das gewünschte Steuerelement im Quellcode eines WepParts oder UserControls instantiieren, zum anderen kann man es direkt im Markup eines UserControls oder einer ASPX-Seite verwenden. In diesem Artikel werde ich beide Varianten kurz vorstellen und zusätzlich auf eventuelle Hürden und Fallstricke beim Einsatz des Steuerelements hinweisen. [...]






