Freigeben über


Gewusst wie: Lesen des Werts eines Felds in einem Listenelement

Letzte Änderung: Freitag, 16. April 2010

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Übersicht
Abrufen eines Verweises auf eine Liste
Abrufen eines Verweises auf ein Listenelement
Abrufen des Werts eines Felds

In diesem Thema wird erläutert, wie der Wert eines bestimmten Felds (einer Spalte) in einem bestimmten Listenelement programmgesteuert gelesen wird.

Übersicht

Zum Lesen des Werts eines bestimmten Felds in einem Listenelement muss im Code zunächst ein Verweis auf die Website abgerufen werden, auf der die Liste bereitgestellt wird. Anschließend muss ein Verweis auf die Liste selbst, dann ein Verweis auf das Listenelement und schließlich ein Verweis auf das spezielle Feld abgerufen werden. Dieses Thema beschränkt sich auf die letzten drei Schritte, insbesondere auf den allerletzten. Weitere Informationen zum Abrufen von Verweisen auf Websites finden Sie unter Abrufen von Verweisen auf Websites, Webanwendungen und andere Schlüsselobjekte.

Abrufen eines Verweises auf eine Liste

Wenn Sie über einen Verweis auf die Website verfügen, die die Liste enthält, erhalten Sie einen Verweis auf die Liste durch einen Aufruf der GetList(String)-Methode des SPWeb-Objekts oder mithilfe eines Indexes der SPWeb.Lists-Eigenschaft des Website. Für die Verwendung der GetList(String)-Methode muss der Code in der Lage sein, die serverrelative URL der Liste zur Laufzeit zu übergeben. Nachfolgend sehen Sie ein Beispiel für die Verwendung dieser Methode, falls die tatsächliche serverrelative URL der Liste zur Entwurfszeit bekannt ist.

using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
    using (SPWeb web = siteCol.RootWeb)
    {
         SPList list = web.GetList("/sites/Contoso/Lists/Books");
    }
}

Weitere Informationen zu serverrelativen URLs finden Sie unter Beschreiben der Formen von URL-Zeichenfolgen.

Es gibt drei Typen von Indizes, die Sie für die SPWeb.Lists-Eigenschaft verwenden können:

  • Die GUID der Liste, beispielsweise SPList list = web.Lists[new Guid("53bd7850-49cc-4747-aded-e053659ace79")];. Die GUID ist der Wert der SPList.ID-Eigenschaft.

  • Die nullbasierte Position der Liste in der Lists-Auflistung, beispielsweise SPList list = web.Lists[12];.

  • Der Name der Liste, beispielsweise SPList list = web.Lists["Books"];. Der Name ist der Wert der SPList.Title-Eigenschaft.

Der letzte Typ ist der gängigste, da die GUID der Liste oder ihre Position in der Listenauflistung der Website relativ selten zur Entwurfszeit bzw. zur Laufzeit des Codes bekannt ist. Das folgende Beispiel zeigt diese Technik im Kontext.

using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
    using (SPWeb web = siteCol.RootWeb)
    {
         SPList list = web.Lists["Books"];
    }
}
TippTipp

Wenn in Microsoft SharePoint Foundation eine "Get"-Methode verfügbar ist, die einen bestimmten Typ von Objekt zurückgibt, sollten Sie diese der Verwendung eines Indexes einer Auflistung vorziehen. Im Allgemeinen lässt sich dadurch eine bessere Leistung erzielen. Falls im Code die benötigte serverrelative URL der Liste zur Laufzeit übergeben werden kann, sollten Sie in diesem Fall die GetList(String)-Methode statt eines Indexes der SPWeb.Lists-Eigenschaft verwenden.

Abrufen eines Verweises auf ein Listenelement

Nachdem Sie einen Verweis auf die Liste erstellt haben, haben Sie verschiedene Möglichkeiten, um einen Verweis auf ein bestimmtes Listenelement zu erhalten. Die optimale Leistung wird durch die Verwendung der GetItemByIdSelectedFields(Int32, [])-Methode des SPList-Objekts erzielt. Der erste Parameter ist die ID des Elements. Bei jeder Hinzufügung eines Elements zu der Liste wird diesem eine 1-basierte ganzzahlige ID zugewiesen, die um 1 größer ist als die ID des zuvor hinzugefügten Elements. Wird ein Element aus einer Liste gelöscht, wird dessen ID nicht wieder verwendet. Der zweite Parameter ist ein Array der internen Namen der Felder des Elements, die Sie aus der Inhaltsdatenbank abrufen möchten. Für eine maximale Leistung sollten Sie nur die Felder des Listenelements einschließen, auf die im Code später verwiesen wird. Der folgende Code ist ein Beispiel dafür.

