DotNetNuke 05.00.00 Docs – Wieder nur eine Mogelpackung

Nachdem bereits die letzten Versionen (seit über 2 Jahren) von DotNetNuke keine aktualisierte Dokumentationen enthalten haben, wird leider auch mit der aktuellen Version 5.0 eine weitere Dokumentation’s Mogelpackung zum Download bereitgestellt.

Das mit DotNetNuke 05.00.00 Docs bezeichnete Download enthält nur alte Dokumentationen (letzte Aktualisierung am 21.06.2006) .

Dann werden wir wohl die dringenden Fragen doch im Forum der Deutschen DotNetNuke Community klären müssen.

Hierzu habe ich auch einen neuen Bereich im Forum eingerichtet.

DotNetNuke 5.0 – Frohe Weihnachten

Wie eigentlich nicht anders zu erwarten war, wurde der Final Release der Version 5.0, der Open Source Software DotNetNuke, am 24. Dezember 2008 und damit auf den Tag genau 6 Jahre nach der ersten Veröffentlichung, damals noch als IBuySpy Workshop, zum Download für die Öffentlichkeit bereitgestellt.

Nachdem ich selbst vor 6 Jahren an den Weihnachtstagen im Jahr 2002 diese erste Version des späteren DotNetNuke heruntergeladen und damit experimentiert hatte, war ich von dem Virus befallen, der mich bis Heute auch nicht wieder verlassen hat.

Wer mehr zur Historie von DNN (wie DotNetNuke in der Umgangssprache genannt wird) erfahren möchte kann dies in diesem Beitrag auf DotNetNuke.com nachlesen (Bericht in Englischer Sprache).

Von Januar 2004 an wurde alles was das Projekt an Versionen bereitgestellt hat, auf Sourceforge.NET veröffentlicht.

Die neue Version 5.0 und auch ein erstes Maintenance Release, Version 4.9.1, sind nun auf Codeplex, der Microsoft eigenen Open Source Plattform gehostet, was Microsoft sicherlich freuen dürfte und woran MS vermutlich auch nicht ganz unbeteiligt sein wird.

Hier geht es direkt zum Download der Version 5.0 auf Codeplex

Hier geht es direkt zum Download der Version 4.9.1 auf Codeplex

Übrigens sind alle Versionen ab 2004 nun auch auf Codeplex zum Download verfügbar. Das lässt vermuten, dass die Verbindung zwischen DotNetNuke und Sourceforge endgültig beendet ist.

Und nicht zu vergessen:

image

DotNetNuke – Blog Module Maintenance Release Version 3.05.01 veröffentlicht

Ohne große Ankündigung und ohne genaue Beschreibung welche Probleme gelöst wurden, wurde vergangenes Wochenende ein Maintenance Release des Blog Moduls für DotNetNuke veröffentlicht.

Die Versionsnummer dieser Version lautet 3.05.01.

Die neue Version kann man hier herunterladen.

ReSharper 4.1 verfügbar

Seite Heute ist die neue Version 4.1 des Software Tools ReSharper verfügbar.

Die Version kann man hier herunterladen.

Die wichtigsten Feature dieser Version sind:

  • Support für Microsoft Visual Studio 2008 SP1
  • Verbesserte ASP.NET Bearbeitung
  • Geschwindigkeit Verbesserungen
  • … und vieles mehr

++ Nachtrag vom 05.12.2008 ++

Bitte die Hinweise im Kommentar zur Veröffentlichung dieses Beitrags beachten. Eigentlich sollte dieser Beitrag am 02.09.2008 und nicht am 02.12.2008 an den Blog übertragen werden. Nun ist aber wie von Geisterhand dieser Beitrag in einem Mail Server hängen geblieben um dann exakt 3 Monate später ebenfalls wie von Geisterhand doch an den Blog übertragen zu werden.

DotNetNuke 5.0 RC2 Öffentlich verfügbar

Das ist Neu, zum ersten mal auch ein Release Candidate einer DotNetNuke Version öffentlich für alle Zugänglich.

DotNetNuke Version 5.0 (RC2) steht seit letzter Nacht zum Download für die Öffentlichkeit zur Verfügung.

