PartialUpdatePanel got some massive improvements in the current release!
Here are some of them
- Added encryption support for UserControl path
- Added support for custom ScriptManager types (includes ToolkitScriptManager)
- Added support for ToolkitScriptManager.CombineScriptsHandlerUrl
- Change UserControlPath using JavaScript during runtime
- Manipulate Parameters serverside during roundtrip
- Fixed issue using validators and rendering in Clientside mode
- Fixed a bug with recreating components
- Added some more demos to show the new features
Attention: If you use this version, you have to make some changes in your code:
- web.config: Add (with user defined value of course)
<appSettings> <add key="PartialUpdatePanel.EncryptionKey" value="k39#9sn1"/> </appSettings>
- The use of parameter collection changed.
new iucon.web.Controls.ParameterCollection()
is no longer supported. Use
iucon.web.Controls.ParameterCollection.Instance
instead
You can find an updated version of the PartialUpdatePanel ASP.NET-Control here: PartialUpdatePanel 1.6.
So what is the PartialUpdatePanel?
The PartialUpdatePanel provides real partial rendering of ASP.NET pages.
By using this control you can experience performance improvements compared to ASP.NET AJAX UpdatePanel, because not all page data needs to be transferred. Only a minimal set of data is being transported between the client and the server before your UserControl is made fully functionable.
Usage scenarios
Exemplary scenarios for the usage of the PartialUpdatePanel are:
- Autonomous sections of your page that require PostBack-support but not the environment information of the entire web page (e.g. data lists with paging support where the user can browse through news, feeds, mails, etc.)
- User feedback when your control has to complete long operations. In this case use a PartialUpdatePanel with render method “Clientside”. The surrounding page will be displayed with a waiting message. The user will receive an adequate feedback that something is going on and he needs to wait until it is done.
More information and a version history can be found here: http://www.codeplex.com/PartialUpdatePanel.
On codeproject I wrote an indepth technical article how the PartialUpdatePanel works: http://www.codeproject.com/KB/ajax/PartialUpdatePanel.aspx
Nach einem Server-Neustart beglückte mich heute der SQL Server mit einer Meldung, dass eine Datenbank “suspect” sei. “Was ist das denn???”, fragte ich mich.
Nach ein wenig Recherche fand ich heraus, wann eine Datenbank als suspect markiert wird:
If one or more database files are not available.
If the entire database is not available.
If one or more database files are corrupted.
If a database resource is being held by the operating system.
Quelle: SQL Server Books Online
Da ich weder die Datenbank umbenannt noch Dateien gelöscht hatte, konnte der Status nur bedeuten, dass die Datenbank korrupt ist.
Zur Lösung des Problems kamen folgende Kommandos zum Einsatz:
1) Setzen der Datenbank in exklusiven Modus für Admin-Tätigkeit
ALTER DATABASE myDatabase SET Single_User
2) Setzen der Datenbank in Wartungsmodus
ALTER DATABAS myDatabase SET Emergency
3) Überprüfen der Datenbank Teil 1
DBCC CheckDB ('myDatabase ')
Hier erhält man eine Meldung, mit welchem Modus die Datenbank repariert werden kann
4) Überprüfen der Datenbank Teil 2
DBCC CheckDB ('myDatabase', REPAIR_ALLOW_DATA_LOSS)
5) Zurücksetzen der Datenbank in shared-Modus
ALTER DATABASE myDatabase SET Multi_User
Das hat das Problem bei mit gelöst. Zum Glück gingen trotz REPAIR_ALLOW_DATA_LOSS keine Daten verloren.
If you want to add a menu item to the ObjectExplorer’s context menu, the proceeding is quite simple.
Create a class that inherits from ToolsMenuItemBase
public class MenuItem : ToolsMenuItemBase { public MenuItem() { this.Text = "New menu item"; } protected override void Invoke() { // do something } public override object Clone() { return new MenuItem(); } }
and attach it to the ObjectExplorer’s menu
IObjectExplorerService objectExplorer = ServiceCache.GetObjectExplorer(); objectExplorer.GetSelectedNodes(out nodeCount, out nodes); INodeInformation node = (nodeCount > 0 ? nodes[0] : null); if (_tableMenu == null) { _tableMenu = (HierarchyObject)node.GetService(typeof(IMenuHandler)); MenuItem item = new MenuItem(); _tableMenu.AddChild(string.Empty, item); }
What if you now intend to create a menu item that again contains a sub menu? ToolsMenuItemBase provides a method called AddChild. Using this method should be the obvious way to create sub menus.
But any call like item.AddChild(string.Empty, new SubMenuItem()) simply does nothing.
Using Reflector, I found a solution to achieve the desired behaviour.
The trick is to implement an interface called IWinformsMenuHandler. You will need to create a method GetMenuItems. It is here where you can create a new menu hierarchy.
The new class looks like this:
public class MenuItem : ToolsMenuItemBase, IWinformsMenuHandler { public MenuItem() { } protected override void Invoke() { } public override object Clone() { return new MenuItem(); } public System.Windows.Forms.ToolStripItem[] GetMenuItems() { ToolStripMenuItem item = new ToolStripMenuItem("Menu Item"); ToolStripMenuItem subItem = new ToolStripMenuItem("Sub item"); subItem.Click += new EventHandler(SubItem_Click); item.DropDownItems.Add(subItem); item.DropDownItems.Add(new ToolStripSeparator()); item.DropDownItems.Add(new ToolStripMenuItem("Sub item2")); return new ToolStripItem[] { item }; } }
When implementing IWinformsMenuHandler setting the properties of ToolsMenuItemBase will be useless. E.g. this.Text = "Menu item" will be relpaced by ToolStripMenuItem item = new ToolStripMenuItem("Menu Item");. Also Invoke() will never be called, but the event handler of your ToolStripMenuItem.
I am glad to introduce a new addin for SSMS 2008 you might find useful.
The addin attaches a new function to the ObjectExplorer’s context menu.
You can easily generate INSERT statements for all data of a selected table.

Find the setup and sourcecode on my codeplex project CodePlex: DataScripter
Vorige Woche Mittwoch wagten Carsten Schütz und Stefan Sockel den Weg nach Köln zum ersten Deutschlandtermin der Adobe Creative Suite 4 Tour. Wir hatten uns vorgenommen nicht nur mehr über die neuen Features der Adobe Instrumente zu erfahren, sondern auch einen “Shortcut To Brilliant“, also eine Abkürzung zur Brillianz, wie der mutige Untertitel der Veranstaltung verlautbarte, zu erreichen. Was das wohl bedeuten würde? Gespannt folgten wir der kurzen Einführungs-Keynote, die neben der obligatorischen Vorstellung der Sponsoren eine Übersicht über den kommenden Tag bot. Der von uns favorisierte Programmpunkt Erstellen interaktiver Anwendungen sollte erst am späten Nachmittag ganz zum Schluß stattfinden. Bis dahin allerdings sollte uns nicht langweilig werden!
Die neuen Funktionen, idealisierten Arbeitsabläufe und selbst kleinere Veränderungen aller vorgestellter Programme von CS4 überzeugten durchgehend. Die Speaker, die stets zu Zweit den linken und rechten Rand der Bühne besetzten, wußten unterhaltsam und professionell ihr Produkt in Szene zu setzen. Wir gewannen den Eindruck, dass die Vortragenden weniger Vertriebsarbeit leisteten, sondern aus eigener Überzeugung Photoshop und Co. vorstellten.
Zu den neuen Features, die einem in Gedanken hängen bleiben, zählt wahrscheinlich auch das Angstfreie Skalieren bzw., so heißt die Funktion dann im lokalisierten PS CS4, Inhalt beim Skalieren bewahren. Diese Funktion ermöglicht es, ein Bild zu skalieren ohne dabei das Seitenverhältnis beizubehalten. Das klingt zunächst nach schlimmen Verzerren! Der Clou ist aber, dass PS Bildinhalte erkennt, und z.B. nur die Landschaft, nicht aber Gegenstände im Vordergrund skaliert. Eine wirklich tolle Funktion, vor allem wenn man auf einer Website ein Bild in einem extremen Querformat hat. Hier musste man bisher tricksen um ein brauchbares Ergebnis zu erzielen, das Angstfreie Skalieren nimmt einem hier einiges an Arbeit ab! Mehr über diese Funktion erfährt man auch im Shortcut To Brilliant Weblog.
Das war nur ein Beispiel der vielen neuen Funktionen die im Laufe des Tages vorgestellt wurden. Unser Fazit: Ein informativer und, bei allen Marketingmaßnahmen die auf einen einströmen, konstruktiver Tag der einem die neue Revision der Creative Suite näher gebracht hat.
Wenn man in einer Flex-Anwendung ein Image dynamisch nachladen möchte, ist man evtl., je nach Kontext, darauf angewiesen, den Erfolg des Nachladens sicherzustellen. Das kann z.B. dann der Fall sein, wenn das Ausführen von weiteren Programmschritten davon anbhängt. Ein Ansatzpunkt ist das Abfragen des HTTPStatus.
Über einen Listener, der an die entsprechende Image-Komponente attached wird, lässt sich das HTTPStatusEvent überwachen. Über das Property status kann dann der Erfolg des Nachladens überprüft werden.
Einen Haken hat diese Methode allerdings: Der Flash Player erzeugt in den Browsern Netscape, Mozilla, Safari, Opera und IE (Mac) immer den Code 0. Das ist natürlich wenig hilfreich. Mann kann das HTTPStatusEvent jedoch dennoch nutzen, da zu jedem HTTPStatus der Listener anspricht. Fragt man also im Listener noch die bisher geladenen Bytes im Verhältnis zu allen Bytes (Dateigröße des Images) ab, kann man den Erfolg des Nachladens sicherstellen.
Der Actionscript-Code für das Anhängen eines Listener (an einer Image-Komponente):
... private var loadedImage:Image = new Image(); loadedImage.addEventListener(HTTPStatusEvent.HTTP_STATUS, handleImgLoadedHTTPStatus); loadedImage.source = "http://dynamicsource.something"; ...
Der entsprechende Code für die Handler-Funktion:
private function handleImgLoadedHTTPStatus(evt:HTTPStatusEvent):void { switch (evt.status) { case 0: if(loadedImage != null && loadedImage.bytesLoaded == loadedImage.bytesTotal) { // do something very important here... } break; case 404: // if status is send, Code 404 simply means: image has not been found! break; } }
Inspiriert durch den Weblog von Peter deHaan.
If you missed the Storage node in the Object Explorer of your SSMS installation to manage your SQL Express fulltext catalogs, here is the solution!
Find below my new addin for both SSMS 2005 and SSMS 2008.
Once installed the addin, you’ll find a new context menu entry when you select a database:

A click on the menu entry opens the management dialog:

Find the setup and sourcecode on my CodePlex project http://www.codeplex.com/FulltextManager.
Nachdem die Merge-Replikation bei einem unserer Kunden monatelang problemlos lief, ist sie plötzlich ausgefallen. Ein Blick ins Merge-Protokoll zeigte, dass sie nach dem Initialisieren im Status “uploading data changes to the Publisher” stehen geblieben ist. Einige Minuten später folgte dann ein Timeout. Als dieses Problem zum ersten Mal aufgetreten ist, half nur eine komplette Neuinitialisierung des Snapshots mit anschließenden Rebuild. Doch leider ist nach einigen Wochen dasselbe Problem wieder aufgetreten.
Nach längerer Recherche im Internet fand ich einen interessanten Thread über dieses Thema. Anscheinend ist wohl eine SP der Replikation fehlerhaft, was unter bestimmten Umständen zu einer Endlosschleife führt. Dieser Fehler bis zur SQL Server Version 9.0.3282 (Kumulatives Update-Paket 9) aber leider noch nicht behoben.
Ein Workaround besteht momentan im im Setzen des “generation_leveling_threshold” auf den Wert 0. Hierfür muss auf dem Subscriber folgendes Statement ausgeführt werden:
UPDATE sysmergepublications SET [generation_leveling_threshold] = 0
Laut Dokumentation soll der Wert “generation_leveling_threshold” eigentlich über die SP sp_changemergepublication gesetzt werden. Doch das hat in unserem Fall leider keinen Erfolg gebracht. Das korrekte Statement für sp_changemergepublication würde lauten:
exec sp_changemergepublication @publication = 'My Publication', @property = 'generation_leveling_threshold', @value = '0'
Dieser Workaround hat in unserem Fall problemlos funktioniert und seid einigen Wochen läuft die Replikation wieder fehlerfrei. Ein großer Vorteil bei diesem Vorgehen ist, dass der Snapshot nicht neu erstellt werden muss und auch der Subscriber nicht erneut initialisiert werden muss. Nachdem man den Befehle ausgeführt hat läuft beim nächsten Abgleich alles wieder problemlos.









