MSDN Magazin > Home > Ausgaben > 2006 > December >  Datenpunkte: RSS-Feeds auf einem Smartphone
Datenpunkte
RSS-Feeds auf einem Smartphone
John Papa

Codedownload verfügbar unter: DataPoints2006_12.exe (172 KB)
Browse the Code Online
Mobile Anwendungen unterscheiden sich nicht allzu sehr von anderen Anwendungen. Sie benötigen Daten, sie übertragen Daten mithilfe einer Verbindung, und die Daten müssen verwaltet werden. Mit der Weiterentwicklung mobiler Anwendungen müssen auch die Entwicklungstools immer besser werden. Für die Entwicklung von datenzentrischen mobilen Anwendungen mit Microsoft® .NET Compact Framework 2.0 benötigen Sie häufig die gleichen Funktionen und Kenntnisse wie bei der Entwicklung von Windows® Forms-Anwendungen. Mithilfe von .NET Compact Framework können Entwickler ADO.NET und andere bekannte Bibliotheken zur Verwaltung der Daten in einem Mobilgerät verwenden.
Wenn Sie Anwendungen für Smartphone entwickeln, treten jedoch weitere Design-Herausforderungen auf, z. B. die kleine Displaygröße. Die integrierte Internetverbindung beeinflusst das Anwendungsdesign, da zum Senden und Empfangen von Daten Hostanwendungen, die mit Webservern kommunizieren, notwendig sind.
In diesem Artikel erfahren Sie, wie Sie eine Windows Mobile® 5.0-Anwendung, die RSS-Feeds liest und sie in ein ADO.NET DataSet lädt, entwickeln können. Vorab wird erläutert, wie ein RSS-Feed von einer URL asynchron angefordert werden kann, und anschließend lernen Sie, wie der RSS-Feed gelesen und in ein DataSet geladen wird. Der nächste Schritt beinhaltet das Navigieren in der DataSet-Hierarchie, um die erforderlichen Daten, die die Feed-Elemente enthalten, zu suchen. Dann erfahren Sie, wie Sie mit anonymen Delegaten Daten sortieren können, wie Sie mithilfe von ADO.NET nach einem Feld in den RSS-Daten suchen und wie Sie über das WebBrowser-Steuerelement zu einer URL navigieren oder eine HTML-Seite anzeigen können. Abschließend lernen Sie, wie Sie die Anwendung mithilfe eines CAB-Projekts in einem Mobilgerät bereitstellen. Sie können den vollständigen Quellcode für diese Beispielanwendung von der Website des MSDN®Magazins herunterladen.

