UserControls um eigene Eigenschaften erweitern

UserControls bieten eine hervorragende Möglichkeit um wiederholende Funktionalität oder Quellcode auszulagern. Häufig ändert sich aber dennoch ein kleiner Teil von Seite zu Seite. Um diese Anforderung abbilden zu können und die Flexibilität das Controls zu erhöhen, ist es möglich UserControls um eigene Eigenschaften zu erweitern.

In diesem einfachen Beispiel soll das UserControl einen Text über die Eigenschaft MyValueengegennehmen und diesen über ein Literal Control ausgeben.

<UC:WebUserControl ID="uc1" runat="server" MyValue="Test 1" />

Hierfür ist nichts weiter nötig als in der Code-Behind Datei des UserControls ein neues Property hinzuzufügen.

private string myValue;

public string MyValue
{
 get { return myValue; }
 set { myValue = value; }
}

Die eigentliche Funktionalität um den Text auszugeben ist nun nur noch Formsache.

protected void Page_Load(object sender, EventArgs e)
{
    lit.Text = this.myValue;
}

Wird dieses UserControl nun im Kopf einer Webseite oder per Web.Config registriert, steht die Eigenschaft – welche im Code-Behind angelegt wurde -sofort im IntelliSense zur Verfügung.

WebUserControl

Den Download des Beispielprojekts findet man hier.

Moderator bei ASP.NET Zone

Auch wenn es hier im Weblog seit mehreren Wochen nur wenige Beiträge gibt, hat sich dennoch eine Menge getan.

Bereits seit einiger Zeit bin ich in den Foren auf www.aspnetzone.de unterwegs. Das bestehende Team rund um Stefan Falz bot mir nun die Gelegenheit einen Job als Moderator anzunehmen. Ein solches Angebot konnte ich natürlich nicht ausschlagen und habe es angenommen. Ich freue mich immer wenn ich Jemanden unterstützen kann. Deshalb freue ich mich umso mehr eine ganze Plattform und die Idee dahinter- wenn auch nur mit einem geringen Beitrag – unterstützen zu können.

Natürlich bleibe ich auch weiterhin Mitglied des myCsharp.de Moderatoren-Teams, zudem ich bereits seit knappt einem Jahr gehöre.

ASP Konferenz am 18. u. 19. Juni in Burghausen

Am 18. und 19. Juni findet die alljährliche ASP Konferenz in Burghausen statt. Auch in diesem Jahr gibt es wieder eine Menge Sessions rund um das Thema Webentwicklung im Microsoft Umfeld.Zum Thema gehören:

- AJAX
- Shortcut XAML
- IIS7 News
- CSS 2.0
- Expression Web Designer
- SharePoint Server 2007
- SQL Server 2005
- Blogging
- Live.com und Ihre Anwendungen
- Silverlight (ehemals WPF/E) in .NET 3.0
- Windows Cardspace in .NET 3.0

Eine komplette Übersicht der Agenda und weitere Informationen gibt es unter http://www.asp-konferenz.de/
Vielleicht sieht man sich dort.

Telerik RadControls: Top 15 Optimization Tips and Tricks

Todd Anglinhat in seinem Weblog einen Beitrag mit dem Titel “Top 15 Optimization Tips and Tricks” veröffentlicht. Wie der Name schon sagt, beinhaltet der Beitrag 15 Tipps und Tricks um die Arbeit der Telerik RadControls zu optimieren und die Performance zu verbesser.

http://blogs.telerik.com/blogs/todd_anglin/archive/2007/05/15/top_15_optimization_tips_and_tricks.aspx

Mehr Informationen zu den Telerik RadControls findet man unter diesem Link.

GridView anzeigen obwohl keine Daten vorhanden sind

Das GridView Control eignet sich hervorragend um Daten jeglicher Art anzuzeigen. Sind allerdings keine Daten vorhanden, wird das gesamte Control ausgeblendet. Eine häufige Anforderung ist es jedoch einen Text, welcher auf die nicht vorhandenen Daten hinweist und die Überschriften, der Tabelle anzuzeigen.

Um dieses Problem zu lösen bietet sich ein CustomControl an, welches vom GridView abgeleitet und um die benötigte Funktionalität erweitert wird. Die benötigten Funktionen definieren sich wie folgt:

  • Möglichkeit das GridView trotz leerer Daten anzuzeigen
  • Eingabe eines Textes, der bei leeren Daten angezeigt wird

Zunächst müssen die zusätzlichen Eigenschaften definiert werden. Die Eingaben sollten im ViewState abgelegt werden, damit diese auch nach einem PostBack zur Verfügung stehen.

public bool ShowEmptyTable
{
    get
    {
        object o = ViewState["ShowEmptyTable"];
        return (o != null ? (bool)o : true);
    }
    set
    {
        ViewState["ShowEmptyTable"] = value;
    }
}

public string EmptyText
{
    get
    {
        object o = ViewState["EmptyText"];
        return (o != null ? o.ToString() : "");
    }
    set
    {
        ViewState["EmptyText"] = value;
    }
}

Anschließend wird die Methode CreateChildControls überschrieben und angepasst. Sind keine Zeilen an das GridView gebunden und die Eigenschaft ShowEmptyTable gesetzt, wird zuerst der Kopf der Tabelle inkl. der Überschriften eingefügt. Weiter wird eine leere Zeile hinzugefügt, die den Text der Eigenschaft EmptyText anzeigt.

protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
{
    int numRows = base.CreateChildControls(dataSource, dataBinding);
    if (numRows == 0 && ShowEmptyTable)
    {
        Table table = new Table();
        table.ID = this.ID;
        GridViewRow row = base.CreateRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
        DataControlField[] fields = new DataControlField[this.Columns.Count];
        this.Columns.CopyTo(fields, 0);
        this.InitializeRow(row, fields);
        table.Rows.Add(row);
        row = new GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal);
        TableCell cell = new TableCell();
        cell.ColumnSpan = this.Columns.Count;
        cell.Width = Unit.Percentage(100);
        cell.Controls.Add(new LiteralControl(EmptyText));
        row.Cells.Add(cell);
        table.Rows.Add(row);
        this.Controls.Add(table);
    }

    return numRows;
}

Um das abgeänderte GridView zu verwenden, muss es um Webprojekt referenziert und per Web.Config registriert werden.

<controls>
    <add assembly="EmptyGridView" namespace="EmptyGridView" tagPrefix="CC"/>
controls>

Ist dies geschehen, können die Eigenschaften direkt per IntelliSense aufgerufen und gesetzt werden. In diesem Beispiel wird eine leere Tabelle mit dem Namen MyData an das GridView gebunden. Die Tabelle enthält nur eine Spalte mit dem Namen Data.

<CC:EmptyGridView id="grid" runat="server" ShowEmptyTable="True" EmptyText="Keine Daten vorhanden" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" >
    <Columns>
        <asp:BoundField DataField="Data" HeaderText="Data" SortExpression="Data" />
    </Columns>
</CC:EmptyGridView>

Das abgeänderte GridView Control kann in mehreren Projekten eingesetzt werden und bietet den vollen Funktionsumfang des eigentlichen GridView Controls. Das gesamte Projekt inkl. Beispielapplikation kann hier runtergeladen werden. Um das EmptyGridView Control direkt einsetzten, reicht dieser Download.

Weitere Informationen zum DetailsView abspeichern

Häufig müssen neben den Eingaben, die innerhalb des DetailsView getätigt werden, noch weitere Informationen gespeichert werden, ohne das diese vom User eingegeben werden.Um solchen Anforderungen gerecht zu werden, sind nur ein paar Zeilen Code nötig. In diesem Beispielprojekt soll der User zwei Felder ausfüllen, die in der Datenbank gespeichert werden. Zusätzlich soll die IP-Adresse hinzugefügt werden.

Für die Verbindung zur Datenbank wurde ein SqlDataSource Control verwendet. Innerhalb dieses Controls wurde eine INSERT Anweisung definiert, die mehrere Parameter entgegennimmt.

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="">
    <InsertParameters>
        <asp:Parameter Name="Name" Type="String" />
        <asp:Parameter Name="CommentText" Type="String" />
        <asp:Parameter Name="IPAddress" Type="String" />
    </InsertParameters>
</asp:SqlDataSource>

Um die zusätzlichen Informationen übergeben zu können ist es nötig den OnItemInserting Event zu abonnieren. Anschließend kann der Parameter mit dem zugehörigen Wert gefüllt werden.

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
    string ipAddress = Request.UserHostAddress;
    e.Command.Parameters("IPAddress").Value = ipAddress;
}

Nun wird zusätzlich zu den eingegebenen Informationen die IP Adresse gespeichert. Den Download des Beispielprojekts findet man hier.

Nachtrag:
Hannes hat mich auf eine etwas kürzere Lösung aufmerksam gemacht. Außerdem hat er bereits von längerer Zeit einen ähnlichen Artikel zu diesem Problem auf www.DevTrain.de veröffentlicht.

http://www.devtrain.de/news.aspx?artnr=955

Windows Workflow Foundation Web Workflow Approvals Starter Kit

Microsoft hat ein Starter Kit veröffentlich, welches die Verwendung der Windows Workflow Foundation in Web-Anwendungen zeigen soll.

This starter kit is a Visual Studio 2005 project that demonstrates using Windows Workflow Foundation for simple task oriented workflow in an ASP.NET web application. A workflow model is used to automate work order requests at a small example company. It includes three pre-defined roles which each play a part in the work order creation, approval and monitoring. The starter kit may be modified for other workflow models to suit other small web based task management systems.

Den Download und weitere Infos gibt es hier.

Mehr Informationen zur Windows Workflow Foundation gibt es unter folgenden Links:

Windows Workflow Foundation (WF) Tutorials And Samples
Hands-on Labs for Windows Workflow Foundation
Die Microsoft Windows Workflow Foundation – Eine Einführung für Entwickler

ASP.NET AJAX aktualisierte Dokumentation und Videos

Das ASP.NET AJAX Team hat die Dokumentation zu ASP.NET AJAX 1.0 aktualisiert. Neben einigen Korrekturen und zusätzlichen Anmerkungen, gibt es neue Beispiele und weitere Code Snippets.

Die Dokumentation wird zum Download angeboten, oder kann direkt online gelesen werden.

Außerdem gibt es zwei neue Videos der Serie “How Do I?” with ASP.NET AJAX.

#32 | How Do I: Use the ASP.NET AJAX AutoComplete Control

#33 | How Do I: Use the ASP.NET AJAX UpdateProgress Control?

Visual Studio 2005 Toolbox für Windows CardSpace

Christian Arnold hat eine Visual Studio 2005 Toolbox speziell für die Arbeit mit Windows CardSpace geschrieben. Mit Hilfe dieser zwei neuen Controls mit dem Namen CardSpaceLogin und CreateCardSpaceUserWizard, ist es auf einfache Weise möglich Windows CardSpace in eigenen ASP.NET Anwendungen zu benutzen.

cardspacetoolbox.png

Mehr Informationen, eine Installationsanleitung und natürlich den Download gibt es hier.