Frage

Ich möchte das MultipleLookupField-Steuerelement in einer Webseite verwenden, die im Kontext von SharePoint ausgeführt wird.Ich habe mich gefragt, ob mir jemand mit einem Beispiel helfen könnte, das Schritt für Schritt zeigt, wie man mit der Steuerung zwei SPField-Sammlungen anzeigt.

War es hilfreich?

Lösung

Ich bin mir nicht ganz sicher, ob ich Ihre Frage verstehe, insbesondere was die Anzeige zweier SPField-Sammlungen betrifft.Tut mir leid, wenn sich herausstellt, dass dies die Antwort auf eine ganz andere Frage ist!

Hier ist jedenfalls eine kurze Demo-Anleitung zur Verwendung des MultipleLookupField in einem Webpart.

Erstellen Sie eine Teamwebsite.Fügen Sie der Aufgabenliste einige Aufgaben hinzu.Legen Sie außerdem ein Dokument in der Bibliothek „Gemeinsame Dokumente“ ab.Erstellen Sie eine neue Spalte in der Bibliothek „Gemeinsame Dokumente“.Nennen Sie es „Verwandt“, stellen Sie eine Suche im Feld „Titel“ der Aufgabenliste dar und lassen Sie mehrere Werte zu.

Erstellen Sie nun ein Webpart, führen Sie die üblichen Standardschritte aus und fügen Sie dann Folgendes hinzu:

Label l;
MultipleLookupField mlf;

protected override void CreateChildControls()
{
    base.CreateChildControls();
    SPList list = SPContext.Current.Web.Lists["Shared Documents"];
    if (list != null && list.Items.Count > 0)
    {
        LiteralControl lit = new LiteralControl("Associate tasks to " + 
                             list.Items[0].Name);
        this.Controls.Add(lit);

        mlf = new MultipleLookupField();
        mlf.ControlMode = SPControlMode.Edit;
        mlf.FieldName = "Related";
        mlf.ItemId = list.Items[0].ID;
        mlf.ListId = list.ID;
        mlf.ID = "Related";
        this.Controls.Add(mlf);

        Button b = new Button();
        b.Text = "Change";
        b.Click += new EventHandler(bClick);
        this.Controls.Add(b);

        l = new Label();
        this.Controls.Add(l);
    }

}

void bClick(object sender, EventArgs e)
{
    l.Text = "";
    foreach (SPFieldLookupValue val in (SPFieldLookupValueCollection)mlf.Value)
    {
        l.Text += val.LookupValue.ToString() + " ";
    }
    SPListItem listitem = mlf.List.Items[0];
    listitem["Related"] = mlf.Value;
    listitem.Update();
    mlf.Value = listitem["Related"];
}

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    EnsureChildControls();
}

Zugegeben, das ist grenzwertig lächerlich – alles ist fest codiert, es gibt überhaupt keine Fehlerbehandlung und es erfüllt keinen sinnvollen Zweck – aber es ist nur als kurze Demo gedacht.Erstellen Sie nun dieses Webpart, stellen Sie es bereit und fügen Sie eine Instanz davon zur Homepage Ihrer Teamsite hinzu.Es sollte Ihnen ermöglichen, die Aufgaben abzurufen und festzulegen, die mit dem ersten Dokument in der Bibliothek verknüpft sind.

Das seltsame Bit gegen Ende des Click-Handlers der Schaltfläche, bei dem wir einen Wert aus mlf.Value lesen und ihn dann wieder zurückschreiben, scheint erforderlich zu sein, wenn die Benutzeroberfläche mit den tatsächlichen Listenwerten synchron bleiben soll.Versuchen Sie, die letzte Zeile von bClick wegzulassen, um zu verstehen, was ich meine.Das hat mich in der letzten Stunde oder so in den Wahnsinn getrieben und ich hoffe, dass ein anderer Kommentator einen besseren Ansatz finden kann ...

Andere Tipps

Hm.Funktioniert bei mir einwandfrei. Mal sehen, ob wir herausfinden können, wie sich Ihr Setup unterscheidet ...

Es sieht so aus, als ob es Probleme beim Auffüllen des Steuerelements gibt.Meine erste Vermutung wäre, dass das daran liegt, dass der Code so viele Annahmen über die Listen macht, mit denen er kommuniziert.Können Sie überprüfen, ob Sie eine einfache Team-Site haben, mit (vorausgesetzt, bei diesen Namen muss die Groß-/Kleinschreibung beachtet werden):

  1. Eine Liste mit dem Namen „Aufgaben“ mit mehreren Elementen darin
  2. Eine Bibliothek namens „Freigegebene Dokumente“ mit mindestens einem Dokument
  3. Eine Spalte mit dem Namen „Verwandt“ in der Bibliothek „Freigegebene Dokumente“.
  4. Die Spalte „Verwandt“ ist ein Nachschlagefeld in der Spalte „Titel“ von Aufgaben und lässt mehrere Werte zu.
  5. Das erste Dokument in „Gemeinsame Dokumente“ hat einen Wert für „Verwandt“.

Fügen Sie dann das Webpart hinzu.Daumen drücken...

Hm.OK, ich versuche immer noch, meines kaputt zu machen ...Also ging ich in das Layouts-Verzeichnis und erstellte eine Datei foo.aspx.Hier ist es:

<%@ Page Language="C#" Inherits="System.Web.UI.Page" MasterPageFile="~/_layouts/simple.master" %> 
<%@ Register Tagprefix="foo" Namespace="Foople" Assembly="Foople, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"%>
<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
<foo:WebPart1 id="fred" runat="server" />
<foo:WebPart1a id="barney" runat="server" />
</asp:Content>

WebPart1 ist das Webpart von zuvor.WebPart1a ist genau derselbe Code, jedoch in einer Klasse, die direkt von WebControl und nicht von WebPart erbt.

Es funktioniert einwandfrei, abgesehen von einem Sicherheitsvalidierungsproblem beim Postback, das ich nicht debuggen kann.

Durch Ändern der Masterseite in ~masterurl/default.master habe ich foo.aspx in die Bibliothek „Freigegebene Dokumente“ hochgeladen, und von dort aus funktioniert es auch einwandfrei – sowohl das WebControl als auch das WebPart verhalten sich ordnungsgemäß und das Sicherheitsproblem ist ebenfalls behoben.

Ich bin also ratlos.Obwohl mir diese Seite mit einem obskuren möglichen Fehler aufgefallen ist, der auch in SPFolder.get_ContentTypeOrder() vorkommt: http://forums.msdn.microsoft.com/en-US/sharepointdevelopment/thread/63baf273-7f36-453e-8293-26417759e2e1/

Gibt es eine Chance, dass Sie Ihren Code posten könnten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top