<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.aspnetzone.de/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Hahne.NET</title><link>http://www.aspnetzone.de/blogs/hahne/default.aspx</link><description>Der Lauf eines .NET-Azubis</description><dc:language /><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>Seiteneinstellungen mit XML Serialization</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2009/06/26/seiteneinstellungen-mit-xml-serialization.aspx</link><pubDate>Fri, 26 Jun 2009 08:07:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:210922</guid><dc:creator>Hahne</dc:creator><slash:comments>1</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/210922.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=210922</wfw:commentRss><description>Hallo,&lt;br&gt;in den letzten Tagen bin ich mal wieder auf ein kleines Problem gestoßen, welches ich euch nicht vorenthalten möchte. &lt;br&gt;&lt;br&gt;Ich hatte eine Möglichkeit gesucht gewissen Seiteneinstellung wie z.B. Seitentitel oder ausgewähltes Theme dauerhaft abzuspeichern OHNE dabei eine Datenbank verwenden zu müssen. &lt;br&gt;&lt;br&gt;Meine erste Überlegung dabei war, meine Einstellungen in der Web.Config under der Sektion appSettings zu speichern. Diese Art und Weise war jedoch nicht sehr gut und sauber da die Webseite nach jeder dynamischen Änderung der Web.Config neu kompiliert wurde und diverese andere Fehler aufgetreten sind. &lt;br&gt;&lt;br&gt;Mit Hilfe eines Kollegen bin ich dann auf das Thema XML Serialization gestoßen. XML Serialization macht dabei nichts anderes, als Objekte in eine XML Struktur zu schreiben welche ebenso auch wieder ausgelesen werden kann und wieder zum Objekt konvertiert werden kann. &lt;br&gt;&lt;br&gt;Also habe ich folgendes gemacht: Zuerst hatte ich mir eine Klasse angelegt welche diverse Getter und Setter beinhaltet die für die Einstellungen auf meiner Seite wichtig sind.&lt;br&gt;&lt;br&gt;Settings.cs:&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; strTitle;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; strTheme;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; Settings()&lt;br /&gt;{&lt;br /&gt;     &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// TODO: Konstruktorlogik hier hinzufügen&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; Settings(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; valTitle, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; valTheme, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; valAuthor, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; valCopy, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; valStatus)&lt;br /&gt;{&lt;br /&gt;     strTitle &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; valTitle;&lt;br /&gt;     strTheme &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; valTheme;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; Title&lt;br /&gt;{&lt;br /&gt;     get { &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; strTitle; }&lt;br /&gt;     set { strTitle &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; value; }&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; Theme&lt;br /&gt;{&lt;br /&gt;     get { &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; strTheme; }&lt;br /&gt;     set { strTheme &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; value; }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Anschließend habe ich eine Klasse erstellt, welche meine Werte von einem Settingsobjekt in eine XML Struktur schreibt bzw. wieder ausliest. Dabei müssen die Namespaces System.IO und System.XML.Serialization eingebunden werden.&lt;br&gt;&lt;br&gt;AppConfiguration.cs:&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; strAppCfgPath;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; AppConfiguration(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; valPath)&lt;br /&gt;{&lt;br /&gt;     strAppCfgPath &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; valPath;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; SerializeAppConfig(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; _settings)&lt;br /&gt;{&lt;br /&gt;     XmlSerializer _serializer &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; XmlSerializer(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;typeof&lt;/span&gt;(Settings));&lt;br /&gt;     FileStream _stream &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; FileStream(ConfigPath, FileMode.Create);&lt;br /&gt;     _serializer.Serialize(_stream, _settings);&lt;br /&gt;     _stream.Close();&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; Settings DeserializeAppConfig()&lt;br /&gt;{&lt;br /&gt;     XmlSerializer _serializer &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; XmlSerializer(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;typeof&lt;/span&gt;(Settings));&lt;br /&gt;     FileStream _stream &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; FileStream(ConfigPath, FileMode.Open);&lt;br /&gt;     Settings _settings &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; (Settings)_serializer.Deserialize(_stream);&lt;br /&gt;     _stream.Close();&lt;br /&gt;     &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; _settings;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; ConfigPath&lt;br /&gt;{&lt;br /&gt;     get { &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; strAppCfgPath; }&lt;br /&gt;     set { strAppCfgPath &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; value; }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Nun habe ich die Möglichkeit im PreInit-Event meiner Seiten die Werte aus der XML Datei auszulesen...&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;AppConfiguration _appcfg &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; AppConfiguration(MapPath(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;""&lt;/span&gt;) &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"\\App_Data\\settings.xml"&lt;/span&gt;);&lt;br /&gt;Settings _settings &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; _appcfg.DeserializeAppConfig();&lt;br /&gt;Response.Write(_settings.Title);&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;... bzw. neue Daten in der XML Datei zu speichern.&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Settings _settings &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; Settings(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Seitentitel"&lt;/span&gt;, &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Theme"&lt;/span&gt;);&lt;br /&gt;AppConfiguration _appcfg &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; AppConfiguration(MapPath(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;""&lt;/span&gt;) &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"\\App_Data\\settings.xml"&lt;/span&gt;);&lt;br /&gt;_appcfg.SerializeAppConfig(_settings);&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Man sollte jedoch unbedingt darauf achten, dass nur Werte in der XML Datei gespeichert werden, welche nicht für die Sicherheit der Webanwendung relevant sind. Sprich: KEINE PASSWÖRTER oder ähnliches!&lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=210922" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/Tips%20_2600_amp_3B00_%20Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Progressbar im Backgroundworker ansprechen</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/12/09/progressbar-im-backgroundworker-ansprechen.aspx</link><pubDate>Tue, 09 Dec 2008 07:18:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:204837</guid><dc:creator>Hahne</dc:creator><slash:comments>2</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/204837.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=204837</wfw:commentRss><description>Hallo,&lt;br&gt;ich bin vor ein paar Tagen auf ein Problem gestoßen welches den Backgroundworker betrifft. &lt;br&gt;&lt;br&gt;Ich hatte in einem Projekt eine Routine die etwas zeitaufwendiger war. Das Problem war dabei, dass die Applikation jedes mal eingefroren ist wenn ich diese ausgeführt hatte. Also hatte ich dementsprechend versucht mit einem sogenannten Backgroundworker einen asynchronen Methodenaufruf zu starten um die Oberfläche der Anwendung nicht zu beeinträchtigen.&lt;br&gt;&lt;br&gt;Dabei bin ich aber erneut auf ein Problem gestoßen. Ich hatte nämlich in meiner Anwendung eine Progressbar welche ich in meiner Methode immer um einen Wert erhöhen wollte. Ruft man dabei die Progressbar wie gewohnt auf...&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;myProgressbar.Value &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; 5;&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;... erhält man einen Fehler:&lt;br&gt;&lt;br&gt;&lt;i&gt;Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement progressBar1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.&lt;/i&gt;&lt;br&gt;&lt;br&gt;Nun ja wie kann man jetzt aus einem Backgroundworker Prozess auf eine Progressbar zugreifen? Das Zauberwort heisst "Invoke". &lt;br&gt;&lt;br&gt;Zuerst erstellen wir eine eigene Methode welche dazu dient unsere Progressbar um einen bestimmten Wert zu erhöhen:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; UpdateMyProgressbar(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; value)&lt;br /&gt;{&lt;br /&gt;myProgressBar.Value &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; value;&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Anschließend erstellen wir ein Delegate und weisen diesem im DoWork-Event unsere Methode "UpdateMyProgressbar" zu:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;delegate&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; DelegateUpdateProgress(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; value);&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; myBackgroundworker_DoWork(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, DoWorkEventArgs e)&lt;br /&gt;{&lt;br /&gt;DelegateUpdateProgress myProgress &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; DelegateUpdateProgress(UpdateMyProgressbar);&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;for&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; i &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; 0; i &amp;lt; 100; i++)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Hier der Prozess&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Aktualisieren der Progressbar&lt;/span&gt;&lt;br /&gt;myProgressbar.Invoke(myProgress, i);&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Was ist ein Delegate? Auszug aus MSDN:&lt;br&gt;&lt;i&gt;Mit dem &lt;b&gt;delegate&lt;/b&gt;-Schlüsselwort wird ein Referenztyp deklariert,
mit dem eine benannte oder eine anonyme Methode gekapselt werden kann.
Delegaten entsprechen den Funktionszeigern in C++, sie sind jedoch
typsicher und geschützt.&lt;/i&gt;&lt;br&gt;&lt;br&gt;Als letztes können wir nun unseren Backgroundworker ganz einfach (z.B. im Form_Load-Event) aufrufen:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;myBackgroundworker.RunWorkerAsync();&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=204837" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/Tips%20_2600_amp_3B00_%20Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Endlich wieder daheim!</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/10/18/endlich-wieder-daheim.aspx</link><pubDate>Sat, 18 Oct 2008 15:56:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:203206</guid><dc:creator>Hahne</dc:creator><slash:comments>0</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/203206.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=203206</wfw:commentRss><description>Endlich wieder zuhause!&lt;br&gt;&lt;br&gt;Es ist vermutlich schon aufgefallen, dass ich schon längere Zeit keinen Blogeintrag mehr geschrieben habe. Grund war, dass ich mit diversen Azubis aus dem Norden Deutschlands auf Studienreise in Brüssel war. &lt;br&gt;&lt;br&gt;Wir haben uns dort unter anderem das EU-Parlament und das Nato-Hauptquartier angeschaut.&lt;br&gt;&lt;br&gt;Ab Montag geht es jedoch dann wieder los mit der Arbeit und mit vielen neuen Posts in meinem Blog! :)&lt;br&gt;&lt;br&gt;Liebe Grüße&lt;br&gt;Hahne&lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=203206" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/Sonstiges/default.aspx">Sonstiges</category></item><item><title>Transparenz mit CSS</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/09/26/transparenz-mit-css.aspx</link><pubDate>Fri, 26 Sep 2008 08:32:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:202458</guid><dc:creator>Hahne</dc:creator><slash:comments>1</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/202458.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=202458</wfw:commentRss><description>Wenn man vor hat z.B. ein Div mit schwarzer Hintergrundfarbe ein wenig transparent zu gestalten stößt man schnell auf die Probleme, dass nicht alle Browser diese Transparenz anzeigen können. &lt;br&gt;&lt;br&gt;Dafür muss man für jeden einzelnen Browser in dem CSS-Element die Transparenz definieren&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;IE: &lt;/b&gt;&lt;br&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;filter:alpha(opacity=90);&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Mozilla: &lt;/b&gt;&lt;br&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;-moz-opacity: 0.90;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Opera: &lt;/b&gt;&lt;br&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;opacity: 0.90;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=202458" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/CSS/default.aspx">CSS</category></item><item><title>Datenbankeinträge in zwei Spalten ausgeben</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/09/17/datenbankeintr-ge-in-zwei-spalten-ausgeben.aspx</link><pubDate>Wed, 17 Sep 2008 06:03:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:202029</guid><dc:creator>Hahne</dc:creator><slash:comments>0</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/202029.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=202029</wfw:commentRss><description>Wer zum Beispiel eine kleine Fotogallery entwickeln möchte wird sicherlich irgendwann überlegen müssen wie es möglich ist, dass die Bilder nicht nur in einer Spalte untereinander stehen sondern ggf. zwei, drei oder vier Bilder in einer Zeile stehen und dann erst eine neue Zeile angefangen wird. &lt;br&gt;&lt;br&gt;Dieses zu realisieren ist nicht wirklich schwer da uns dafür ein Control namens "DataList" zur Verfügung gestellt wird. &lt;br&gt;&lt;br&gt;In diesem Datalist hat man die Möglichkeit die "RepeatDirection" auf horizontal und die "RepeatColumns" auf 2 zu setzen. Sobald man nun das Control an eine Datenquelle bindet werden immer zwei Datensätze in einer Zeile stehen und erst dann wird eine neue Zeile begonnen. &lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=202029" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/Controls/default.aspx">Controls</category><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Methodenüberladung! Einfach klasse!</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/09/15/methoden-berladung-einfach-klasse.aspx</link><pubDate>Mon, 15 Sep 2008 09:21:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:201934</guid><dc:creator>Hahne</dc:creator><slash:comments>2</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/201934.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=201934</wfw:commentRss><description>Hallo ihr!&lt;br&gt;&lt;br&gt;Ich habe mal wieder etwas neues lernen dürfen. Die so genannte "Methodenüberladung". Was ist das eigentlich? Im E-Book von Galileo Computing steht:&lt;br&gt;&lt;br&gt;Zitat: &lt;i&gt;Von einer Methodenüberladung wird bekanntlich gesprochen, wenn sich
zwei gleichnamige Methoden einer Klasse nur in ihrer Parameterliste
unterscheiden.&lt;br&gt;&lt;br&gt;&lt;/i&gt;Genau diese Methodenüberladung habe ich mir jetzt zu nutzen gemacht und bin total begeistert wieviel arbeit man sich dadurch ersparen kann. Hier mal ein Beispiel:&lt;br&gt;&lt;br&gt;Ich rufe bei meinem Seitenaufruf "scheinbar" immer wieder die selbe Methode auf jedoch übergebe jeweils immer andere Werte.&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Aufruf der Methode mit dem Stringparameter&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Ausgabe: "Hello World"&lt;/span&gt;&lt;br /&gt;response.write(myReturn(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Hello World"&lt;/span&gt;));&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Aufruf der Methode mit dem Integerparameter&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Ausgabe: 1024&lt;/span&gt;&lt;br /&gt;response.write(myReturn(1024).ToString());&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; myReturn(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; myStringValue)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; myStringValue;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; integer myReturn(integer myIntegerValue)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt; myIntegerValue;&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Was ich hier jetzt gemacht habe ist, dass ich jeweils immer eine Methode mit dem gleichen Namen angelegt habe, wobei sich diese lediglich durch die Parameter unterscheiden. Je nachdem ob ich einen String oder einen Integer als Parameter mitgebe wird beim Methodenaufruf eine der beiden Methoden ausgeführt. &lt;br&gt;&lt;br&gt;Man sollte einfach mal ein wenig mit der Methodenüberladung experimentieren. Man kann damit viele nützliche und tolle Sachen realisieren und viel Zeit sparen! &lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=201934" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/Code%20sparen/default.aspx">Code sparen</category><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Unnütze Code sparen</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/09/10/unn-tze-code-sparen.aspx</link><pubDate>Wed, 10 Sep 2008 07:42:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:201802</guid><dc:creator>Hahne</dc:creator><slash:comments>1</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/201802.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=201802</wfw:commentRss><description>Hallo,&lt;br&gt;seit langem melde ich mich auch mal wieder! &lt;br&gt;&lt;br&gt;Ich habe im laufe meines Projektes an dem ich z.Z. arbeite immer wieder Stellen entdecken können an denen man sehr gut Codezeilen einsparen konnte und der Code dabei gut lesbar blieb. So hatte ich z.B. einen solchen Fall bei meinem Login. Ich hatte in einer Klasse meine Prüfung ob der User erfolgreich eingeloggt worden ist. Diese gab dementsprechend dann "true" bzw. "false" zurück. Auf der Seite "Login.aspx", wo mein Logincontrol platziert war, hatte ich als erstes einen ziemlich langen Code stehen...&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(Auth.UserAuth(Login1.UserName, Login1.Password))&lt;br /&gt;{&lt;br /&gt;e.Authenticated &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;true&lt;/span&gt;;&lt;br /&gt;}&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;else&lt;/span&gt;{&lt;br /&gt;e.Authenticated &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;false&lt;/span&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;... welcher nach längerem Betrachten auch super gut abgekürzt werden konnte indem ich folgendes schrieb:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;e.Authenticated &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Auth.UserAuth(Login1.UserName, Login1.Password));&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Was ich damit sagen will ist, dass man sich auch mal genügend Zeit nehmen sollte um den Code genau anzuschauen und zu gucken ob man diesen nicht ggf. auch mal wie in meinem Fall Codezeilen kürzer und effizienter schreiben könnte. Wobei man dabei auch vorsichtig sein muss, dass der Code dadurch nicht unlesbar wird! &lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=201802" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/Code%20sparen/default.aspx">Code sparen</category><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Zeilenumbrüche in der Datenbank speichern</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/08/28/zeilenumbr-che-in-der-datenbank-speichern.aspx</link><pubDate>Thu, 28 Aug 2008 05:53:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:201200</guid><dc:creator>Hahne</dc:creator><slash:comments>3</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/201200.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=201200</wfw:commentRss><description>Hallo!&lt;br&gt;Gestern hatte ich an einem Formular gearbeitet welches die eingegebenen Daten ganz einfach in eine SQL-Datenbank speichert. Als ich diese dann wieder ausgegeben habe waren aber jedesmal die Zeilenumbrüche die ich vorher mit der "Enter"-Taste eingefügt habe verschwunden.&lt;br&gt;&lt;br&gt;Meine Frage: Wie bekomme ich das jetzt hin, dass Zeilenumbrüche in der Datenbank gespeichert werden?&lt;br&gt;&lt;br&gt;Ganz ehrlich. Ich habe es mir schwerer vorgestellt. Vorerst muss jedem klar sein, dass Zeilenumbrüche in einer Textbox (die mit einem "Enter"-Tastendruck hinzugefügt werden) mit \n dargestellt werden. Diese müssen vor dem abspeichern in die Datenbank einfach durch ein &amp;lt;br /&amp;gt; ersetzt werden.&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//String erstellen und Textboxwert übergeben&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; strMessage &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; txtMessagebox.Text;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Zeichen ersetzen durch ein Zeilenumbruch &amp;lt;br&amp;gt;&lt;/span&gt;&lt;br /&gt;strMessage &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; strMessage.Replace(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"\n"&lt;/span&gt;, &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=201200" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/SQL_2F00_DB/default.aspx">SQL/DB</category><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Programmierte Website ruckelt im IE</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/08/27/programmierte-website-ruckelt-im-ie.aspx</link><pubDate>Wed, 27 Aug 2008 10:11:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:201155</guid><dc:creator>Hahne</dc:creator><slash:comments>1</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/201155.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=201155</wfw:commentRss><description>Hallo!&lt;br&gt;Ich stand in den letzten beiden Tagen mal wieder vor einem Problem was ich nun glücklicherweise gelöst habe. Dieses möchte ich euch natürlich nicht vorenthalten! &lt;br&gt;&lt;br&gt;Ich habe für meinen Freundeskreis ein kleines Gästebuch programmiert wobei ich Hintergrundbilder verwendet habe die transparent waren und immer eine Größe von ca. 2 x 1 Pixel hatten. Diese Hintergrundbilder habe ich in meinem CSS als Hintergrundbilder definiert und dann in meinen Tabellen u.s.w. wieder verwendet. Das Problem war jetzt nur, dass wenn man die Seite mit dem Internet Explorer angeschaut hat diese total am ruckeln war. Das Problem trat jedoch nur im IE auf und nicht in anderen Browsern wie z.B. Firefox oder Safari.&lt;br&gt;&lt;br&gt;Anscheind kann der IE diese kleinen und immer wiederholenden Bilddateien nicht so schnell verarbeiten, sodass ich alle meine Hintergrundbilder vergrößert habe.&lt;br&gt;&lt;br&gt;Nun läuft alles prima! &lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=201155" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/Tips%20_2600_amp_3B00_%20Tricks/default.aspx">Tips &amp;amp; Tricks</category></item><item><title>Codeparser.NET</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/08/26/codeparser-net.aspx</link><pubDate>Tue, 26 Aug 2008 05:51:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:201035</guid><dc:creator>Hahne</dc:creator><slash:comments>0</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/201035.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=201035</wfw:commentRss><description>Hallooooooooooooooo!&lt;br&gt;Ich habe mal wieder Zeit gehabt um ein wenig im Internet zu stöbern und bin dabei auf den Codeparser.NET gestoßen.&lt;br&gt;&lt;br&gt;Was ermöglichst uns dieser Codeparser.NET? Er hilft uns dabei den sogenannten BB-Code ins ganz normale HTML zu übersetzen. Ich finde dieses Tool spitze und habe es schon in einer meiner Webanwendungen verbaut.&lt;br&gt;&lt;br&gt;&lt;a href="http://www.codeparser.net/"&gt;http://www.codeparser.net/&lt;/a&gt;&lt;br&gt;&lt;br&gt;BB-Code? Was ist das? &lt;br&gt;Bestimmt hat jeder schon einmal BB-Code verwendet. Hauptsächlich in irgendwelchen Internetforen. Einige Befehle laute z.B. so:&lt;br&gt;&lt;br&gt;[code]...[/code]&lt;br&gt;[IMG]...[/IMG]&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=201035" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/Tips%20_2600_amp_3B00_%20Tricks/default.aspx">Tips &amp;amp; Tricks</category></item><item><title>Paging mit PagedDataSource-Objekt</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/08/25/paging-mit-pageddatasource-objekt.aspx</link><pubDate>Mon, 25 Aug 2008 10:28:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:201004</guid><dc:creator>Hahne</dc:creator><slash:comments>0</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/201004.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=201004</wfw:commentRss><description>Hallo,&lt;br&gt;ich habe mich heute mal ein wenig mit dem Thema Paging auseinander gesetzt da ich z.Z. an einem Gästebuch arbeite welches die Ausgaben über ein Repeater macht. Da ich aber nicht alle Einträge auf einer Seite stehen haben möchte wollte ich gerne eine Pagerfunktion einbauen. &lt;br&gt;&lt;br&gt;Also habe ich mir einmal das PagedDataSource-Objekt zu herzen genommen. &lt;br&gt;&lt;br&gt;Zuerst habe ich ganz normal meine Daten aus der Datenbank abgefragt und diese in ein DataSet-Objekt gespeichert. Anschließend habe ich dann die wichtigen Einstellungen für das Paging vorgenommen:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Objekt erstellen&lt;/span&gt;&lt;br /&gt;PagedDataSource myPagedSource &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; PagedDataSource();&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Die DataSet-Tabelle an das PagedDataSource-Objekt binden&lt;/span&gt;&lt;br /&gt;myPagedSource.DataSource &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; myDataSet.Tables[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Tablename"&lt;/span&gt;].DefaultView;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Paging erlauben&lt;/span&gt;&lt;br /&gt;myPagedSource.AllowPaging &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Festlegen wieviel Datensätze pro Seite dargestellt werden sollen&lt;/span&gt;&lt;br /&gt;myPagedSource.PageSize &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; 10;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//Aktuelle Seite; die Variable CurrentPage ist die Nummer der aktuellen Seite&lt;/span&gt;&lt;br /&gt;myPagedSource.CurrentPageIndex &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; CurrentPage;&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Als letztes muss das PagedDataSource-Objekt nur noch an den Repeater gebunden werden. &lt;br&gt;&lt;br&gt;Den CurrentPageIndex kann man jetzt ganz einfach ändern indem man über Links die nächst höhere bzw. kleinere Seite über z.B. einen QueryString mitteilt (z.B. Default.aspx?page=3).&lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=201004" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/Darstellung%20_2600_amp_3B00_%20Design/default.aspx">Darstellung &amp;amp; Design</category></item><item><title>Eigene Fehlerseiten erstellen</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/08/15/html-fehlerseite-anstatt-fehlerstapel-berwachung.aspx</link><pubDate>Fri, 15 Aug 2008 10:30:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:200632</guid><dc:creator>Hahne</dc:creator><slash:comments>1</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/200632.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=200632</wfw:commentRss><description>Um einigen Webseitenbenutzer komplizierte Fehlerseiten zu ersparen ist es in ASP.NET möglich eigene Fehlerseiten in der Web.Config zu definieren. &lt;br&gt;&lt;br&gt;Im Bereich "&amp;lt;system.web&amp;gt;" kannt man den Bereich "&amp;lt;customErrors&amp;gt;" anlegen.&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;customErrors mode=&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"RemoteOnly"&lt;/span&gt; defaultRedirect=&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"App_Error/Default.aspx"&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;error statusCode=&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"404"&lt;/span&gt; redirect=&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"App_Error/FileNotFound.aspx"&lt;/span&gt;/&amp;gt;&lt;br /&gt;&amp;lt;/customErrors&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Im Bespielcode wurden gerade zwei eigene Fehlerseiten definiert. Eine Defaultfehlerseite und eine für den Fehler 404 (Datei nicht gefunden). &lt;br&gt;&lt;br&gt;&lt;b&gt;mode:&lt;/b&gt; Modus ob die Fehlerseiten angezeigt werden dürfen (On, Off, RemoteOnly)&lt;br&gt;&lt;br&gt;&lt;b&gt;defaultRedirect:&lt;/b&gt; Fehlerseite, welche angezeigt wird wenn keiner der definierten Fehler aufgetreten ist. &lt;br&gt;&lt;br&gt;&lt;b&gt;statusCode:&lt;/b&gt; Art der Fehlermeldung (Auflistung aller Meldungen findet ihr auf &lt;a href="http://de.selfhtml.org/servercgi/server/httpstatuscodes.htm" target="_blank"&gt;SelfHTML.org&lt;/a&gt;)&lt;br&gt;&lt;br&gt;&lt;b&gt;redirect:&lt;/b&gt; Fehlerseite, die bei definierten Fehler aufgerufen werden soll&lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=200632" width="1" height="1"&gt;</description><category domain="http://www.aspnetzone.de/blogs/hahne/archive/tags/Web_2E00_Config/default.aspx">Web.Config</category></item><item><title>Willkommen!</title><link>http://www.aspnetzone.de/blogs/hahne/archive/2008/08/15/willkommen.aspx</link><pubDate>Fri, 15 Aug 2008 06:42:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:200626</guid><dc:creator>Hahne</dc:creator><slash:comments>1</slash:comments><comments>http://www.aspnetzone.de/blogs/hahne/comments/200626.aspx</comments><wfw:commentRss>http://www.aspnetzone.de/blogs/hahne/commentrss.aspx?PostID=200626</wfw:commentRss><description>Ich möchte zuerst einmal alle Besucher meines Blogs willkommen heissen! &lt;br&gt;&lt;br&gt;Ich habe diesen Blog errichtet um im laufe meiner Ausbildung, welche ich im letzten Jahr (2007) begonnen habe, Lösungen von Problemen zu posten auf die ich in der Zeit so gestoßen bin. Dabei gelten die Beiträge einerseits für mich als Nachschlagewerk um mir irgendwann noch einmal Dinge vor Augen führen zu können aber ebenfalls möchte ich euch meine Beiträge nicht vorenthalten und ich hoffe, dass ich einigen von euch auch mit meinem Posts helfen kann. &lt;br&gt;&lt;br&gt;Gruß&lt;br&gt;Hahne&lt;br&gt;&lt;img src="http://www.aspnetzone.de/aggbug.aspx?PostID=200626" width="1" height="1"&gt;</description></item></channel></rss>