Zahlensortierung nicht in numerischer Reihenfolge

13/06/2008 - 15:35 von uwe | Report spam
Hallo Zusammen,

Bei einem Dataform-Webpart einer benutzerdefinierten Liste wird bei
Nutzung der Sortierung für Spaltenüberschriften und Verwendung einer
Spalte mit dem Format "Zahlen"nicht nach der numerischen Reihenfolge
sortiert, sondern in der Form: ..1000,1001,1002,201,202,... (wobei die
Zahlen in der Spalte 1-200 nicht vorhanden sind). Bei der
Konfiguration handelt es sich um WSS 3.0 SP1, Windows Server 2003 SP2
und das Dataform-Webpart wurde mit Sharepoint Designer 2007 SP1 per
XLST-Umwandlung aus der Listenansicht erstellt. In der ursprünglichen
Listenansicht funktioniert die Sortierung erwartungsgemàß, allerdings
zeigt das Sortiermenü eine andere Auswahl ("von groß nach klein/ von
klein nach groß"). Bei der Dataform-Version gibt es hier die Auswahl
"Aufsteigend/Absteigend". Augenscheinlich ignoriert der Designer hier
die Tatsache, dass es sich um eine Zahlenspalte handelt.
Hier der zugehörige XLS-Spaltenkopfausdruck
<!--Nr-->
<TH nowrap="" scope="col" class="style1">
<xsl:call-template name="dvt.headerfield" ddwrt:atomic="1"
xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/
runtime">
<xsl:with-param name="fieldname">@_ID</xsl:with-param>
<xsl:with-param name="fieldtitle">Nr</xsl:with-param>
<xsl:with-param name="displayname">Nr</xsl:with-param>
<xsl:with-param name="sortable">1</xsl:with-param>
<xsl:with-param name="fieldtype">x:float</xsl:with-param>
</xsl:call-template>
</TH>
Weiß jemand, wie man das Dataform-Webpart dazu bringt, die Zahlen
ordnungsgemàß zu sortieren?
Schon jetzt besten Dank für die Hilfe.

Gruß
Uwe Müller
 

Lesen sie die antworten

#1 Hannes Skibba
29/07/2008 - 20:48 | Warnen spam
Hallo Herr Müller,
ich nehme an Sie haben das Problem schon gelöst oder umgangen.
Da mich das Problem selber den ganzen Tag gequàlt hat und ich glaube das
andere das selbe Problem haben könnten, hier eine mögliche Lösung:

Der eigentliche Sortiervorgang wird im Code durch folgende Zeile durchgeführt:
<xsl:sort select="*[name() = $dvt_sortfield] | @*[name() = $dvt_sortfield] |
text()[name(ancestor::*[1]) = $dvt_sortfield]" order="{$dvt_sortdir}"
data-type="{$dvt_sorttype}" />

(Im Anschluss kann evtl. noch ein 2. xsl:sort kommen, falls im
Sharepointdesigner eine Standard Sortierung vorgenommen wurde, dazu zum
Schluß noch ein Kommentar)

Das Attribut date-type legt fest wie die Ursprungsdaten aussehen, entweder
"Text" oder "Number".

Dieses wird durch den Parameter: $dvt_sorttype definiert.

Dieser wird einmalig relativ am Anfang festgelegt:
<xsl:param name="dvt_sorttype">text</xsl:param>
und wird sonst nicht geàndert, von daher werden alle Sortiervorgànge wie
Texte behandelt.

Ich habe die Parametereinstellung bei mir jetzt wie folgt angepasst:

<xsl:param name="dvt_sortfield"></xsl:param>
<xsl:param name="dvt_sorttype">
<xsl:if test="$dvt_sortfield = 'ows_Spaltenname'">number</xsl:if>
<xsl:if test="$dvt_sortfield != 'ows_Spaltenname'">text</xsl:if>
</xsl:param>

wobei die erste Zeile daran erinnern soll, den dvt_sortfield Parameter zu
schließen.
ows_Spaltenname gibt die Spalte an, die numerisch geordnet werden soll.

Für nur eine numerische Spalte funktioniert die Lösung super. Ansonsten muss
ein anderes Kriterium gewàhlt werden, das numerische Spalten identifiziert.

Nun noch ein Kommentar zu der 2. Sort Zeile, diese gibt die Standard
Sortierung an, falls eine im Vorfeld festgelegt worden ist. Ich habe diese von
<xsl:sort select="substring-before(substring-after(@Spaltenamen,'#'),'.')"
order="descending" />
in
<xsl:sort select="substring-before(substring-after(@Spaltename,'#'),'.')"
order="{$dvt_sortdir}" data-type="number" />
geàndert (ursprünglich ein kalkulierte Spalte vom typ float) und dvt_sortdir
mit dem DefaultValue="descending" im Parameterbinding block belegt.

Damit war das Problem bei mir gelöst. Eine Lösung für mehrere Spalten
reichen ich evtl. spàter noch nach.

viele grüße,

Hannes Skibba
"uwe" wrote:

Hallo Zusammen,

Bei einem Dataform-Webpart einer benutzerdefinierten Liste wird bei
Nutzung der Sortierung für Spaltenüberschriften und Verwendung einer
Spalte mit dem Format "Zahlen"nicht nach der numerischen Reihenfolge
sortiert, sondern in der Form: ..1000,1001,1002,201,202,... (wobei die
Zahlen in der Spalte 1-200 nicht vorhanden sind). Bei der
Konfiguration handelt es sich um WSS 3.0 SP1, Windows Server 2003 SP2
und das Dataform-Webpart wurde mit Sharepoint Designer 2007 SP1 per
XLST-Umwandlung aus der Listenansicht erstellt. In der ursprünglichen
Listenansicht funktioniert die Sortierung erwartungsgemàß, allerdings
zeigt das Sortiermenü eine andere Auswahl ("von groß nach klein/ von
klein nach groß"). Bei der Dataform-Version gibt es hier die Auswahl
"Aufsteigend/Absteigend". Augenscheinlich ignoriert der Designer hier
die Tatsache, dass es sich um eine Zahlenspalte handelt.
Hier der zugehörige XLS-Spaltenkopfausdruck
<!--Nr-->
<TH nowrap="" scope="col" class="style1">
<xsl:call-template name="dvt.headerfield" ddwrt:atomic="1"
xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/
runtime">
<xsl:with-param name="fieldname">@_ID</xsl:with-param>
<xsl:with-param name="fieldtitle">Nr</xsl:with-param>
<xsl:with-param name="displayname">Nr</xsl:with-param>
<xsl:with-param name="sortable">1</xsl:with-param>
<xsl:with-param name="fieldtype">x:float</xsl:with-param>
</xsl:call-template>
</TH>
Weiß jemand, wie man das Dataform-Webpart dazu bringt, die Zahlen
ordnungsgemàß zu sortieren?
Schon jetzt besten Dank für die Hilfe.

Gruß
Uwe Müller

Ähnliche fragen