Vorbereitungen für die Entwicklung mobiler Anwendungen
Die Entwicklung von mobilen Anwendungen mit .NET Compact Framework 2.0 und Visual Studio® 2005 ähnelt in vielen Bereichen der Entwicklung von ASP.NET- oder Windows Forms-Anwendungen. Bevor Sie jedoch direkt mit der Codeprogrammierung beginnen, müssen Sie einige Einstellungen vornehmen. Wenn Sie Visual Studio 2005 bereits installiert haben, sollten Sie sich vergewissern, dass auch die folgenden Komponenten installiert sind. Laden Sie sie andernfalls von der Microsoft-Website herunter:
Auch wenn Sie während der Entwicklung kein Smartphone-Gerät verwenden, sondern stattdessen den Emulator nutzen, müssen Sie dennoch die aktuellste Version von ActiveSync® installieren. Mit diesem Programm wird u. a. die Anwendung auf dem Emulator bereitgestellt, und der Emulator kann eine Verbindung zum Internet herstellen. Windows Mobile SDK 5.0 for Smartphone stellt einige Projekttypen in Visual Studio 2005 bereit, die speziell für die Smartphone-Entwicklung geeignet sind. (Es gibt auch ein SDK für die Entwicklung für Pocket PC.) Zuletzt sollten Sie den Emulator installieren, der dem Zielgerät am ehesten entspricht. (Die Anwendung in diesem Beispiel wurde für Smartphone-Geräte mit einem Display im Querformat und einer Auflösung von 320 × 240 konzipiert.)
Hinweise zu Emulatoren: Wenn Sie ein Mobilgerät besitzen, ist dringend zu empfehlen, die Anwendung auf dem Gerät zu testen, anstatt sich voll und ganz auf den Emulator zu verlassen. Emulatoren sind nützliche Tools, aber die Anwendungstests auf dem eigentlichen Gerät sind immer zuverlässiger. Am besten ist es bei der Entwicklung einer mobilen Anwendung zu bestimmten Zeitpunkten, die Anwendung sowohl im Emulator als auch auf dem eigentlichen Gerät bereitzustellen, um sicherzustellen, dass die Anwendung in beiden Umgebungen ordnungsgemäß ausgeführt wird.
Bevor Sie den Code ausführen, müssen Sie in Visual Studio im Menü „Extras“ die Option „Geräteemulator-Manager“ auswählen. Eine Liste aller verfügbaren Emulatoren wird angezeigt. Wählen Sie „320×240 (Landscape) Windows Mobile 5.0 Smartphone Emulator“. Wenn Sie diese Option nicht heruntergeladen haben, können Sie auch mit einem anderen Windows Mobile 5.0 Smartphone-Emulator arbeiten. Der Code in diesem Artikel wurde für ein Display im Querformat und mit einer Auflösung von 320 x 240 geschrieben; er kann aber auch mühelos so geändert werden, dass er für andere Auflösungen geeignet ist.
Sobald Sie den Emulator gewählt haben, klicken Sie mit der rechten Maustaste darauf, und wählen Sie „Verbinden“. Der Emulator startet das Smartphone. Sobald das Smartphone im Emulator ausgeführt wird, klicken Sie mit der rechten Maustaste erneut auf das Element im Gerätemanager, und wählen Sie „In Basisstation“. Wenn Sie das Smartphone im Emulator in die Basisstation stellen, wird eine Verbindung mit ActiveSync hergestellt und somit auch zu Ihrem Netzwerk, sodass es auf das Internet und die RSS-Feeds zugreifen kann. Wählen Sie dann in Visual Studio den 320 x 240-Emulator aus der Dropdownliste der Symbolleiste „Gerät“. Dadurch verwendet Visual Studio beim Debuggen und Bereitstellen das richtige Emulatorbild.

Nachrichtenticker
Bevor Sie direkt den Code schreiben, sehen Sie sich die Funktionsweise der Anwendung genauer an. Wenn die Anwendung gestartet wird, fordert sie asynchron die RSS-Feeds von den entsprechenden Websites an und lädt ein ListView-Steuerelement, das den Titel jedes Feeds und die Elementanzahl, das jedes Feed zurückgibt, enthält (siehe Abbildung 1).
Abbildung 1 Liste der RSS-Feeds 
Abbildung 2 Liste der Feed-Elemente 
Abbildung 3 Elementbeschreibung 
Wenn Sie einen Feed auswählen und entweder die Eingabetaste (der mittlere Softkey am Smartphone) drücken oder die Option „Menü“ > „Auswählen“ wählen, wird die Liste der Elemente des ausgewählten Feeds in der Listenansicht eines anderen Formulars angezeigt, wobei das aktuellste an erster Stelle steht. Wenn der RSS-Feed das Veröffentlichungsdatum des Elements (wobei es sich um ein optionales Element im RSS-Schema handelt) enthält, wird es in der zweiten Spalte der Listenansicht angezeigt (siehe Abbildung 2). Wenn kein Veröffentlichungsdatum vorliegt, wird diese Spalte übersprungen und nur der Titel des Elements angezeigt.
Mit der Auswahl eines Elements wird in einem anderen Fenster eine Beschreibung dazu eingeblendet. Der Inhalt des beschreibenden Elements dieses von Ihnen ausgewählten Elements wird in einem WebBrowser-Steuerelement angezeigt (siehe Abbildung 3).
Die Beschreibung kann auch Hyperlinks oder Bilder enthalten, da das Element aus dem RSS-Feed gelesen wird. Wenn es eine URL enthält, kann der Benutzer auf die URL klicken und zu dieser Adresse navigieren. Wenn der Benutzer mit dem Softkey den Menüeintrag „Auswählen“ wählt, während die Elementbeschreibung angezeigt wird, wechselt die Anwendung zu einem anderen Fenster und navigiert zur URL des ausgewählten Elements, wobei der Inhalt in ein WebBrowser-Steuerelement geladen wird, sodass der gesamte Eintrag angezeigt werden kann. Der Benutzer kann über den Zurück-Softkey immer wieder zu einem vorherigen Fenster zurückkehren. Im Fenster „Liste der Feed-Elemente“ kann der Benutzer über den Links-Softkey den Befehl „Fertig“ auswählen, um die Anwendung zu schließen.
Diese Anwendung umfasst die grundlegenden Funktionen, die in eine Anwendung dieser Art integriert werden müssen. Es gibt jedoch mehrere Funktionen und Verbesserungen, die Sie einfügen können, um die Anwendung zu verbessern, z. B. Statusleisten, Symbole und die Verwaltung der Feed-Liste. Sie können den Code herunterladen und Ihre eigenen Verbesserungen einarbeiten.