Aber Achtung, auch wenn die Version nun öffentlich zugänglich ist, sollte man diese Version nicht für den Live Einsatz eines Portals verwenden, welches man, nicht nachdem die endgültige Version fertiggestellt wurde wieder, löscht und mit der offiziellen Version neu aufbaut.

Ich erinnere mich noch an die Probleme die es, sowohl bei der 3er als auch bei der 4er Version, gab, wenn man die Beta Versionen später versucht hat mit einer aktuelleren Version zu aktualisieren. Da fehlte es hier und da, vor allem an Konsistenz in der Datenbank.

Also Finger weg vom Live Einsatz dieser Version.  Auf jeden Fall dann wenn man mit dem Gedanke spielt, diese nach Veröffentlichung des offiziellen Release weiter betreiben zu wollen.

Hier geht es zum Download der DotNetNuke Version 5.0 RC 2 (Cambrian)

DotNetNuke Cambrian Installation auf Windows XP

In den letzten Wochen haben mir einige Leute, die in den Genuss der Beta Version bzw. des Release Kandidaten von DotNetNuke 5.0 (Cambrian) gekommen sind, über folgendes Problem bei der Installation berichtet.

Das Problem ist übrigens auch im offiziellen englischsprachigen DotNetNuke Forum beschrieben, allerdings ohne eine entsprechende Lösung für das Problem zu beinhalten.

Hier nun die Problembeschreibung:

Beim Versuch der Installation auf einem Windows XP Rechner erhält man plötzlich folgende Fehlermeldung:

