2009-12-26 36 views
0

我寫了一個擴展SPFieldLookup的自定義字段。我設置了AllowMultipleValues = true; 這裏是現場控制值:Sharepoint自定義SPFieldLookup只保存一個值

public override object Value 
    { 
     get 
     { 
      EnsureChildControls(); 
      SPFieldLookupValueCollection vals = new SPFieldLookupValueCollection(); 
      ICollection s = TinBaiLienQuanPicker.SelectedIds; 
      if (s != null && s.Count > 0) 
      { 
       foreach (var i in s) 
       { 
        ListItem z = availableItems.Find(x => (x.Value == i.ToString())); 
        if (z != null) 
        { 
         vals.Add(new SPFieldLookupValue(int.Parse(z.Value), z.Text)); 
        } 
       } 
      } 
      return vals; 
     } 
     set 
     { 
      EnsureChildControls(); 
      base.Value = value as SPFieldLookupValueCollection; 
     } 
    } 

當控制保存現場數據,我看到它返回一個集合其中有多個值。 但是當我再次檢索數據時,我只收到第一個值。我從Control Field'ListItemFieldValue屬性中獲取值。

請給我一個小費。非常感謝你。

回答

0

數據庫中查找字段的數據存儲邏輯不同,其中一個值與多個值相比較。檢查的字段類型定義XML ParentType的設置爲LookupMulti而不是查找

+0

嗨,EG。感謝您的回覆。 ParentType已被設置爲LookupMulti。 – 2009-12-29 06:55:08

0

您必須從MultipleLookupField繼承現場控制類,而不是從LookupField繼承。你確定你在做這個嗎?

+0

嗨,naivists。 當我擴展BaseFieldControl時,我只在顯示和編輯模式下獲得一個值。如您所說,將繼承更改爲LookupField或MultipleLookupField時,該字段僅在編輯模式下返回正確的值。在顯示模式下,只返回第一個項目。 謝謝。 – 2009-12-30 17:29:06

+0

SharePoint的「十二月累積更新」實際上也在談論您的問題:「您開發了一個自定義字段類型,該類型繼承自SPFieldLookUp類,您希望將多個值存儲在該自定義字段類型的字段中,因此,您需要設置AllowMultipleValues屬性設置爲True。但是,將AllowMultipleValues屬性設置爲True後,字段類型將顯示爲Lookup而不是自定義字段類型。 http://support.microsoft.com/kb/977022/ – naivists 2010-01-05 08:11:34