Asynchrone Feed-Anfragen
Nachdem Sie nun wissen, wie die Anwendung funktioniert, können Sie sich dem Innenleben der Anwendung zuwenden, dem Code. Beim Laden der Anwendung werden zuerst drei RSS-Feeds angefordert. (In diesem Beispiel wurden diese URLs der Einfachheit halber in einer Listen-<Zeichenfolge> im Code eingefügt). Dabei werden die registrierten URLs der Reihe nach immer wieder durchlaufen. Durch Aufruf der BeginScanFeeds-Methode wird der Feed für jede URL angefordert:
   List<string> urlList = new List<string>();
   urlList.Add(
     "http://msdn.microsoft.com/msdnmag/rss/        rss.aspx?Sub=Data+Points");
   urlList.Add("http://blogs.msdn.com/MainFeed.aspx");
   urlList.Add("http://blogs.technet.com/MainFeed.aspx");

   ClearList();
   foreach (string url in urlList) BeginScanFeeds(url);
 
Die BeginScanFeeds-Methode erstellt eine Instanz der HttpWebRequest-Klasse für die angegebene URL. Die Anfrage wird dann asynchron für die genannte URL mithilfe der BeginGetResponse-Methode der HttpWebRequest-Klasse durchgeführt. Diese Methode akzeptiert einen asynchronen Rückruf-Delegaten (in diesem Beispiel die EndScanFeeds-Methode) und die Anfrage.
   public void BeginScanFeeds(string url)
   {
       HttpWebRequest request = 
          (HttpWebRequest)WebRequest.Create(url);
       IAsyncResult asyncResult = request.BeginGetResponse(
           new AsyncCallback(EndScanFeeds), request);
   }
   
Jede Anfrage wird übermittelt, und wenn die Antwort zurückgegeben wird, wird die EndScanFeeds-Methode aufgerufen. Die EndScanFeeds-Methode hat nur ein Argument des Typs IAsyncResult, mit dem der Feed abgerufen werden kann. In Abbildung 4 sehen Sie einen Auszug des Codes für diese Methode, mit dem die Antwort des erstellten HttpWebResponse-Objekts mithilfe eines StreamReader-Objekts in die Zeichenfolge feedData eingefügt wird. Die Zeichenfolge feedData enthält den XML-Code des RSS-Feeds und wird an die LoadFeedList-Methode übergeben, mit der die Feed-Daten in ein ListView-Steuerelement geladen werden. Da die Feeds asynchron gelesen werden und die LoadFeedList-Methode auf das ListView-Steuerelement zugreift, muss die Methode mithilfe der Control.Invoke-Methode aufgerufen werden.
public void EndScanFeeds(IAsyncResult result)
{
    string feedData;
    HttpWebRequest request = (HttpWebRequest)result.AsyncState;
    using(HttpWebResponse response = 
        (HttpWebResponse)request.EndGetResponse(result))
    using(StreamReader streamReader = 
        new StreamReader(response.GetResponseStream()))
    {
        feedData = streamReader.ReadToEnd();
    }

    Invoke(new LoadFeedListDelegate(LoadFeedList), feedData);
}


