2016-08-09 101 views
0

Ich bin derzeit auf der Suche nach einer Möglichkeit zum Hinzufügen einer Filterfunktion zu einer Liste in SharePoint, die den Listeninhalt über Kontrollkästchen Auswahl gefiltert.Filtern Sie sofort eine SharePoint-Liste über dynamische Checkboxen (mit C# und/oder Ajax)

könnte Dieser kleine Mockup helfen zu verstehen, was ich rede:

Mockup

Die Idee ist, eine normale Sharepoint benutzerdefinierte Liste auf der rechten Seite und ein Checkboxlist auf der linken Seite, haben, wird dynamisch aus dem Inhalt der Liste generiert werden -> Eine Spalte ist eine "Filtergruppe" und alle Feldinhalte sind die Filterwerte.

Wenn Sie einen oder mehrere Werte auf der linken Seite auswählen, sollten die Einträge in der Liste sofort entsprechend gefiltert werden (Ajax, ohne die Seite neu zu laden). Zum Beispiel würde im Modell die Auswahl von "New York" und "Blau" nur den Gegenstand "Steve's Car" anzeigen.

Sie jetzt, wie ein Produktfilter in fast jedem Online-Shop und so weiter.

Wie kann das erreicht werden? Wäre super, wenn das in meinem Lösungspaket enthalten sein könnte (welches bereits andere Sachen in C#/jQuery enthält).

Ich bin neu gestaltet in Sharepoint Frontend, aber ich bin sicher, dass es einen Weg gibt :-)

Edit: Ich bin von der Art und Weise SP2016 verwendet.

Antwort

2

Pandora!

Wie ich es verstehe, ist Ihre erste Frage, wie Sie dynamisch Werte für den linken Filter erhalten können. Ich sehe da zwei Möglichkeiten: Erstens können Sie eine Caml-Abfrage erstellen und Elemente aus der Liste abrufen. In der zweiten Möglichkeit können Sie ctx.ListData verwenden, wobei der Sharepoint von sich selbst und in ctx.ListData.Row (Array von Elementen) Prozesselementen initialisiert und eindeutige Feldwerte erhalten. Beachten Sie, dass ctx.ListData.Row nur Elemente enthält, die in der Listenansicht auf der Seite geladen sind.

Für Listenfilterung können Sie Filterlink für Hash der Seite concat. Beispiel: "? List = {ListID} & Ansicht = {ViewID} & FilterField1 = Color-FilterValue1 = Blau". Versuchen Sie, Spalten in der Liste zu filtern, und Sie werden die URL-Änderung sehen. ListID und ViewId können Sie mit ctx.listName und ctx.view abrufen.

Und dann übergeben Sie es in der Funktion MyRefreshPageToEx. Die Liste wird gefiltert.

More list filtration info

function FilterList(){ 
    var tableId = $(".ms-listviewtable").attr("id"); 
    var filterUrl = "?List={ListID}&View={ViewID}&FilterField1=Color-FilterValue1=Blue"; 
    MyRefreshPageToEx(tableId, filterUrl, false); 
} 

function MyRefreshPageToEx(lvTableID, url, bForceSubmit) { 
    var tblv = document.getElementById(lvTableID); 
    var clvp = CLVPFromCtx(tblv); 

    if (clvp != null && clvp.ctx.IsClientRendering) { 
     clvp.RefreshPaging(url); 
     clvp.ctx.queryString = url; 
     if ((typeof clvp.ctx.operationType == "undefined" || clvp.ctx.operationType == SPListOperationType.Default) && Boolean(clvp.ctx.ListData)) { 
      var fromPage = clvp.ctx.ListData.FirstRow - 1; 
      var toPage = Number(GetUrlKeyValue("PageFirstRow", false, url)); 

      if (!isNaN(fromPage) && !isNaN(toPage) && fromPage != toPage) 
       fromPage < toPage ? (clvp.ctx.operationType = SPListOperationType.PagingRight) : (clvp.ctx.operationType = SPListOperationType.PagingLeft); 
     } 
    } 
    else { 
     SubmitFormPost(url, bForceSubmit); 
    } 
} 

+0

War mein Rat für Sie hilfreich? –