System.NullReferenceException: Object reference not set to an instance of an object. at DotNetNuke.UI.Utilities.MSAJAX.Serialize(Object Obj) 
at DotNetNuke.UI.Utilities.ClientAPI.SerializeClientVariableDictionary(Page objPage, Dictionary`2 objDict) 
at DotNetNuke.UI.Utilities.ClientAPI.CAPIPreRender(Object Sender, EventArgs Args) 
at System.Web.UI.Control.OnPreRender(EventArgs e) 
at System.Web.UI.HtmlControls.HtmlInputHidden.OnPreRender(EventArgs e) 
at System.Web.UI.Control.PreRenderRecursiveInternal() 
at System.Web.UI.Control.PreRenderRecursiveInternal() 
at System.Web.UI.Control.PreRenderRecursiveInternal() 
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Wenn man die Fehlermeldung sehr aufmerksam ließt, dann erhält man eigentlich schon die Antwort auf das Problem beschrieben.

Das Problem liegt in diesem Fall daran, dass die ASP.NET Ajax Extension für ASP.NET 2.0 nicht oder nicht richtig installiert sind.

Die Ajax Extension für ASP.NET 2.0 kann man hier herunterladen.

Wenn die Ajax Extension noch nicht installiert sind, dann einfach die Extension installieren, sonst muss man zuerst die Ajax Extension deinstallieren und dann noch einmal neu installieren.

C# – DataGridView und Zwischenablage

Problemstellung

Die Daten eines DataGridView sollen über die Zwischenablage in verschiedene andere Anwendungen (unter anderem auch in Excel) kopiert und eingefügt werden können.

Hierbei soll es wahlweise Möglich sein, beim kopieren in die Zwischenablage, die Spaltenköpfe des DataGridView mit in die Zwischenablage zu kopieren. Außerdem soll es neben der Tastenkombination Strg + C auch über Programmcode (Button und oder Contextmenü) möglich sein, die Daten in die Zwischenablage zu kopieren.

Umsetzung – Teil 1 Spaltenüberschriften einschließen

Ob die Spaltenköpfe beim kopieren der DataGridView Daten mit einbezogen werden kann über die Eigenschaft ClipboardCopyMode des DataGridView gesteuert werden.

Die Eigenschaft kann auf folgende Werte gesetzt werden:

image

Der Standardwert lautet EnableWithoutHeaderText (Kopieren der markierten Daten ohne Spaltenköpfe).

Um sicherzustellen, dass auch die Spaltenköpfe mit in die Zwischenablage kopiert werden, muss der Wert EnableAlwaysIncludeHeaderText gesetzt werden.

DataGridView1.ClipboardCopyMode = EnableAlwaysIncludeHeaderText ;

Umsetzung – Teil 2 Programmatisches kopieren der Zwischenablage

Um per Programmcode die Daten (mit oder ohne Spaltenköpfe) in die Zwischenablage zu kann der folgende Code verwendet werden:

Clipboard.SetDataObject(DataGridView1.GetClipboardContent(), true);

Neue Versionen der DotNetNuke Blog und News Module verfügbar

Letzte Nacht wurde eine neue Version des Blog Moduls und eine neue Version des News Moduls für DotNetNuke zum Download bereit gestellt.

Hier geht es zum Download der Version 03.05.00 des Blog Moduls

Hier geht es zum Download der Version 04.00.01 des News Moduls

C# – Gebundenes DataGridView – Die Suche geht weiter

Die Anforderung:

In einem gebundenen DataGridView, soll eine Suchfunktion implementiert werden, die es ermöglicht, dass man je nach angewählter Spalte innerhalb der Spalte nach einem in ein Suchfeld einzugebenden Text gesucht werden kann. Allerdings soll nicht nur auf genaue Übereinstimmung, sondern auch nur auf Teil -Übereinstimmung der dem Suchbegriff entsprechende erste Eintrag gefunden werden.

Die Problematik:

Grundsätzlich wird für die Umsetzung der Anforderung von der BindingSource eine Methode Find zur Verfügung gestellt.

Beispiel:

bool found = false;

int i = customerBindingSource.Find(dgCustomer.SortedColumn.DataPropertyName, txtSearch.Text);
if (i > -1)
{
    customerBindingSource.Position = i;
}
else
{
}

Soweit funktioniert das Prima, wenn der Suchtext genau mit dem Inhalt der Zelle entspricht.

Was aber wenn zum Beispiel in einer Spalte die Werte für den Name der erste Eintrag der mir M beginnt gefunden werden soll?

Dann funktioniert die Find Methode nicht, und leider bietet weder die BindingSource noch das DataGridView hierzu eine entsprechende Möglichkeit dies einfach per Methodenaufruf zu realisieren.

Die Eine Lösung:

Schauen wir uns doch mal an, was wir mit dem oben noch leeren Else Zweig anfangen können.

Das wir über die BindingSource nicht weiter kommen haben wir schon festgestellt, also müssen wir uns selbst etwas basteln.

Beispiel:

string searchField = dgCustomer.SortedColumn == null ? 
//Hier einfach den DataPropertyName des gewünschten Standardsuchfeldes wenn keine Spalte markiert ist
dgCustomer.SortedColumn.DataPropertyName;
string searchCellName = dgCustomer.SortedColumn == null ? 
//Hier einfach den Namen des gewünschten Standardsuchfeldes wenn keine Spalte markiert ist
dgCustomer.SortedColumn.Name;
bool found = false;

int i = customerBindingSource.Find(searchField, txtSearch.Text);
if (i > -1)
{
	customerBindingSource.Position = i;
}
else            
{
	foreach (DataGridViewRow row in dgCustomer.Rows)
	{
		if (row.Cells[searchCellName].Value == null)
		{
			continue;
		}

		if (row.Cells[searchCellName].Value.ToString().ToLower().StartsWith(txtSearch.Text.ToLower()))
		{
			i = customerBindingSource.Find(searchField, row.Cells[searchCellName].Value.ToString());
			if (i > -1)
			{
				customerBindingSource.Position = i;
				found = true;
				break;
			}
		}
	}
	if (!found )
	{
		string msg = string.Format(CultureInfo.CurrentUICulture, "{0} {1} konnte nicht gefunden werden", searchField, txtSearch.Text);
		MessageBox.Show(msg);                                                
	}
}

Ich Denke der Code ist selbsterklärend und bedarf keiner weiteren Erklärung.

Wenn ich mich damit täuschen sollte, dann einfach per Kommentar die Fragen stellen, oder noch besser gleich die Antworten geben :-) .