Laden eines DataSet
Sobald der Feed abgerufen wurde, muss der Inhalt verarbeitet werden. Es gibt mehrere Wege, wie eine XML-Zeichenfolge gelesen werden kann. In diesem Beispiel wurden die Daten mithilfe des folgenden Codes in ein DataSet geladen:
   DataSet ds = new DataSet();
   XmlTextReader xmlRdr = 
      new XmlTextReader(new StringReader(rssXmlData));
   ds.ReadXml(xmlRdr);
Dieser Weg ist ideal, da Sie die Möglichkeit haben, bestimmte Funktionen zu nutzen, z. B. die Suche nach Spalten und die Navigation der RSS-Feed-Hierarchie.
Die Inhalte des Feeds werden in das StringReader-Objekt geladen, mit dem anschließend ein XmlTextReader erstellt wird. Der XmlTextReader kann mit der ReadXml-Methode des DataSets gelesen werden. Diese Methode lädt die Inhalte des Feeds in das DataSet. Das RSS-Schema umfasst drei übergeordnete Hierarchieelemente: rss, channel und item. (Einige Schemata enthalten noch mehr Elemente, z. B. ein images-Element.)
Das rss-Element ist die Basis des RSS-Feeds und enthält ein oder mehrere Channel-Elemente. Die Channel-Elemente stellen den Feed dar und können mehrere untergeordnete Elemente enthalten, die den Feed beschreiben, z. B. title, link, description und item. Das Item-Element ist ein erforderliches untergeordnetes Element des channel-Elements. (Dabei handelt es sich nicht um das übergeordnete Item-Element.) Die Item-Elemente stellen jedes Element im Feed dar. Im MSDN-Blog ist das MSDN-Blog beispielsweise der Kanal (Channel-Element) und die Elemente (Item-Elemente) sind die Einträge.
Wenn ein RSS-Feed in ein DataSet geladen wird, werden die übergeordneten Elemente (rss, channel und item) als Tabellen geladen. Jede Hierarchiestufe wird in eine DataTable umgewandelt, die mithilfe der DataTable-Funktionen gelesen und durchlaufen werden können. Das einfache untergeordnete Element, das jedes übergeordnete Element beschreibt, wird als Spalte in die entsprechende DataTable geladen. Der DataTable-Kanal enthält beispielsweise eine DataColumn für das Element (item), eine Beschreibung (description) sowie Verknüpfungselemente (link). (Diese drei Elemente sind alle erforderlich.)
Zum Schluss wird eine DataRelation zwischen dem DataTable-Kanal und dem DataTable-Element hergestellt, womit dargestellt wird, wie ein Kanal kein oder mehr Elemente enthält. Mithilfe dieser Beziehung kann die Anwendung die Elemente eines bestimmten Kanals finden, wenn der Benutzer einen bestimmten Feed wählt.

Laden der Liste der Feeds
Sobald der Feed in ein DataSet geladen wurde, gehen Sie zur Kanal-Tabelle. Hier finden Sie den Titel des Kanals und die Anzahl der Elemente in jedem Kanal. Sie können diese Informationen in einem Array speichern und in die Listenansicht laden, sobald die Feeds empfangen werden (siehe Abbildung 5).
foreach (DataRow channelRow in ds.Tables["channel"].Rows)
{
    string title = channelRow["title"].ToString();
    int itemCount = int.Parse(channelRow.GetChildRows(
        "channel_item").Length.ToString());

    string[] displayInfo = new string[2];
    displayInfo[0] = title;
    displayInfo[1] = itemCount.ToString();
    
    ListViewItem item = new ListViewItem(displayInfo); 
    item.Tag = channelRow;
    lvFeed.Items.Add(item); 
}

