Mittwoch, 21. April 2010

Focus im GridView auf eine TextBox setzen

Einige Seiten schlagen Lösungen vor, die aber nicht funktionieren. Was funktioniert ist:
void gvList_RowCreated(object sender, GridViewRowEventArgs e)
{
   if (e.Row.RowIndex == gvList.EditIndex)
   {
       e.Row.FindControl("tbxStundenHeute").Focus();
   }
}

Donnerstag, 7. Januar 2010

Spalten einer Tabelle ordnen

Die Reihenfolge der Spalten einer DataTable lässt sich ganz einfach wie folgt ändern:
'-- Order columns
Dim nLast = DT.Columns.Count - 1  
MyDataTable.Columns("ID").SetOrdinal(nLast)
MyDataTable.Columns("Date").SetOrdinal(nLast)
MyDataTable.Columns("Name").SetOrdinal(nLast)
So werden die Spalten umsortiert, indem eine nach der anderen nach hinten gestellt wird.

Dienstag, 3. November 2009

Methode in VB als Obsolete markieren

Ich programmiere meistens in C#, seit einiger Zeit aber für bestimmte Auftraggeber in VB.net. Daher ein kleiner Tipp zur Umstellung. Aus C#:
[Obsolete("Bitte MyNewMethod verwenden!")]
Public MyMethod()
{
    ...
}
wird in VB:
<Obsolete("Bitte MyNewMethod verwenden!")> _
Public Sub MyMethod()
    ...
End Sub
Auf den Unterstrich wäre ich ohne nachzuschauen nie gekommen.

Montag, 2. November 2009

String-String-Liste sortieren

Häufig werden Listen mit einem String-Schlüssel und einem String-Wert benötigt, beispielsweise bei Auswahllisten der Wert und seine Übersetzung. Als ich diese Liste sortiert in einem DropDown ausgeben wollte, war ich überrascht, dass dies nicht so trivial wie erwartet ist. Auch die Google-Suche hat nicht sofort eine einfache Lösung ergeben. Für alle mit dem gleichen Problem: die einfachste Lösung ist die Verwendung eines Dictionary(Of String, String), da dieses IEnumerable implementiert und somit Linq-Abfragen ermöglicht. Somit sortieren wir das Dictionary wie folgt (hier in Visual Basic Syntax):
Dim OrderedOut = New Dictionary(Of String, String)
For Each Entry In From Ent In MyDictionary Order By Ent.Value
    OrderedOut.Add(Entry.Key, Entry.Value)
Next
Anmerkung: in VB ist dies etwas kürzer als in C#, da hier die Typen automatisch umgewandelt werden. Außerdem für alle C#er: Dictionary(Of String, String) wäre in C# Dictionary<string, string>

Donnerstag, 29. Oktober 2009

Tabellenspalte in Entity-Framework hinzufügen: Nullable oder Standardwert?

Häufig muss einer Tabelle, die bereits Werte enthält, eine Spalte hinzugefügt werden. Wenn diese weder Null-Werte zulässt, noch einen Standardwert enthält, bekommen wir einen Fehler und die Spalte wird nicht erstellt.

Nun stellt sich die Frage, ob Null-zulassen oder ein Standardwert (z.B. '' bei Char oder -1 bei Zahlen) sinnvoller sind.

Entscheidet man sich für Nullable, dann wird der Typ der Property vom Entity-Framework auf Nullable gesetzt, also in C#:

int?

Das ist sehr nachteilig, denn nun müssen überall die Variablen, die Werte eintragen oder übernehmen sollen, alle ebenfalls als Nullable angelegt oder entsprechend gecastet werden.

int i;
i=MyProperty;

führt beispielsweise zu einer Ausnahme.

Daher: immer Defaultwerte vorziehen!

Mittwoch, 15. Juli 2009

DataRow serialisieren

Kürzlich hatte ich das Problem, eine DataRow im ViewState zu behalten. Es warf eine Ausnahme, da die DataRow nicht serialisierbar ist.

Ich fand eine einfache Lösung: da die DataTable serialisierbar ist, speichere ich diese. Das ganze aber in einer Methode gekapselt, so dass ich direkt auf die DataRow zugreifen kann:

private DataRow CurrentRow
{
    get { return ((DataTable)ViewState["CurrentRow"]).Rows[0]; }
    set { ViewState["CurrentRow"] = value.Table; }
}

Freitag, 5. Juni 2009

Transparente Favicons

Favicons sind die Symbole, die oben bei den Registerkarten und vor der Adresszeile in modernen Browsern angezeigt werden. Mitlerweile sind hier die Hintergründe nicht mehr Weiss, sondern verschiedene Blau- und Grautöne, teilweise mit Verläufen. Deswegen sehen nicht quadratische Favicons nur noch gut aus, wenn sie transparent angelegt werden.

Die einfachste Vorgehensweise sieht so aus:

  1. 16x16 großes Bild in Photoshop erzeugen (mit Transparenz)
  2. Darin eine markante Farbe als Transparenz festlegen
  3. Speichern als PNG
  4. Öffnen mit IrfanView
  5. Speichern als ... ICO (dort "Show Options Dialog" und bei ICO "Save Transparent Color")
  6. Im HTML als <link rel="shortcut icon" href="/favicon.ico"> einbinden

Es gibt auch Online-Tools, die PNG oder GIF Dateien in Favicons konvertieren, aber ich habe keines gefunden, bei dem die Transparenz dann auch in Firefox und Internet Explorer funktioniert hätte.

Ich denke, der Aufwand lohnt sich, denn ein nicht-transparentes Favicon kann den ersten Eindruck einer Website deutlich verschlechtern.