using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
    using (SPWeb web = siteCol.RootWeb)
    {
        SPList list = web.GetList("/sites/Contoso/Lists/Books");
        
        SPListItem item = list.GetItemByIdSelectedFields(3, "Title", "ISBN", "Retail_x0020_Price");
    }
}

Beachten Sie, dass das Listenelement mit der ID 3 abgerufen wird, aber nur mit drei seiner Felder. Zudem wird der InternalName des Felds für den Einzelhandelspreis ("Retail Price") verwendet, nicht die Title-Eigenschaft des Felds, die in diesem Fall "Retail Price" lautet.

Wenn Sie alle Felder des Listenelements benötigen, verwenden Sie die GetItemByIdAllFields(Int32)-Methode. Ihr einziger Parameter ist die Element-ID. Für den Abruf von Listenelementen bestimmter Typen stehen spezielle Methoden zur Verfügung. Wenn Sie die GUID des Elements (den Wert seiner UniqueId-Eigenschaft) statt des Werts seiner ID-Eigenschaft kennen, verwenden Sie die GetItemByUniqueId(Guid)-Methode.

Wenn Sie weder die GUID noch die ID des Listenelements, aber den Wert einiger anderer Felder oder Eigenschaften kennen, können Sie mit einer der Überladungen der GetItems()-Methode mehrere Listenelemente zurückgeben und dann in einer Schleife mit bedingten Strukturen das gewünschte auswählen. Der folgende Code ist ein Beispiel dafür.

using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
    using (SPWeb web = siteCol.RootWeb)
    {
        SPList list = web.GetList("/sites/Contoso/Lists/Books");
        
        SPListItemCollection items = list.GetItems("Title", "ISBN", "Retail_x0020_Price");
        SPListItem item = null;
        foreach (SPListItem it in items)
        {
            if (it.Title == "Great Expectations")
            {
                 item = it;
            }
        }
}

Sie können auch mit dem LINQ to SharePoint-Anbieter eine Liste für eine gefilterte Menge von Elementen abfragen. Verwenden Sie die select-Klausel der LINQ-Abfrage, um die gewünschten Felder anzugeben. Weitere Informationen zum Abfragen von SharePoint mit LINQ finden Sie unter Gewusst wie: Ausführen von Abfragen mithilfe von LINQ to SharePoint.

Wichtiger HinweisWichtig

Das SPList-Objekt besitzt eine Items-Eigenschaft, auf dessen Member Sie mit einem Index zugreifen können. Dies wird allerdings nicht empfohlen, da bei dieser Technik alle Metadaten für alle Listenelemente aus der Inhaltsdatenbank abgerufen werden.

Abrufen des Werts eines Felds

Sobald ein Verweis auf das gewünschte Listenelement vorliegt, kann im Code der Wert eines beliebigen Felds mithilfe eines Indexes des SPListItem-Objekts gelesen werden. Es gibt Guid-, Int32- und String-Indizes. Sie können den Guid-Index verwenden, wenn Sie die Id des Felds kennen. Sie können den Int32-Index verwenden, wenn Sie die nullbasierte Spaltennummer des Felds in der übergeordneten Liste kennen. Sie können den String-Index verwenden, wenn Sie den InternalName, den Title oder den StaticName des Felds kennen. Zur Laufzeit wird die Zeichenfolge zunächst in den internen Namen gesucht, dann in den Feldtiteln und schließlich in den statischen Feldnamen. Daher können Sie durch die Verwendung des internen Namens, sofern er bekannt ist, die Leistung des Codes optimieren. Der folgende Code ist ein Beispiel dafür. Beachten Sie, dass der Indexer den Feldwert immer vom Typ Object zurückgibt. In der Regel müssen Sie ihn in den spezifischeren Typ umwandeln, wie dies im folgenden Beispiel gezeigt wird.

