August 2007 - Einträge

ASP.NET Team Todo: DataPager

Neu in .NET 3.5 ist der DataPager. Wie sein Name schon erraten lässt, erweitert dieses Control das ListView um die Paging Funktionalität.

Die momentane Implementierung des DataPagers hat jedoch (noch) einige Macken.

Es ist beispielsweise nicht möglich, den aktuellen PageIndex im Code festzulegen, ein Szenario bei dem der PageIndex aus dem QueryString übergeben werden soll ist somit nicht umsetzbar.

Aus meiner Sicht noch viel gravierender ist, dass der DataPager nicht auf dem Datenbankserver paged, sondern alle Daten herunterläd und nur eine Auswahl anzeigt. Sollen viele Datensätze gepaged werden, kann dies zu einem Performance Problem werden.

Außerdem wäre es wünschenswert, wenn der DataPager außer dem ListView auch noch den DataRepeater und das GridView erweitern könnte.

Posted von Jan-Cornelius Molnar mit no comments
Abgelegt unter: ,

Benutzereingaben prüfen: Dateinamen

In vielen Anwendungen haben Benutzer die Möglichkeit, Dateinamen selbst zu vergeben. Dabei muss der Anwendungsentwickler darauf achten, dass keine "illegalen" Zeichen im Dateinamen enthalten sind (Für Windows wären das / \ : * ? " < > und |).

Dies lässt sich mit einem einfachen Regular Expression verhindern.

filename = System.Text.RegularExpressions.Regex.Replace(filename, "[/\\:\*\?""<>\|]", "")

So werden einfach alle illegalen Zeichen aus dem Dateinamen entfernt.

Achtung: Dies nur auf den Dateinamen (beispiel.txt), nicht auf den ganzen Pfad (C:\Dokumente\beispiel.txt) anwenden!

Posted von Jan-Cornelius Molnar mit no comments
Abgelegt unter:

Expression Blend 2 August CTP 2007

Um uns die Wartezeit auf die kommende Microsoft Expression Suite zu versüßen, hat Microsoft nun die August CTP von Expression Blend 2 veröffentlicht.

Neben zahlreichen Bug-Fixes und Performance Verbesserungen wartet diese CTP mit der Unterstützung für Visual Studio 2008 Beta 2 und Microsoft Silverlight RC auf.

Posted von Jan-Cornelius Molnar mit no comments
Abgelegt unter: ,

ASP.NET und LINQ to SQL RELOADED!

Blicke ich zurück auf meinen früheren Post, hat sich bei der Zusammenarbeit von ASP.NET und LINQ in der neusten Beta 2 von Visual Studio 2008 (Codename Orcas) viel getan.

ASP.NET Anwendungen können jetzt problemlos die neuen .NET 3.5 Assemblys einbinden und deren Features nutzen.

Für Webentwickler steht sogar die neue LinqDataSource bereit, die den Zugriff von allen Data-Bound-Controls wie GridView, ListView, DataRepeater etc. auf einen Linq to Sql DataContext gewährt und neben automatischem Sorting und Paging auch Insert-, Upadte- und Delete-Querys unterstützt.

Ist ein Linq-to-Sql DataContext im AppCode Folder oder in einer referenzierten Assembly vorhanden, kann man wie bei der Sql Data Source gewohnt mit dem Visual Designer arbeiten. Probleme bereiten noch Where-Conditions und komplexe Queries, doch in der LinqDataSource steckt mehr als Microsoft offen zugeben will.

Das Selecting Event der LinqDataSource bietet einem die Möglichkeit die vordefinierte Linq Query über den Parameter e.Result zu erstetzten. Dabei ist man nicht auf den Linq-to-Sql DataContext beschränkt, sondern kann jede beliebige Linq Query verwenden (z.B. Linq-to-Objects, Linq-to-Entities, Linq-to-Amazon, etc.) und das ohne den Verlust von Sorting und Paging.

 

Hier eine kleine Demonstration

 

ASP .NET Declaration
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" DataSourceID="PersonSource" /> <asp:LinqDataSource ID="PersonSource" runat="server" />

 

ASP .NET Code
Partial Class _Default Inherits System.Web.UI.Page Protected Sub PersonSource_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceSelectEventArgs) Handles PersonSource.Selecting Dim persons As Person() = New Person() {New Person With {.Name = "Jan", .Age = 19}, New Person With {.Name = "Albert", .Age = 23}, New Person With {.Name = "Robert", .Age = 61}} e.Result = From x In persons Where x.Age > 20 End Sub End Class Public Class Person Private _Name As String Public Property Name() As String Get Return _Name End Get Set(ByVal value As String) _Name = value End Set End Property Private _Age As Integer Public Property Age() As Integer Get Return _Age End Get Set(ByVal value As Integer) _Age = value End Set End Property End Class

In diesem Beispiel wird ein einfaches GridView mit Sorting und Paging an eine LinqDataSource gebunden. Im Code wird eine Klasse Person definiert mit den Eigenschaften Name und Age. Im Selecting Event werden einige Person Objekte erstellt. Daraufhin werden mit einer Linq Query diejenigen Person Objekte herausgefiltert, deren Age Eigenschaft größer als 20 ist.

Um  sich nun von der Flexibilität der LinqDataSource zu überzeugen muss man lediglich die Anwendung starten.

Fazit

Man sieht, dass das ASP.NET Team in den letzten Monaten nicht geschlafen hat, sondern neben der Erstellung der AJAX-Extension und neuen WebControls auch noch die Linq Integration deutlich verbessert hat.

Zwar sind die Query Funktionen noch nicht sehr ausgereift, mit einem kleinen Workaround lässt sich dies aber spielend meistern.

Ab jetzt werde ich immer mehr Linq in meinen ASP.NET Projekten einsetzten!

Posted von Jan-Cornelius Molnar mit no comments
Abgelegt unter: , ,