[方法] リストからアイテムを返す

最終更新日: 2015年3月9日

適用対象: SharePoint Foundation 2010

リストからアイテムを返すには、SPList クラスの GetItem* メソッドの 1 つを使用して、必要な特定のアイテムまたはアイテムのサブセットを表す SPListItemCollection オブジェクトを取得します。次の表は、SPList が提供するメソッドの一覧です。

メソッド

説明

GetItemById(Int32)

指定した整数 ID を持つリスト アイテムを返します。

GetItemByIdAllFields(Int32)

指定した整数 ID を持つリスト アイテムを返し、アイテムのすべてのフィールドのデータを含めます。

GetItemByIdSelectedFields(Int32, [])

指定した整数 ID を持つリスト アイテムを返し、指定したフィールドの値のみを含めます。

GetItemByUniqueId(Guid)

指定のグローバル一意識別子 (GUID) に関連付けられているリスト アイテムを返します。

GetItems()

オーバーロード済み。リストからアイテムのコレクションを返します。

GetItemsWithUniquePermissions()

オーバーロード済み。セキュリティ アクセス許可を継承していないリスト アイテムのコレクションをリストから返します。返されるリスト アイテムは一意のアクセス許可セットを持ちます。

次の例では、指定した日付の後にイベントが発生した場合に、現在の Web サイトのカレンダー リストからアイテムを返します。パフォーマンスを向上させるために、この例では、GetItems(SPQuery) メソッドを使用して、クエリの範囲を一連のアイテムに制限しています。また、この例ではコンストラクターを使用して SPQuery オブジェクトをインスタンス化してから、そのクエリ オブジェクトの Query プロパティにクエリの内部 XML (つまり、<Where> 要素) を指定する Collaborative Application Markup Language (CAML) の文字列を代入しています。Query プロパティを設定した後は、GetItems メソッドにクエリ オブジェクトを渡すことにより、アイテムを返して表示しています。

Dim listTitle As String = TextBox1.Text
Dim mySite As SPWeb = SPContext.Current.Web 
Dim myList As SPList = mySite.Lists(listTitle)

Dim myQuery As New SPQuery()

myQuery.Query = "<Where><Geq><FieldRef Name = ""EventDate""/>" & _
    "<Value Type = ""DateTime"">2010-06-01</Value></Geq></Where>"

Dim myItems As SPListItemCollection = myList.GetItems(myQuery)

For i As Integer = 0 To myItems.Count - 1
    Dim item As SPListItem = myItems(i)

    Label1.Text += SPEncode.HtmlEncode(item("Title").ToString()) & _
        SPEncode.HtmlEncode(item("Start Time").ToString()) & _
        SPEncode.HtmlEncode(item("End Time").ToString()) & "<BR>"
Next
string listTitle = TextBox1.Text;
SPWeb mySite = SPContext.Current.Web;
SPList myList = mySite.Lists[listTitle];

SPQuery myQuery = new SPQuery();

myQuery.Query = "<Where><Geq><FieldRef Name = \"EventDate\"/>" +
    "<Value Type = \"DateTime\">2010-06-01</Value></Geq></Where>";

SPListItemCollection myItems = myList.GetItems(myQuery);

for (int i = 0; i < myItems.Count; i++) 
{
    SPListItem item = myItems[i]; 

    Label1.Text +=  SPEncode.HtmlEncode(item["Title"].ToString()) + " : " +
        SPEncode.HtmlEncode(item["Start Time"].ToString()) + " : " + 
        SPEncode.HtmlEncode(item["End Time"].ToString()) + "<BR>"; 
}

前の例では、リストの名前を入力するために使用できるテキスト ボックスと、返されたアイテムを表示するラベルが存在することを前提としています。ユーザーが入力したリストを返す作業と、アイテム コレクションを列挙する作業の両方がインデクサーを使用して行われています。また、個別のアイテムを操作するために、インデクサーを使用して、値を取得する列の名前を指定しています。この例では、指定したフィールド名は、標準の SharePoint Foundation カレンダー リストに関連しています。