Mithilfe der standardmäßigen ADO.NET-Syntax können Sie auf den Titel des Kanals zugreifen, um den Wert in der Spalte einer DataRow zu lesen. Um die Gesamtanzahl der Elemente in jedem Kanal zu erfassen, können Sie die GetChildRows-Methode der DataRow verwenden, die ein Array an DataRow-Objekten für die Elemente der aktuellen Kanalzeilen ausgibt. Die GetChildRows-Methode akzeptiert den Namen der DataRelation, der sich standardmäßig aus dem verketteten Namen des DataTable-Kanals und dem Namen des DataTable-Elements zusammensetzt, wobei die beiden Namen durch einen Unterstrich voneinander getrennt sind. Es empfiehlt sich, eine Referenz zur DataRow des Kanals im Tag des ListViewItem zu speichern. Dadurch ist es einfacher, auf die Feed-Informationen zuzugreifen, wenn ein Benutzer einen bestimmten Feed auswählt.

Sortieren mit anonymen Delegaten
Wenn ein Benutzer ein Feed auswählt, wird die DataRow an das FeedItemList-Formular übergeben, das die Liste der Elemente in ein ListView-Steuerelement lädt. Wenn das Veröffentlichungsdatum vorhanden ist, sollten Sie es zusammen mit dem Titel des Elements laden. Da das pubDate-Element kein erforderliches Element des RSS 2.0-Schemas ist, sollten Sie zuerst prüfen, ob die Spalte im DataTable-Element existiert. Mit dem Array an DataRow-Objekten, die die Feed-Elemente darstellen, können Sie das DataTable-Objekt der DataRow suchen und dann mit der DataTable.Columns.Contains-Methode überprüfen, ob die pubDate-Spalte existiert. Das erscheint Ihnen vielleicht etwas kompliziert, aber der Code ist, wie Sie gleich sehen, relativ einfach:
bool containsPubDate = (itemRows[0].Table.Columns.Contains("pubDate"));
Sobald Sie wissen, dass das pubDate vorhanden ist, können Sie festlegen, wie die Elemente in der Listenansicht sortiert und angezeigt werden sollen. Wenn das pubDate existiert, können Sie die Elemente nach Datum in absteigender Reihenfolge sortieren. Wenn kein pubDate existiert, können Sie die Elemente nach Titel sortieren und die Spalte für das Veröffentlichungsdatum in der Listenansicht ausblenden.
Wenn das pubDate existiert, wird der folgende Code ausgeführt:
colNewsItemName.Width = 170;
colPubDate.Width = 140;

