Question

J'ai une colonne de liste SharePoint de type "Une seule ligne de texte". Prêt à l'emploi, SharePoint offre uniquement la possibilité d'afficher un total "Nombre" pour ce type de colonne. Je voudrais pouvoir effectuer une agrégation personnalisée sur les données (en particulier pour additionner les données numériques conservées sous forme de texte afin de surmonter cette lacune ).

J'ai trouvé des exemples d'utilisation similaire des colonnes calculées à l'aide de XSLT et Javascript , mais je pense que ces deux approches échouent lorsque les données sont paginées (agrégeant uniquement le sous-ensemble du contenu de la liste affiché à l'écran).

Je souhaite conserver les fonctionnalités du ListViewWebPart (rendu, tri, filtrage, définition de la vue, menus d'actions, etc.), mais ajoutez cette fonctionnalité. Comment puis-je faire cela?

Était-ce utile?

La solution 2

Je n'ai pas encore eu l'occasion de le tester, mais c'est le meilleur que je puisse trouver:

Créez un WebPart contenant deux contrôles:

  1. Un ViewToolBar avec le contexte de la liste / vue à afficher
  2. Un Littéral contenant le code HTML rendu de la vue à afficher

Ceci sera alors rendu comme la liste / vue originale.

Lors du rendu du WebPart , obtenez les éléments dans la vue en spécifiant le RowLimit comme valeur maximale afin que tous les éléments soient extraits (pas uniquement la première page). .

Parcourez les éléments, calculez le total dans un type de données approprié pour conserver la précision.

Rendez le total sous forme de valeur masquée dans le code HTML et remplacez le total Count rendu par Javascript, par exemple, à l'aide du méthode décrite ici .

Un aperçu du code:

public sealed class TextAggregatingWebPart : WebPart {
  protected override void CreateChildControls() {
    base.CreateChildControls();

    var web = SPContext.Current.Web;
    var list = web.Lists[SourceList];
    var view = list.Views[ViewOfSourceList];

    var toolbar = new ViewToolBar();
    var context = SPContext.GetContext(
    Context, view.ID, list.ID, SPContext.Current.Web);
    toolbar.RenderContext = context;
    Controls.Add(toolbar);

    var viewHtml = new Literal {Text = view.RenderAsHtml()};
    Controls.Add(viewHtml);
  }

  protected override void Render(HtmlTextWriter writer) {
    EnsureChildControls();
    base.Render(writer);

    var web = SPContext.Current.Web;
    var list = web.Lists[SourceList];
    var view = list.Views[ViewOfSourceList];

    var items = list.GetItems(new SPQuery(view) {RowLimit = uint.MaxValue});
    foreach (SPItem item in items) {
      // Calculate total
    }

    // Render total and Javascript to replace Count
  }
}

Notez que cela ne résout pas le problème lorsque l'écran Modifier la vue affiche uniquement le Nombre en tant que total pour les colonnes de texte. En outre, il est possible que des modifications dans la liste entre le rendu initial par la vue et la récupération des éléments pour agrégation puissent produire des écarts entre le total et les éléments affichés.

Autres conseils

Les seules choses que vous puissiez faire avec les totaux sont les suivantes:

Moyenne; Compter; Max; Min; Somme; Déviation standard; Variance

Vous ne savez pas comment calculer quoi que ce soit d'autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top