21. Mai 2009

Einen WindowsService installieren oder deinstallieren

installieren
installutil /name=myservicename myservice.exe


deinstallieren:
installutil /u /name=myservicename  myservice.exe

NullableDateTimePicker

Problem: Der DateTimePicker bietet keine einfache Lösung einen Null-Wert an ein DataBinding zu übermitteln.

Lösung: Erweiterung der DateTimePicker-Klasse um eine NullableValue-Property. Diese muss anstatt der Value-Property für das DataBinding verwendet werden.

  /// 
/// Erweitert den DateTimePicker um eine Nullable Property.
///

public class NullableDateTimePicker: DateTimePicker
{
///
/// Diese Property muss beim DataBinding anstatt der Property
/// Value verwendet werden.
///

public object NullableValue
{
// Nur wenn die Checkbox angehakt ist, den Wert des
// DateTimePicker zurückgeben, ansonsten null
get
{
if (Checked)
{
return Value;
}
else
{
return null;
}
}

// Der Wert des DateTime-Pickers darf nur gesetzt werden,
// wenn der übergebene Wert (value) nicht null ist.
// Ansonsten wird das aktuelle Datum gesetzt und
// die Checkbox auf nicht angehakt gesetzt.
set
{
if (value is DateTime)
{
Value = (DateTime) value;
Checked = true;
}
else
{
Value = DateTime.Now;
Checked = false;
}
}
}
}

13. Mai 2009

MaxIdle im Tomcat-Connection Pool

Einstellung für unlimited Connections im Pool unterscheiden sich in den Tomcat-Versionen:
maxIdle=0 bei Tomcat 4
maxIdle=-1 ab Tomcat 5

Anmerkung: maxIdle=0 würde ab Tomcat 5 das ConnectionPooling abschalten!

Changelists .NET Framework Service Packs

.NET Framework 3.5 Service Pack 1

.NET Framework 3.0 Service Pack 1

.NET Framework 2.0 Service Pack 1

12. Mai 2009

Toolbar/Menü-Button-Event und BindingSource - Problem

Problem: In einem Form werden Daten nicht persistiert, die über an eine BindingSource gebundenes Control editiert wurden, wenn über einen Toolbar- oder Menu-Button das Speichern ausgelöst wird.

Ursache: Toolbars oder Menüs wechseln den Focus nicht. Das ValidateEvent im Control wird deswegen nicht ausgelöst und kann seine Änderungen nicht an die BindingSource schicken. Der EndEdit-Aufruf auf der BindingSource ist dann wirkungslos.

Lösung: Bevor das Speichern über ein Event aus einem Toolbar- oder Menüpunkt ausgelöst wird, muss dort explizit der Fokus geholt werden über die Focus()-Methode. Danach sorgt ein Aufruf der EndEdit-Methode auf der BindingSource auch dafür, dass die eingebenen Daten in die Quelle (DataSource/DataTable) gelangen.