using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
    using (SPWeb web = siteCol.RootWeb)
    {
        SPList list = web.GetList("/sites/Contoso/Lists/Books");
        
        SPListItem item = list.GetItemByIdSelectedFields(3, "Title", "ISBN", "Retail_x0020_Price");

        String bookISBN = (String)item["ISBN"];
    }
}

Soll der Wert des Felds zur Einfügung in HTML-Code entweder als Wert eines Elements oder eines Attribut eines Elements formatiert werden, verwenden Sie die SPListItem.GetFormattedValue(String)-Methode. Sie gibt den Wert als Zeichenfolge zurück. Falls der Wert jedoch ein kaufmännisches Und-Zeichen, doppelte Anführungszeichen, einfache Anführungszeichen, Kleiner-als- oder Größer-als-Zeichen enthält, werden diese durch die entsprechenden HTML-Entitätsverweise ersetzt.

Die SPField-Klasse selbst (und somit jede davon abgeleitete Klasse) verfügt über unterschiedliche Methoden zum Konvertieren eines Feldwerts. In jedem Fall erhalten Sie zunächst einen Verweis auf den Feldwert mithilfe eines Indexes für das SPListItem-Objekt, wie oben gezeigt. Diesen Verweis übergeben Sie als Parameter an eine dieser Methoden, beispielsweise GetFieldValueAsText(item["ISBN"]).

Für jede dieser Methoden müssen Sie einen Verweis auf das Feld als SPField-Objekt abrufen. Dafür verwenden Sie die SPListItem.Fields-Eigenschaft des Listenelements. Dies ist eine Auflistung der Felder in der übergeordneten Liste. Der Typ ist SPFieldCollection. Dieses Objekt bietet wiederum mehrere Möglichkeiten, ein bestimmtes SPField-Objekt zurückzugeben.

  • Mithilfe der GetField(String)-Methode. Übergeben Sie den internen Namen, den Titel oder den statischen Namen des Felds. Der interne Name wird zuerst gesucht. Sofern Sie ihn kennen, sollten Sie daher aus Leistungsgründen den internen Namen verwenden. Der statische Name wird zuletzt gesucht.

  • Mithilfe der GetFieldByInternalName(String)-Methode.

  • Mithilfe der TryGetFieldByStaticName(String)-Methode.

  • Mithilfe eines Guid-, Int32- oder String-Indexes der SPListItem.Fields-Eigenschaft des Listenelements. Der erste Index gibt das SPField-Objekt zurück, dessen Id-Eigenschaft mit dem übergebenen Guid-Objekt übereinstimmt. Der zweite Index gibt das SPField-Objekt an der angegebenen nullbasierten Position in der Auflistung zurück. Der dritte Index gibt das SPField-Objekt zurück, dessen Title-Eigenschaft mit der übergebenen Zeichenfolge übereinstimmt. (Sie können nicht den internen Namen des Felds als Zeichenfolgenindex verwenden.)

Der folgende Code enthält einige Beispiele dafür, wie Sie mit Indizes und Methoden der von SPListItem und SPField abgeleiteten Klassen den Wert eines Felds abrufen.

using (SPSite siteCol = new SPSite("https://server/sites/Contoso"))
{
    using (SPWeb web = siteCol.RootWeb)
    {
        SPList list = web.GetList("/sites/Contoso/Lists/Books");
        
        SPListItem item = list.GetItemByIdSelectedFields(3, "Title", "ISBN", "Retail_x0020_Price");

        // Get price as Double straight from the SPListItem object.
        Double dblPrice = (Double)item["Retail_x0020_Price"];        

        // Get the SPField object by using the GetFieldByInternalName method, and then get
        // price as string. 
        SPFieldCurrency priceField = (SPFieldCurrency)item.Fields.GetFieldByInternalName("Retail_x0020_Price");
        String strPrice = priceField.GetFieldValueAsText(item["Retail_x0020_Price"])

        // Get price as string from the SPField object. Use string SPFieldCollection index 
        // to get the SPField object (must use field object Title as index parameter). But 
        // use internal name of field as SPListItem index for better performance.
          String strPrice2 = item.Fields["Retail Price"].GetFieldValueAsText(item["Retail_x0020_Price"]);
    }
}

Siehe auch

Konzepte

Gewusst wie: Auflisten von Websites und Websitesammlungen

Gewusst wie: Zurückgeben von Elementen aus einer Liste