Blog Home  Home Feed your aggregator (RSS 2.0)  
artiso Blog - Saturday, April 28, 2007
Neues rund um's Thema .Net
 
 Saturday, April 28, 2007

 Wie man mit .net (VB2005) auf das Active Directory zugreift und dort Benutzer ausliest und verwaltet zeigt, der Blog-Beitrag von Armin Stockner.

Link to Armin Stockner : Active Directory with VB2005

Saturday, April 28, 2007 9:16:53 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

 Lars Keller verweist in seinem Blog-Eintrag auf eine Seite, auf der man verschiedene Poster zu Entwicklerthemen rund um VSTS, WF, ASP.Net und mehr findet. Die Poster können kostenlos als PDF heruntergeladen werden. Als registrierter Benutzer kann man auch auf hochaufgelöste JPEGs und auf Beta-Posters zugreifen. 

Link to Lars Keller ...inspired by .NET - Interessante Entwicklerposter: VSTS, WF, ASP.NET,..

Saturday, April 28, 2007 9:10:55 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

 Vor allem wenn man mit Services programmiert, hat man oft die Anforderung, dass beim Debuggen mehrere Projekte innerhalb der Solution gestartet werden müssen, z.B. ein Service und ein entsprechender Client. Der manuelle Weg war hier, dass man den Service als Startup-Projekt eingertragen hat, das debuggen startet und dann auf den Client im Solution Explorer mit der rechten Maustaste klickt und dann hier Debug / Start new Instance auswählt.


Es gibt aber auch noch eine elegantere Möglichkeit. Auf der Eigenschaftsseite der Solution (rechte Maustaste / Properties) kann man unter Startup Project auch die Option Multiple startup projects wählen. Hier kann man nun bei mehreren Projekten die Action auf Start bzw. Start without debugging einstellen. Sogar die Startreihenfolge der einzlnen Projekte lässt sich definieren. Damit starten nun die eingestellten Anwendungen auf einmal.

Saturday, April 28, 2007 8:32:27 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    |   | 
 Wednesday, April 11, 2007

Will man eine Liste nach XML serialisieren, die über ein Interface definiert ist, dann funktioniert das nicht. Es bleibt hier wohl nur die Möglichkeit, einen eigenen Serialisierer zu schreiben. In meinem Fall konnte ich das umgehen, indem ich auf das Interface verzichtet habe. Sollte jemand hier eine gute Idee haben, dann wäre ich für ein kurzes Feedback dankbar um das zukünftig zu berücksichtigen. Im Moment heißt das für mich, dass beim Serialisieren Interfaces tabu sind.

Ein Beispiel für eine nicht serialisierbare Liste ist z.B.

List<IMyInterface>

Wednesday, April 11, 2007 5:50:22 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Bei der Dotnet Usergroup Bremen wurde das Thema in einem kleinen Artikel ausführlich diskutiert.

Link to DOTnet Usergroup Bremen

Danke an Chris für den Link

Wednesday, April 11, 2007 10:11:25 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Tuesday, April 10, 2007

Eine umfangreiche Sammlung von Videos für die Entwicklung mit ASP.Net finden sich unter dem unten stehenden Link. Dabei wird ein weites Themenfeld abgedeckt. Vom Umstieg von ASP.Net 1.1 auf ASP.Net 2.0, Einstieg in ASP.Net 2.0, ASP.Net AJAX und auch zuküftige Themen wie LINQ, BLINQ etc.

Link to ASP.NET-Videos für jeden Entwickler

Tuesday, April 10, 2007 9:18:30 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
Tuesday, April 10, 2007 9:08:10 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Will man die Kalenderwoche zu einem Datum herausfinden, dann kann man die Funktion GetWeekOfYear nutzen.

