2012-03-17 64 views
1

我有两个列表和一个事件接收器。事件接收器将列表中的列设置为唯一标识符(内容类型和项目标识符的组合)。 在另一个列表中,我使用查询字符串和newform将一个字段设置为上面相同的唯一标识符。我还收集了一些我希望与之合作的新形式的更多信息。需要找到一个SPItem而不知道项目的ID

如何在不知道ID的情况下查询列表,但我有另一个唯一的ID从其他项目中选出,因此我可以像下面的SPitem firstitem一样使用它,以便我可以找到其他字段。


让我的第一个项目,以获得独特称号:

SPSite currentSite = SPContext.Current.Site; 
SPWeb web = currentSite.OpenWeb(); 

string queryString = Request.QueryString["uniqueID"]; 
SPList firstList = web.Lists["My First List"]; 
SPItem firstItem = firstList.Items.GetItemById(Convert.ToInt32(queryString)); 

这是独一无二的头衔,我想查询与第二个列表:

string uniqueTitle = firstItem["Title"].ToString(); 

让我的第二个列表了,准备动作:

SPList secondList = web.Lists["My Second List"]; 

感谢


答:

// open the second list 
SPList secondList = web.Lists["My Second List"]; 

// Query the second list for the item 
SPQuery myQuery = new SPQuery(); 
myQuery.Query = "<Where><Eq><FieldRef Name = \"Title\"/>" + 
"<Value Type = \"Text\">" + uniqueTitle + 
"</Value></Eq></Where>"; 

// Get a collection of the second list items selected by the query and pick the first (0) value as it should only return one! 
SPListItemCollection secondlistItemCol = secondList.GetItems(myQuery); 
SPListItem secondItem = secondlistItemCol[0]; 

回答

2

您将要使用的GetItems command with an SPQuery object。使用下面的MS代码示例进行分类并不太复杂。

using System; 
using Microsoft.SharePoint; 

namespace Test 
{ 
    class ConsoleApp 
    { 
     static void Main(string[] args) 
     { 
     using (SPSite site = new SPSite("http://localhost")) 
     { 
      using (SPWeb web = site.OpenWeb()) 
      { 
       // Build a query. 
       SPQuery query = new SPQuery(); 
       query.Query = string.Concat(
           "<Where><Eq>", 
           "<FieldRef Name='Status'/>", 
           "<Value Type='CHOICE'>Not Started</Value>", 
           "</Eq></Where>", 
           "<OrderBy>", 
           "<FieldRef Name='DueDate' Ascending='TRUE' />", 
           "<FieldRef Name=’Priority’ Ascending='TRUE' />", 
           "</OrderBy>");      

       query.ViewFields = string.Concat(
            "<FieldRef Name='AssignedTo' />", 
            "<FieldRef Name='LinkTitle' />", 
            "<FieldRef Name='DueDate' />", 
            "<FieldRef Name='Priority' />"); 

       query.ViewFieldsOnly = true; // Fetch only the data that we need. 

       // Get data from a list. 
       string listUrl = web.ServerRelativeUrl + "/lists/tasks"; 
       SPList list = web.GetList(listUrl); 
       SPListItemCollection items = list.GetItems(query); 

       // Print a report header. 
       Console.WriteLine("{0,-25} {1,-20} {2,-25} {3}", 
        "Assigned To", "Task", "Due Date", "Priority"); 

       // Print the details. 
       foreach (SPListItem item in items) 
       { 
        Console.WriteLine("{0,-25} {1,-20} {2,-25} {3}", 
        item["AssignedTo"], item["LinkTitle"], item["DueDate"], item["Priority"]); 
       } 
      } 
     } 
     Console.ReadLine(); 
     } 
    } 
} 
+0

Dear Nat,我已经解决了这个问题,但你的回答是正确的。我所做的是让我完美的是在查询唯一项目后,我通过SPListItem item = itemCollection [0]选择了第一个(也是唯一一个)。 – regularroutine 2012-03-21 16:09:00

相关问题