Array.Sort(itemRows, delegate(DataRow row1, DataRow row2)
{
    DateTime pubDate1 = ParseDateTime(row1["pubDate"].ToString());
    DateTime pubDate2 = ParseDateTime(row2["pubDate"].ToString());
    return pubDate2.CompareTo(pubDate1);
});
Dadurch wird die Breite der Spalte so festgelegt, dass die Anwendung sowohl den Titel als auch das Veröffentlichungsdatum des Elements anzeigt. Dann wird mithilfe der Array.Sort-Methode das Array der DataRow-Objekte sortiert. Um die Daten zu sortieren, müssen Sie sie jedoch zuvor in ein gültiges DateTime-Format konvertieren. Nach der Konvertierung können Sie mit einem benutzerdefinierten Comparer-Delegat das DataRow-Array sortieren.
Die Codierung der Sortierroutine ist relativ mühelos, wenn Sie einen benutzerdefinierten Comparer-Delegat verwenden. Sie können den Sortiervorgang auch mithilfe einer expliziten Routine durchführen. Zur Reduzierung der Code-Zeilen ist jedoch der benutzerdefinierte Comparer-Delegat ideal. Die Daten werden für jeden Elementvergleich im Array verglichen. In diesem Beispiel wurde ein anonymer Delegat erstellt, der zwei DataRow-Objekte akzeptiert und miteinander vergleicht. Bei dem Vergleich werden die Werte in den pubDate-Spalten ausgewertet.
Wenn die pubDate-Spalte nicht existiert, können Sie die zweite Spalte in der Listenansicht ausblenden und die erste Spalte erweitern, sodass sie die ganze Displaybreite einnimmt. Sortieren Sie anschließend das DataRow-Array nach Elementtitel in aufsteigender Reihenfolge. Verwenden Sie dabei die gleiche Methode, vergleichen Sie jedoch diesmal die Zeichenfolgewerte:
colNewsItemName.Width = 310;
colPubDate.Width = 0;

Array.Sort(itemRows, delegate(DataRow row1, DataRow row2)
{
    return row1["title"].ToString().CompareTo(row2["title"].ToString());
});
Die anonyme Methode ist ideal, um die Menge des geschriebenen Codes zu reduzieren, vorausgesetzt Sie müssen die comparer-Funktion nicht mehr verwenden.
Sobald das DataRow-Array sortiert wurde, können Sie die Elemente durchlaufen und den Titel und das pubDate (falls vorhanden) erfassen, wie in Abbildung 6 dargestellt. Wenn das pubDate vorhanden ist, können Sie es entsprechend formatieren und den Titel und das pubDate in ein Zeichenfolgen-Array laden, mit dem Sie dann die Listenansicht laden. Es sollte eine Liste angezeigt werden, wie sie in Abbildung 2 angezeigt wird.
foreach (DataRow itemRow in itemRows)
{
    string title = itemRow["title"].ToString();
    string[] displayInfo = new string[2];
    displayInfo[0] = title;
    if (containsPubDate)
    {
        string pubDateString = 
            itemRow.Table.Columns.Contains("pubDate") ? 
                itemRow["pubDate"].ToString() : string.Empty;
        DateTime pubDate = ParseDateTime(pubDateString);
        displayInfo[1] = pubDate.ToString("MM/dd/yyyy HH:mm");
    }

    ListViewItem item = new ListViewItem(displayInfo);
    item.Tag = itemRow;
    lvFeed.Items.Add(item);
}

Anzeigen mit dem WebBrowser-Steuerelement
Wenn der Benutzer ein Element auswählt, wird das ListViewItem überprüft und die DataRow des ausgewählten Elements aus der Tag-Eigenschaft abgerufen. Die DataRow, die das ausgewählte Element enthält, wird an den Konstruktor für das ItemSummary-Formular übergeben, das die Beschreibung des ausgewählten Elements anzeigt. Verwenden Sie kein Bezeichnungs-Steuerelement, um die Beschreibung anzuzeigen, da die Beschreibung eines Elements in einem RSS-Feed oftmals eingebetteten HTML-Code enthält. Verwenden Sie stattdessen zur Anzeige der Beschreibung das WebBrowser-Steuerelement.
In Abbildung 3 sehen Sie eine Zusammenfassung der Elementbeschreibung im WebBrowser-Steuerelement. Wie Sie erkennen können, enthält die Zusammenfassungsbeschreibung Hyperlinks und andere HTML-Elemente. Um den HTML-Code zu rendern, legen Sie für die DocumentText-Eigenschaft des WebBrowser-Steuerelements als Elementbeschreibung und die Text-Eigenschaft des Formular als Titel des Element fest.
this.Text = itemRow["title"].ToString();
webSummary.DocumentText = itemRow["description"].ToString();
In dieser Anwendung hat das WebBrowser-Steuerelement zwei Funktionen. Das ItemSummary-Formular verwendet es zur Anzeige der Beschreibung des Elements, die unter Umständen HTML-Code enthält. Das Item-Formular verwendet es zur Navigation zu der in der DataRow des Elements angegebenen Verknüpfung. Dabei handelt es sich um die konventionelle Nutzung des WebBrowser-Steuerelements.
this.Text = itemRow["title"].ToString();
webItem.Navigate(new Uri(itemRow["link"].ToString()));
In diesem Beispiel wurde der Titel des Item-Formulars als Titel des Elements festgelegt. Darüber hinaus sind Sie mithilfe der Navigate-Methode zur URL des Elements im WebBrowser-Steuerelement navigiert. Daraufhin wird die Verknüpfung gesucht, und die Seite wird in das WebBrowser-Steuerelement geladen.