CalendarRow.Week = Application.CurrentCulture.Calendar.GetWeekOfYear(CurrentDate, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

Diese Funktion hat allerdings einen kleinen Bug. So wird beispielsweise für den 31.12.2007 KW 53 zurückgegeben. Der darauffolgende Tag, ein Dienstag, ist dann allerdings in KW 1. Eigentlich müssten die Tage einer Woche aber immer in der selben KW sein. Abhilfe schafft hier eine kleine Korrektur. Wir haben ja eingestellt, dass unsere Woche am Montag beginnen soll (DayOfWeek.Monday) und dass die Woche immer dann als KW 1 betrachtet werden soll, wenn wenigstens 4 Tage davon im neuen Jahr liegen (System.Globalization.CalendarWeekRule.FirstFourDayWeek). Der Trick ist nun, dass man einfach immer 3 Tage hinzuzählt, wenn das gesuchte Datum zwischen Montag und Mittwoch liegt. Damit wird aus dem Montag Donnerstag, aus Dienstag der Freitag und aus dem Mittwoch ein Samstag. Da der Donnerstag der Tag ist, von dem abhängt, ob die Woche im neuen oder im alten Jahr liegt, haben wir Montag bis Mittwoch einfach nach hinten geschoben, so dass diese auf jeden Fall im neuen Jahr liegen und damit auch korrekterweise die KW 1 ergeben.

CalendarRow.Week = Application.CurrentCulture.Calendar.GetWeekOfYear(CurrentDate.DayOfWeek >= DayOfWeek.Monday && CurrentDate.DayOfWeek <= DayOfWeek.Wednesday?CurrentDate.Add(new TimeSpan(3,0,0,0)):CurrentDate, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

Tuesday, April 10, 2007 2:11:59 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Monday, April 02, 2007

Microsoft hat DevBiz, Hersteller von TeamPlain übernommen und bietet das Tool nun kostenlos zum Download. TeamPlain ist ein Web-Frontend für den Team Foundation Server. Über das Tool können die meisten Funktionen des Team Foundation Servers über ein einfaches Web-Interface genutzt werden.

Link to Microsoft's Acquisition of devBiz Promises Improved Application Lifecycle Management for Development Organizations: Cross-browser Web access to Microsoft Visual Studio Team System enables greater participation, streamlined collaboration.

TeamPlain kostenloser Download

Monday, April 02, 2007 7:57:05 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Mit diesem kleinen Plugin kann man Code-Ausschnitte direkt aus VS mit dem Windows Live Writer bloggen. Das Plugin übernimmt dabei die komplette Formatierung. Die Farbcodierung von VS bleibt dabei erhalten. 

Link to BlogMyCode VS2005 plugin

Monday, April 02, 2007 6:52:34 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Thursday, March 22, 2007

Ralf Westphal war am 20.03 in Ulm. Von 10:00 bis 17:00 konnten ihn in einer Kaffeehaus-Konsultation Entwickler mit Fragen löchern. Das Angebot wurde rege angenommen.

Sogar die regionale Presse hat über das Ereignis berichtet.

Danach hielt Ralf im Rahmen des Treffens der .net Developer-Group Ulm einen Vortrag zur Komponentenorientierung in der Software-Entwicklung.

Thursday, March 22, 2007 6:43:21 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Wednesday, March 14, 2007

In VS 2005 gibt es eine Vielzahl von nützlichen und hilfreichen Tastenkombinationen, mit denen sich das Arbeiten beschleunigen lässt. Aber wer kennt die schon alle auswendig? Hier gibt es ein Poster, auf dem diese abgebildet sind. 

Visual C# 2005 Keyboard Shortcut Reference Poster

Visual Basic 2005 Keyboard Shortcut Reference Poster

Visual C++ 2005 Keyboard Shortcut Reference Poster

Außerdem gibt es hier einen Code-Snipsel, mit dem man sich die Tastaturkombinationen auch ausgeben lassen kann.

Die Hände auf der Tastatur behalten

Wednesday, March 14, 2007 8:09:21 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    |   | 
 Tuesday, March 06, 2007

George Shepherd's Windows Forms FAQ

George Shepherd hat eine Vielzahl von wirklich guten Tipps & Tricks zur Windows- und Web-Programmierung in zwei FAQ-Listen zusammengetragen. Wirklich ein Quell von Anregungen, Problemlösern und Tipps & Tricks. Nicht nur zum Nachschlagen, sondern auch mal zum durchlesen empfohlen. 

Link zu Windows Forms FAQ

Link zu ASP.NET FAQ

Tuesday, March 06, 2007 2:08:15 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Thursday, March 01, 2007

Möchte man die Process Guidance des Team Foundation Server in Papierform verfügbar machen, kann folgendes Tool sehr hilfreich sein. Damit kann die Process Guidance als ein einzelnes HTML-Dokument konvertiert werden.

http://staff.southworks.net/blogs/mariano/archive/2006/01/28/206.aspx  

Thursday, March 01, 2007 10:46:58 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    |   | 
 Saturday, February 24, 2007

Um den Inhalt einer DataRow in eine andere DataRow zu kopieren kann einfach folgende Anweisung verwendet werden:

newRow.ItemArray = (object[])copyRow.ItemArray.Clone();

Saturday, February 24, 2007 2:52:35 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Thursday, February 22, 2007

Am 20. März ist Ralf in Ulm, um eine seiner berühmten Kaffehauskonsultationen im Cafe Bellavista zu geben. Wer sich also schon immer mal mit einem ausgewiesenen Experten in Sachen .net über ein Problem oder eine Idee unterhalten wollte, der kann jetzt die Gelegenheit nutzen - kostenlos! In der entspannten Umgebung eines Cafes lässt sich über vieles angenehmer diskutieren als auf Konferenzen oder sonstigen Veranstaltungen.

Interessenten sollten sich unbedingt vorher bei Ralf per Mail anmelden.

 

 

 

 

Link to One Man Think Tank Gedanken: Kaffeehauskonsultation in Ulm

Thursday, February 22, 2007 2:56:25 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Wednesday, February 21, 2007

Das PropertyGrid ist ein sehr hilfreiches Control, mit dem man einfach die Inhalte der Properties einer Klasse an der Oberfläche anzeigen und bearbeiten kann. Ich hatte hierzu schon zwei Posts : Verwendung des Property-Grids, Dateien und Ordner im Property-Grid auswählen

Das Property-Grid stößt allerdings an seine Grenzen, wenn man damit mehrsprachige Umgebungen unterstützen möchte. Die Anzeige im PropertyGrid ist immer direkt vom Namen der Properties abgeleitet und die Description etc. wird über Attribute angegeben, die nicht über Ressource-Files lokalisiert werden können.

Auf Code-Project habe ich ein erweitertes Property-Grid gefunden, das genau dieses Problem beseitigt.

Link to PropertyGrid utilities - The Code Project - C# Programming

Danke an Chris für den Link!

Wednesday, February 21, 2007 10:45:04 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    |   | 
 Tuesday, February 20, 2007

In dem folgenden Beispiel wird aus einer Auflistung der Typ der Elemente ermittelt und anschließend eine neue Instanz dieses Typs angelegt. Dann werden die Properties die über DisplayMember und ValueMember übergeben wurden mit Werten befüllt. Damit kann die Liste ergänzt werden, ohne Zugriff auf den Datentyp zu haben. Einzige Voraussetzung ist, dass in der DataSource bereits Elemente vorhanden sind.

foreach (cListEntry item in Items)
{
Type
t = ((IList)dataSource)[0].GetType();
object o = Activator.CreateInstance(t);
if (this.DisplayMember!= null && this.DisplayMember!= "")
   
t.GetProperty(
this.DisplayMember).SetValue(o, item.Text, null);
if (this.ValueMember!= null && this.ValueMember!= "")
    t.GetProperty(
this.ValueMember).SetValue(o, item.Value, null);
}

 

Nachtrag:

Wenn der Typ, von dem eine neue Instanz erzeugt werden soll, keinen parameterlosen Konstruktor hat, funktioniert das obige Beispiel nicht. Abhilfe kann man hier schaffen, indem man einen parameterlosen Konstruktor anlegt und diesen als private deklariert. Dadurch kann ich beim Instanzieren weiterhin sicherstellen, dass Pflichtangaben gemacht werden, weil der parameterlose Konstruktor ja nicht sichtbar ist.

Mit object o = Activator.CreateInstance(t, true); kann nun in obigem Beispiel eine Instanz des Objektes durch Aufruf des privaten parameterlosen Konstruktors erzeugt werden. Hier muss man natürlich jetzt sicherstellen, dass die Pflichtobjekte entsprechend befüllt werden.

Tuesday, February 20, 2007 12:09:50 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Saturday, February 10, 2007

Am Dienstag werde ich auf der VSOne zwei Vorträge halten

13:45 - 14:45  Databinding in WinForms für Fortgeschrittene

Databinding ist mehr als die oft gezeigten Drag&Drop-Beispiele. Vor allem mit Objekten, typisierten DataSets und User Controls eröffnen sich enorme Möglichkeiten. Diese Session fasst die wichtigsten Infos aus jahrelanger Projekterfahrung zusammen.

15:15 - 16:15 Active Sync

Wie bekomme ich Daten vom PC auf mein Mobile Device? Wie kann ich Daten auslesen? Diese Session zeigt, wie dieser Datenaustausch mit Hilfe von Active Sync bewerkstelligt werden kann und sie gibt wertvolle Hinweise, was in der Praxis zu beachten ist.

 

Würde mich freuen, wenn der eine oder andere Leser meines Blogs auch auf der VSOne ist und wir uns mal persönlich kennenlernen.

Saturday, February 10, 2007 2:15:30 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Ich falle immer wieder darauf rein, deshalb jetzt mal zum merken! Das funktioniert nicht:

foreach (DataRow dr in table1.Rows)
    table2.Rows.Add(dr);

Das führt zu einer Fehlermeldung "This row already belongs to another table.". Statt dessen muss das lauten:

foreach (DataRow dr in table1.Rows)
    table2.ImportRow(dr);

Saturday, February 10, 2007 1:55:17 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Thursday, February 08, 2007

Wer Anwendungen für Pocket PCs oder andere mobile Geräte entwickelt oder präsentieren möchte, findet einige hilfreiche Tools im Windows Mobile Developer Power Toys Paket, das kostenlos heruntergeladen werden kann. Unter anderem findet man darin das ActiveSync Remote Display, mit dem man den Bildschirm des PDAs auf dem PC darstellen und den PDA sogar mit der Maus und der Tastatur des PCs steuern kann. 

Link to Download details: Windows Mobile Developer Power Toys

Thursday, February 08, 2007 6:56:19 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Wenn man unter Vista den IIS7 installiert hat und dann versucht, von VS 2005 aus auf den lokalen IIS7 zuzugreifen, dann quitiert das VS zunächst mit einem Fehler.

 

Wie man den IIS7 konfigurieren kann, damit man aus VS 2005 darauf zugreifen kann ist in folgendem Blog-Beitrag beschrieben:

Link to Your Websites, Our Passion! : Developing Web Applications on Windows Vista with Visual Studio 2005

Thursday, February 08, 2007 6:44:08 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    |   | 
 Saturday, January 27, 2007

Die Workitems von Team System lassen sich ja einfach in Excel abfragen und bearbeiten. Jedoch war ich mit den angeboteten Spalten nicht zufrieden. Man kann zwar über einen entsprechenden Button noch beliebige weitere Spalten abrufen, das aber jedesmal zu tun war dann doch ein wenig nervig. Nach einigem Suchen habe ich dann die Lösung gefunden. Man muss sich einfach eine eigene Query anlegen und dort die gewünschten Spalten definieren. Wenn man nun über diese Query die Workitems in Excel abfragt, kommen genau die Spalten, die in der Query definiert sind.

Saturday, January 27, 2007 9:35:19 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Sunday, January 14, 2007

Mit OleDB lassen sich sehr einfach Excel-Dateien lesen. Man macht sich einen Connectionstring der ungefähr so aussieht:

Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ExcelFileName & ";Extended Properties='Excel 8.0;HDR=No;"

Nun kann man eine ganz normale Connection öffnen und wie gewohnt z.B. über ein Select-Statement ein DataSet befüllen.

Dim conn As OleDbConnection = New OleDbConnection(connectionString)
conn.Open()
Dim dt As DataTable = New DataTable()
Dim oleDbDataAdapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM [Tabelle1]", conn)
oleDbDataAdapter.Fill(dt)
oleDbDataAdapter.Dispose()
oleDbDataAdapter =
Nothing
conn.Close()

Das Problem ist dabei, wenn in Excel z.B. Integer und Textwerte in einer Spalte gemischt stehen und die Integerwerte dabei überwiegen, wird diese Spalte als Integer angelegt und die Textwerte stehen im Dataset dann als NULL. Das kann man umgehen, wenn man am Connectionstring den Parameter IMEX=1 anhängt. Damit wird ein "ImportMixedTypes"-Mode aktiviert, der gemischte Spalten immer als Text interpretiert.

Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Me.tbImportdatei.Text & ";Extended Properties='Excel 8.0;HDR=No;IMEX=1'"

Das Problem bei der ganzen Sache ist nur, dass nun standardmäßig die ersten 8 Zeilen geprüft werden. Sind diese alle Integers, wird die Saplte auch als Integer definiert, auch wenn weiter unten noch Textwerte kommen. Man findet hier an verschiedenen Stellen den Hinweis auf einen weiteren Parameter MaxScanRows. Dieser scheint aber nicht zu funktionieren, wie man auch aus diesem MSDN-Artikel ersehen kann. Statt dessen muss man die Einstellung in der Registry vornehmen, wenn man eine andere Anzahl prüfen möchte. Hierzu passt man im Zweig

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

 

den Parameter TypeGuessRows an. Dieser Wert kann auf 1-16 Zeilen eingestellt werden. Ein Wert von 0 bedeutet dass die ersten 16384 Zeilen geprüft werden, um festzustellen, ob der mixed Mode verwendet werden muss oder ob der Datentyp eindeutig bestimmt werden kann. Dass das eigentlich keine saubere Lösung ist, ist klar. Wer will schon seinen Kunden zumuten, in der Registry rumzupfuschen? Aber es scheint im Moment keine bessere Lösung zu geben.

HDR=No bedeutet im obigen Fall übrigens, dass die Excel-Datei keine Header-Zeile hat.

Sunday, January 14, 2007 4:23:55 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    |   | 
 Friday, January 05, 2007

Team Foundation Sidekicks ist eine Sammlung von Tools, die verschiedene Aufgaben bei Nutzung und Verwaltung von Team Foundation Server erleichtern. Unter anderem wird eine vereinfachte Verwaltung von Labels angeboten:

Link to Team Foundation Sidekicks

Friday, January 05, 2007 2:31:06 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Dieser Artikel beschreibt wie man über ein Add-In Funktionen für den Team Build und die Quellcode-Verwaltung programmieren kann.

Link to Attrice Corporation Team Foundation Sidekicks

Friday, January 05, 2007 2:25:46 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Mit diesem Tool kann man WorkItems von einem Team Projekt in ein anderes verschieben.

Link to Team Foundation Server Work Item Utility: Home

Friday, January 05, 2007 2:12:43 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Lars Keller berichtet über das Tool IEeee, das es ermöglicht, direkt aus dem IE einen Fehlerbericht mit detailierten Informationen als WorkItem im Team System Server anzulegen. Das Tool dürfte vor allem für Tester sehr interesant sein.

Link to IEeee: Home

Friday, January 05, 2007 2:09:27 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Crum for Team System ist ein kostenloses add-in für Visual Studio Team System, das agile Entwicklungsmethoden nach Scrum unterstützt. 

Link to Scrum for Team System

Friday, January 05, 2007 1:56:04 PM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 

Um einen Label auf einer WinForm per Code einfach fett zu machen, funktioniert leider folgende Methode nicht:

TitleLbl.Font.Bold = true;

Statt dessen kann man aber folgenden Code verwenden:

TitleLbl.Font = new Font(TitleLbl.Font, FontStyle.Bold);

Friday, January 05, 2007 10:17:40 AM (Mitteleuropäische Zeit, UTC+01:00)  #    Comments [0]    | 
 Thursday, January 04, 2007

WorkItems für den Team Foundation Server lassen sich einfach per Code erstellen.

TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer("tfs-test");

WorkItemStore store = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));

WorkItemType wiType = store.Projects[0].WorkItemTypes[1];

WorkItem newWI = new WorkItem(wiType);

newWI.Title = "Title";

newWI.Save();

Für den Code müssen noch folgende Namespaces referenziert und eingebunden werden:

using Microsoft.TeamFoundation;