2010-03-31 43 views
3

我在SharePoint中有一个查找字段,它只引用另一个列表。我想知道如何以编程方式列举此字段的所有可能值? 例如,我的查询字段“实际城市”指的是“城市”列表和“标题”列,我在那里有3个城市。在代码中,我想获得所有可能值的列表场“实际城”,像水木清华(元代码,不好意思):如何获得SPFieldLookup的所有可能值

SPFieldLookup f = myList["Actual City"];
Collection availableValues = f.GetAllPossibleValues();
//this should return collection with all cities a user might select for the field

回答

0

我认为没有明确的方法返回你想要什么。但SPFieldLookup类存储您需要手动请求此信息的所有信息:LookupFieldLookupList

因此,您可以通过从查找字段使用的列表中获取信息来检索信息。为了使其可重用,您可以将其实现为Extension Method。所以下次你真的可以拨打f.GetAllPossibleValues();

0

据我所知你想查询所有正在使用的值?

如果是的话,你就必须要查询的项目,其中我市实际,不为空,查询看起来是这样的:

<Where><IsNotNull><FieldRef Name='Actual City'/></IsNotNull></Where> 

然后,对于每个查询的项目,你会

List<SPFieldLookupValue> result = new List<SPFieldLookupValue>(returnedItemCount * 5); 

foreach (SPListItem item in queriedItems) { 
    object lookup = item["Actual City"]; 
    SPFieldLookupValueCollection lookupValues = new SPFIeldLookupValueCollection(
    (lookup != null) ? lookup.ToString() : "" 
); 
    foreach (SPFieldLookupValue lookupValue in lookupValues) { 
    if (!result.Contains(lookupValue)) { 
     result.Add(lookupValue); 
    } 
    } 
} 

或者你可以使用HashTable,其中LookupId将是字符串,而LookupValue将是int id,然后检查HashTable.ContainsKey(lookupId) ...是否应该更快地在哈希表中查找整数而不是列表中的字符串,但是资源密集型部分可能会查询所有项目领域Contai然后循环...

0

如果你想列举所有可能的值,这意味着你基本上想要从城市列表中的所有项目中获得所有的标题字段值。我不认为在SharePoint中有一种像GetAllPossibleValues()这样的方法,但是您可以只列出城市中的所有项目并获取它们的标题(如果只有少数),或者如果有很多项目,则使用CAML查询。

4

我写了一些代码来处理我的项目就在这一天。也许它会有所帮助。

public static List<SPFieldLookupValue> GetLookupFieldValues(SPList list, string fieldName) 
    { 
     var results = new List<SPFieldLookupValue>(); 
     var field = list.Fields.GetField(fieldName); 

     if (field.Type != SPFieldType.Lookup) throw new SPException(String.Format("The field {0} is not a lookup field.", fieldName)); 

     var lookupField = field as SPFieldLookup; 
     var lookupList = list.ParentWeb.Lists[Guid.Parse(lookupField.LookupList)]; 
     var query = new SPQuery(); 

     query.Query = String.Format("<OrderBy><FieldRef Name='{0}'/></OrderBy>", lookupField.LookupField); 

     foreach (SPListItem item in lookupList.GetItems(query)) 
     { 
      results.Add(new SPFieldLookupValue(item.ID, item[lookupField.LookupField].ToString())); 
     } 

     return results; 
    } 

然后使用它,您的代码会是这个样子:

 var list = SPContext.Current.Web.Lists["My List"]; 
     var results = GetLookupFieldValues(list, "Actual City"); 

     foreach (SPFieldLookupValue result in results) 
     { 
      var value = result.LookupValue; 
      var id = result.LookupId; 
     } 
+0

如果查找列表是在不同的网站(例如网站查阅列)这将失败。要检查列表所在的站点,请检查lookupField.lookupWebId - http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spfieldlookup.lookuplist.aspx – Ryan 2014-08-20 13:44:53

相关问题