Bereitstellen in einem Smartphone
Sobald die Anwendung kompiliert wurde, können Sie sie in einem Smartphone-Gerät bereitstellen. Zu diesem Zeitpunkt sollten Sie das Emulator-Fenster und den Geräteemulator-Manager schließen, damit Sie die Bereitstellung auf einem Smartphone testen können.
Hinweise zum Bereitstellen der Anwendung: Erstellen Sie zuerst ein Smartphone Device CAB-Projekt, und fügen Sie es der aktuellen Lösung hinzu. Führen Sie dann eine Anwendungskompilierung mit .NET Compact Framework 2.0 durch. Dabei muss das Framework auf dem Mobilgerät installiert sein. Sobald Sie diese beiden Schritte durchgeführt haben, können Sie die CAB-Datei auf das Mobilgerät kopieren und die Anwendung installieren.
In diesem Beispiel wurde das CAB-Projekt „MSDN200611“ erstellt und Inhaltsdateien sowie die primäre Ausgabe hinzugefügt. Die Inhaltsdateien erkennen die Symboldatei der Smartphone-Anwendung. In diesem Beispiel wurde zudem eine Verknüpfung zur primären Ausgabe erstellt, und dem CAB-Dateiprojekt wurde der Startmenü-Ordner hinzugefügt. Die Verknüpfung wurde auf den Startmenü-Ordner gezogen, sodass die Anwendung in der Liste der Anwendungen im Startmenü des Smartphones aufgeführt wird. Anschließend können Sie für die Verknüpfung einen kürzen Namen und benutzerfreundlicheren Namen auswählen.

Schlussbemerkung
Wenn Sie datenzentrische mobile Anwendungen mit .NET Compact Framework 2.0 entwickeln, können Sie auf Kenntnisse, die Sie zur Entwicklung von Windows Forms-Anwendungen benötigen, zurückgreifen. In dieser Ausgabe haben Sie gesehen, wie Sie mit ADO.NET RSS-Feeds laden, in den Feeds und den zugehörigen Elementen navigieren und nach RSS-Informationen suchen können. Anonyme Methoden und der asynchroner Aufruf erleichtern den Entwicklungsvorgang. Die Anwendung basiert jedoch weiterhin auf Daten, unabhängig davon, ob es sich um einen RSS-Feed, ein DataSet, ein Array mit DataRow-Objekten oder HTML-Code, der im WebBrowser-Steuerelement für die Elementbeschreibung gerendert wird, handelt.

Senden Sie Ihre Fragen und Kommentare in englischer Sprache an John mmdata@microsoft.com.


John Papa ist Senior .NET Consultant bei ASPSOFT (aspsoft.com) und ein Baseballfan, der an den meisten Sommerabenden mit seiner Familie und seinem treu ergebenen Hund Kadi die Yankees anfeuert. John, ein C# MVP, ist zudem Autor mehrerer Bücher zu ADO, XML und SQL Server und ist häufig Redner bei Branchenkonferenzen, z. B. VSLive. Darüber hinaus schreibt er sein eigenes Blog unter codebetter.com/blogs/john.papa.

Page view tracker