2010-03-31 42 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

相關問題