Eine Kollegin kam mit der Frage zu mir, ob die Checkboxes eines Choice-Feldes im SharePoint 2010 auch nebeneinander liegen können.
Nach kurzer Recherche im Code stellte ich mit entsetzen fest, dass dies in der Klasse CheckBoxChoiceField (Methode RenderFieldForInput) hart als Ausgabe einer Html Tabelle implementiert ist. Einen sauberen Weg sich dort mit einer alternativen Ausgabe einzuhängen habe ich leider nicht gefunden.
Eine saubere Möglichkeit wäre die Entwicklung eines eigenen Feldes (CustomFieldType). Dies ist jedoch sehr aufwändig und bei bestehenden Listen nicht nutzbar.
Eine weitere Möglichkeit ist die Verwendung von JavaScript im Browser. Im SharePoint 2010 kann bei jeder Liste das Aussehen der Dialoge angepasst werden. Durch das Ergänzen eines “HTML Form WebPart” in der Anlegenseite (New Form) kann dort JavaScript Code abgelegt werden. Folgender JQuery-Code erlaubt die Darstellung als Tabelle mit einer im Code definierter Anzahl von Spalten. Lediglich die Anpassung des Feldnamens, sowie der Spaltenanzahl ist erforderlich.
<div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var columns = 2; // Anzahl der Spalten
var text = "Feldname";
function findPrev(node, times) {
return times === 0 ? node : findPrev(node.prev(), --times);
}
var labelNode = $("td[class='ms-formlabel'] h3[class='ms-standardheader'] nobr:contains('"+ text +"')");
var controlNode = labelNode.parents("td").next();
var list = $("td",$(controlNode).children().first().children());
for(var i = list.length-1; i>0; i--) {
var item = $(list[i]);
var j = i % columns;
var newOne = j > 0 ? findPrev(item.parent(),j) : undefined;
if(newOne) item.insertAfter(newOne.children().first());
}
});
</script>
</div>
Wird die Seite nun im Browser angezeigt, stellt das JQuery Script nach dem Laden der Seite die Anzeige auf eine gewünschte Tabelle um.
Da man im Anlegendialog das HTML FormWebPart vermutlich nicht sehen will, empfiehlt es sich noch wie bei mir die Darstellung auf Hidden zu setzen.