重要重要

この例では、Items プロパティによって返されたアイテム コレクションを SPListItemCollection オブジェクトに割り当てて、列挙しています。ループ内で、たとえば myList.Items[i] を列挙しているのではないことに注意してください。これによりパフォーマンスが向上します。このロジックがないと、繰り返しごとにアイテム コレクション全体がループによって再作成されるからです。

次の例では、Stock 列の値が 100 を超えている Title 列の値のみを返しています。

Dim mySite As SPWeb = SPContext.Current.Web
Dim list As SPList = mySite.Lists("Books") 

Dim query As New SPQuery() 
query.Query = "<Where><Gt><FieldRef Name='Stock'/><Value Type='Number'>100</Value></Gt></Where>" 

Dim myItems As SPListItemCollection = list.GetItems(query) 
Dim item As SPListItem 

For Each item In myItems 
   Response.Write(SPEncode.HtmlEncode(item("Title").ToString()) & "<BR>") 
Next item
SPWeb mySite = SPContext.Current.Web;
SPList list = mySite.Lists["Books"]; 

SPQuery query = new SPQuery(); 
query.Query = "<Where><Gt><FieldRef Name='Stock'/><Value Type='Number'>100</Value></Gt></Where>"; 

SPListItemCollection myItems = list.GetItems(query); 

foreach (SPListItem item in myItems) 
{ 
   Response.Write(SPEncode.HtmlEncode(item["Title"].ToString()) + "<BR>"); 
}

この例では、数の値が格納された Stock 列を持つ Books リストが存在することを前提としています。

注意

前の例では、using ディレクティブ (Visual Basic では Imports) を使用して Microsoft.SharePoint 名前空間と Microsoft.SharePoint.Utilities 名前空間の両方を指定する必要があります。

クロス リスト クエリ

クロス リスト クエリを実行すると、複数の Web サイトに渡るデータをより効率的に照会することができます。次の例は、SPSiteDataQuery クラスを使用してクエリを定義してから、GetSiteData メソッドを使用して、Status 列が "Completed" になっているアイテムを、標準の SharePoint Foundation Tasks リスト (ServerTemplate = "107" で指定) から返しています。SharePoint Foundation サーバー テンプレートの一覧については、「SPListTemplateType」を参照してください。

Dim webSite As SPWeb = SPContext.Current.Web
Dim query As New SPSiteDataQuery()

query.Lists = "<Lists ServerTemplate=""107"" />"
query.Query = "<Where><Eq><FieldRef Name=""Status""/>" & 
"<Value Type=""Text"">Completed</Value></Eq></Where>"

Dim items As System.Data.DataTable = webSite.GetSiteData(query)
Dim item As System.Data.DataRow

For Each item In items
   Response.Write((SPEncode.HtmlEncode(item("Title").ToString()) + "<BR>"))
Next item
SPWeb webSite = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();

query.Lists = "<Lists ServerTemplate=\"107\" />";
query.Query =
   "<Where><Eq><FieldRef Name=\"Status\"/>" +
   "<Value Type=\"Text\">Completed</Value></Eq></Where>";

System.Data.DataTable items = webSite.GetSiteData(query);

foreach (System.Data.DataRow item in items)
{
   Response.Write(SPEncode.HtmlEncode(item["Title"].ToString()) + "<BR>");
}

この例では、Microsoft.SharePoint および Microsoft.SharePoint.Utilities の両方の名前空間で、using ディレクティブ (Visual Basic では Imports) が必要です。

関連項目

参照

Microsoft.SharePoint

概念

[方法] リスト アイテムのフィールドの値を読み取る

リストのオブジェクトとコレクションを操作する

Visual Studio を使用して SharePoint 開発を行う

データ更新のためのセキュリティ検証と投稿の作成

権限の昇格